{"id":"fac0757097c452567d4b64f14075f2c2","_format":"hh-sol-build-info-1","solcVersion":"0.7.6","solcLongVersion":"0.7.6+commit.7338295f","input":{"language":"Solidity","sources":{"@openzeppelin/contracts/math/SafeMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.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, with an overflow flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        uint256 c = a + b;\n        if (c < a) return (false, 0);\n        return (true, c);\n    }\n\n    /**\n     * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n     *\n     * _Available since v3.4._\n     */\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        if (b > a) return (false, 0);\n        return (true, a - b);\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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) return (true, 0);\n        uint256 c = a * b;\n        if (c / a != b) return (false, 0);\n        return (true, c);\n    }\n\n    /**\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        if (b == 0) return (false, 0);\n        return (true, a / b);\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        if (b == 0) return (false, 0);\n        return (true, a % b);\n    }\n\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        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        require(b <= a, \"SafeMath: subtraction overflow\");\n        return a - b;\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        if (a == 0) return 0;\n        uint256 c = a * b;\n        require(c / a == b, \"SafeMath: multiplication overflow\");\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers, reverting 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        require(b > 0, \"SafeMath: division by zero\");\n        return a / b;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * reverting 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        require(b > 0, \"SafeMath: modulo by zero\");\n        return a % b;\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     * CAUTION: This function is deprecated because it requires allocating memory for the error\n     * message unnecessarily. For custom revert reasons use {trySub}.\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        return a - b;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n     * division by zero. The result is rounded towards zero.\n     *\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\n     * message unnecessarily. For custom revert reasons use {tryDiv}.\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        return a / b;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * reverting with custom message when dividing by zero.\n     *\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\n     * message unnecessarily. For custom revert reasons use {tryMod}.\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"},"@openzeppelin/contracts/proxy/Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internall call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 { revert(0, returndatasize()) }\n            default { return(0, returndatasize()) }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n     * and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internall call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _beforeFallback();\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback () external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n     * is empty.\n     */\n    receive () external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n     * call, or as part of the Solidity `fallback` or `receive` functions.\n     *\n     * If overriden should call `super._beforeFallback()`.\n     */\n    function _beforeFallback() internal virtual {\n    }\n}\n"},"@openzeppelin/contracts/proxy/UpgradeableProxy.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n    /**\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n     *\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n     */\n    constructor(address _logic, bytes memory _data) public payable {\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n        _setImplementation(_logic);\n        if(_data.length > 0) {\n            Address.functionDelegateCall(_logic, _data);\n        }\n    }\n\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _implementation() internal view virtual override returns (address impl) {\n        bytes32 slot = _IMPLEMENTATION_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            impl := sload(slot)\n        }\n    }\n\n    /**\n     * @dev Upgrades the proxy to a new implementation.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal virtual {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n        bytes32 slot = _IMPLEMENTATION_SLOT;\n\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            sstore(slot, newImplementation)\n        }\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/Context.sol\";\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.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\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_) public {\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 virtual 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 virtual 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 virtual returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual 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     *\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 virtual {\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/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.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.6.2 <0.8.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        // This method relies on extcodesize, which returns 0 for contracts in\n        // construction, since the code is only stored at the end of the\n        // constructor execution.\n\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { size := extcodesize(account) }\n        return size > 0;\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        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: value }(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        require(isContract(target), \"Address: delegate call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\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"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.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"},"contracts/accessors/SimulateTxAccessor.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../base/Executor.sol\";\n\n/**\n * @title Simulate Transaction Accessor.\n * @notice Can be used with StorageAccessible to simulate Safe transactions.\n * @author Richard Meissner - @rmeissner\n */\ncontract SimulateTxAccessor is Executor {\n    address private immutable accessorSingleton;\n\n    constructor() {\n        accessorSingleton = address(this);\n    }\n\n    /**\n     * @notice Modifier to make a function callable via delegatecall only.\n     * If the function is called via a regular call, it will revert.\n     */\n    modifier onlyDelegateCall() {\n        require(address(this) != accessorSingleton, \"SimulateTxAccessor should only be called via delegatecall\");\n        _;\n    }\n\n    /**\n     * @notice Simulates a Safe transaction and returns the used gas, success boolean and the return data.\n     * @dev Executes the specified operation {Call, DelegateCall} and returns operation-specific data.\n     *      Has to be called via delegatecall.\n     *      This returns the data equal to `abi.encode(uint256(etimate), bool(success), bytes(returnData))`.\n     *      Specifically, the returndata will be:\n     *      `estimate:uint256 || success:bool || returnData.length:uint256 || returnData:bytes`.\n     * @param to Destination address .\n     * @param value Native token value.\n     * @param data Data payload.\n     * @param operation Operation type {Call, DelegateCall}.\n     * @return estimate Gas used.\n     * @return success Success boolean value.\n     * @return returnData Return data.\n     */\n    function simulate(\n        address to,\n        uint256 value,\n        bytes calldata data,\n        Enum.Operation operation\n    ) external onlyDelegateCall returns (uint256 estimate, bool success, bytes memory returnData) {\n        uint256 startGas = gasleft();\n        success = execute(to, value, data, operation, gasleft());\n        estimate = startGas - gasleft();\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            // Load free memory location\n            let ptr := mload(0x40)\n            // We allocate memory for the return data by setting the free memory location to\n            // current free memory location + data size + 32 bytes for data size value\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\n            // Store the size\n            mstore(ptr, returndatasize())\n            // Store the data\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\n            // Point the return data to the correct memory location\n            returnData := ptr\n        }\n    }\n}\n"},"contracts/base/Executor.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\nimport \"../common/Enum.sol\";\n\n/**\n * @title Executor - A contract that can execute transactions\n * @author Richard Meissner - @rmeissner\n */\nabstract contract Executor {\n    /**\n     * @notice Executes either a delegatecall or a call with provided parameters.\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\n     *      - if the contract at `to` address has code or not\n     *      It is the responsibility of the caller to perform such checks.\n     * @param to Destination address.\n     * @param value Ether value.\n     * @param data Data payload.\n     * @param operation Operation type.\n     * @return success boolean flag indicating if the call succeeded.\n     */\n    function execute(\n        address to,\n        uint256 value,\n        bytes memory data,\n        Enum.Operation operation,\n        uint256 txGas\n    ) internal returns (bool success) {\n        if (operation == Enum.Operation.DelegateCall) {\n            // solhint-disable-next-line no-inline-assembly\n            assembly {\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\n            }\n        } else {\n            // solhint-disable-next-line no-inline-assembly\n            assembly {\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\n            }\n        }\n    }\n}\n"},"contracts/base/FallbackManager.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../common/SelfAuthorized.sol\";\n\n/**\n * @title Fallback Manager - A contract managing fallback calls made to this contract\n * @author Richard Meissner - @rmeissner\n */\nabstract contract FallbackManager is SelfAuthorized {\n    event ChangedFallbackHandler(address indexed handler);\n\n    // keccak256(\"fallback_manager.handler.address\")\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\n\n    /**\n     *  @notice Internal function to set the fallback handler.\n     *  @param handler contract to handle fallback calls.\n     */\n    function internalSetFallbackHandler(address handler) internal {\n        /*\n            If a fallback handler is set to self, then the following attack vector is opened:\n            Imagine we have a function like this:\n            function withdraw() internal authorized {\n                withdrawalAddress.call.value(address(this).balance)(\"\");\n            }\n\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\n        */\n        require(handler != address(this), \"GS400\");\n\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            sstore(slot, handler)\n        }\n    }\n\n    /**\n     * @notice Set Fallback Handler to `handler` for the Safe.\n     * @dev Only fallback calls without value and with data will be forwarded.\n     *      This can only be done via a Safe transaction.\n     *      Cannot be set to the Safe itself.\n     * @param handler contract to handle fallback calls.\n     */\n    function setFallbackHandler(address handler) public authorized {\n        internalSetFallbackHandler(handler);\n        emit ChangedFallbackHandler(handler);\n    }\n\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\n    //      and having the original caller address may enable additional verification scenarios.\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\n    fallback() external {\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            let handler := sload(slot)\n            if iszero(handler) {\n                return(0, 0)\n            }\n            calldatacopy(0, 0, calldatasize())\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\n            // Then the address without padding is stored right after the calldata\n            mstore(calldatasize(), shl(96, caller()))\n            // Add 20 bytes for the address appended add the end\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\n            returndatacopy(0, 0, returndatasize())\n            if iszero(success) {\n                revert(0, returndatasize())\n            }\n            return(0, returndatasize())\n        }\n    }\n}\n"},"contracts/base/GuardManager.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../common/Enum.sol\";\nimport \"../common/SelfAuthorized.sol\";\nimport \"../interfaces/IERC165.sol\";\n\ninterface Guard is IERC165 {\n    function checkTransaction(\n        address to,\n        uint256 value,\n        bytes memory data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address payable refundReceiver,\n        bytes memory signatures,\n        address msgSender\n    ) external;\n\n    function checkAfterExecution(bytes32 txHash, bool success) external;\n}\n\nabstract contract BaseGuard is Guard {\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\n        return\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\n    }\n}\n\n/**\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\n * @author Richard Meissner - @rmeissner\n */\nabstract contract GuardManager is SelfAuthorized {\n    event ChangedGuard(address indexed guard);\n\n    // keccak256(\"guard_manager.guard.address\")\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\n\n    /**\n     * @dev Set a guard that checks transactions before execution\n     *      This can only be done via a Safe transaction.\n     *      ⚠️ IMPORTANT: Since a guard has full power to block Safe transaction execution,\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\n     *        audit the guard code and design recovery mechanisms.\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\n     */\n    function setGuard(address guard) external authorized {\n        if (guard != address(0)) {\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \"GS300\");\n        }\n        bytes32 slot = GUARD_STORAGE_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            sstore(slot, guard)\n        }\n        emit ChangedGuard(guard);\n    }\n\n    /**\n     * @dev Internal method to retrieve the current guard\n     *      We do not have a public method because we're short on bytecode size limit,\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\n     *      with the slot `GUARD_STORAGE_SLOT`\n     * @return guard The address of the guard\n     */\n    function getGuard() internal view returns (address guard) {\n        bytes32 slot = GUARD_STORAGE_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            guard := sload(slot)\n        }\n    }\n}\n"},"contracts/base/ModuleManager.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\nimport \"../common/Enum.sol\";\nimport \"../common/SelfAuthorized.sol\";\nimport \"./Executor.sol\";\n\n/**\n * @title Module Manager - A contract managing Safe modules\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\n           ⚠️ WARNING: Modules are a security risk since they can execute arbitrary transactions, \n           so only trusted and audited modules should be added to a Safe. A malicious module can\n           completely takeover a Safe.\n * @author Stefan George - @Georgi87\n * @author Richard Meissner - @rmeissner\n */\nabstract contract ModuleManager is SelfAuthorized, Executor {\n    event EnabledModule(address indexed module);\n    event DisabledModule(address indexed module);\n    event ExecutionFromModuleSuccess(address indexed module);\n    event ExecutionFromModuleFailure(address indexed module);\n\n    address internal constant SENTINEL_MODULES = address(0x1);\n\n    mapping(address => address) internal modules;\n\n    /**\n     * @notice Setup function sets the initial storage of the contract.\n     *         Optionally executes a delegate call to another contract to setup the modules.\n     * @param to Optional destination address of call to execute.\n     * @param data Optional data of call to execute.\n     */\n    function setupModules(address to, bytes memory data) internal {\n        require(modules[SENTINEL_MODULES] == address(0), \"GS100\");\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\n        if (to != address(0)) {\n            require(isContract(to), \"GS002\");\n            // Setup has to complete successfully or transaction fails.\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \"GS000\");\n        }\n    }\n\n    /**\n     * @notice Enables the module `module` for the Safe.\n     * @dev This can only be done via a Safe transaction.\n     * @param module Module to be whitelisted.\n     */\n    function enableModule(address module) public authorized {\n        // Module address cannot be null or sentinel.\n        require(module != address(0) && module != SENTINEL_MODULES, \"GS101\");\n        // Module cannot be added twice.\n        require(modules[module] == address(0), \"GS102\");\n        modules[module] = modules[SENTINEL_MODULES];\n        modules[SENTINEL_MODULES] = module;\n        emit EnabledModule(module);\n    }\n\n    /**\n     * @notice Disables the module `module` for the Safe.\n     * @dev This can only be done via a Safe transaction.\n     * @param prevModule Previous module in the modules linked list.\n     * @param module Module to be removed.\n     */\n    function disableModule(address prevModule, address module) public authorized {\n        // Validate module address and check that it corresponds to module index.\n        require(module != address(0) && module != SENTINEL_MODULES, \"GS101\");\n        require(modules[prevModule] == module, \"GS103\");\n        modules[prevModule] = modules[module];\n        modules[module] = address(0);\n        emit DisabledModule(module);\n    }\n\n    /**\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\n     * @param to Destination address of module transaction.\n     * @param value Ether value of module transaction.\n     * @param data Data payload of module transaction.\n     * @param operation Operation type of module transaction.\n     * @return success Boolean flag indicating if the call succeeded.\n     */\n    function execTransactionFromModule(\n        address to,\n        uint256 value,\n        bytes memory data,\n        Enum.Operation operation\n    ) public virtual returns (bool success) {\n        // Only whitelisted modules are allowed.\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \"GS104\");\n        // Execute transaction without further confirmations.\n        success = execute(to, value, data, operation, type(uint256).max);\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\n        else emit ExecutionFromModuleFailure(msg.sender);\n    }\n\n    /**\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\n     * @param to Destination address of module transaction.\n     * @param value Ether value of module transaction.\n     * @param data Data payload of module transaction.\n     * @param operation Operation type of module transaction.\n     * @return success Boolean flag indicating if the call succeeded.\n     * @return returnData Data returned by the call.\n     */\n    function execTransactionFromModuleReturnData(\n        address to,\n        uint256 value,\n        bytes memory data,\n        Enum.Operation operation\n    ) public returns (bool success, bytes memory returnData) {\n        success = execTransactionFromModule(to, value, data, operation);\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            // Load free memory location\n            let ptr := mload(0x40)\n            // We allocate memory for the return data by setting the free memory location to\n            // current free memory location + data size + 32 bytes for data size value\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\n            // Store the size\n            mstore(ptr, returndatasize())\n            // Store the data\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\n            // Point the return data to the correct memory location\n            returnData := ptr\n        }\n    }\n\n    /**\n     * @notice Returns if an module is enabled\n     * @return True if the module is enabled\n     */\n    function isModuleEnabled(address module) public view returns (bool) {\n        return SENTINEL_MODULES != module && modules[module] != address(0);\n    }\n\n    /**\n     * @notice Returns an array of modules.\n     *         If all entries fit into a single page, the next pointer will be 0x1.\n     *         If another page is present, next will be the last element of the returned array.\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\n     * @return array Array of modules.\n     * @return next Start of the next page.\n     */\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \"GS105\");\n        require(pageSize > 0, \"GS106\");\n        // Init array with max page size\n        array = new address[](pageSize);\n\n        // Populate return array\n        uint256 moduleCount = 0;\n        next = modules[start];\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\n            array[moduleCount] = next;\n            next = modules[next];\n            moduleCount++;\n        }\n\n        /**\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \n          \n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \n          included to the current page, nor will it be included in the next one if you pass it as a start.\n        */\n        if (next != SENTINEL_MODULES) {\n            next = array[moduleCount - 1];\n        }\n        // Set correct size of returned array\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            mstore(array, moduleCount)\n        }\n    }\n\n    /**\n     * @notice Returns true if `account` is a contract.\n     * @dev This function will return false if invoked during the constructor of a contract,\n     *      as the code is not actually created until after the constructor finishes.\n     * @param account The address being queried\n     */\n    function isContract(address account) internal view returns (bool) {\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            size := extcodesize(account)\n        }\n        return size > 0;\n    }\n}\n"},"contracts/base/OwnerManager.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\nimport \"../common/SelfAuthorized.sol\";\n\n/**\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\n *      is more efficient than using a dynamic array.\n * @author Stefan George - @Georgi87\n * @author Richard Meissner - @rmeissner\n */\nabstract contract OwnerManager is SelfAuthorized {\n    event AddedOwner(address indexed owner);\n    event RemovedOwner(address indexed owner);\n    event ChangedThreshold(uint256 threshold);\n\n    address internal constant SENTINEL_OWNERS = address(0x1);\n\n    mapping(address => address) internal owners;\n    uint256 internal ownerCount;\n    uint256 internal threshold;\n\n    /**\n     * @notice Sets the initial storage of the contract.\n     * @param _owners List of Safe owners.\n     * @param _threshold Number of required confirmations for a Safe transaction.\n     */\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\n        // Threshold can only be 0 at initialization.\n        // Check ensures that setup function can only be called once.\n        require(threshold == 0, \"GS200\");\n        // Validate that threshold is smaller than number of added owners.\n        require(_threshold <= _owners.length, \"GS201\");\n        // There has to be at least one Safe owner.\n        require(_threshold >= 1, \"GS202\");\n        // Initializing Safe owners.\n        address currentOwner = SENTINEL_OWNERS;\n        for (uint256 i = 0; i < _owners.length; i++) {\n            // Owner address cannot be null.\n            address owner = _owners[i];\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \"GS203\");\n            // No duplicate owners allowed.\n            require(owners[owner] == address(0), \"GS204\");\n            owners[currentOwner] = owner;\n            currentOwner = owner;\n        }\n        owners[currentOwner] = SENTINEL_OWNERS;\n        ownerCount = _owners.length;\n        threshold = _threshold;\n    }\n\n    /**\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\n     * @dev This can only be done via a Safe transaction.\n     * @param owner New owner address.\n     * @param _threshold New threshold.\n     */\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\n        // Owner address cannot be null, the sentinel or the Safe itself.\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \"GS203\");\n        // No duplicate owners allowed.\n        require(owners[owner] == address(0), \"GS204\");\n        owners[owner] = owners[SENTINEL_OWNERS];\n        owners[SENTINEL_OWNERS] = owner;\n        ownerCount++;\n        emit AddedOwner(owner);\n        // Change threshold if threshold was changed.\n        if (threshold != _threshold) changeThreshold(_threshold);\n    }\n\n    /**\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\n     * @dev This can only be done via a Safe transaction.\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\n     * @param owner Owner address to be removed.\n     * @param _threshold New threshold.\n     */\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\n        // Only allow to remove an owner, if threshold can still be reached.\n        require(ownerCount - 1 >= _threshold, \"GS201\");\n        // Validate owner address and check that it corresponds to owner index.\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \"GS203\");\n        require(owners[prevOwner] == owner, \"GS205\");\n        owners[prevOwner] = owners[owner];\n        owners[owner] = address(0);\n        ownerCount--;\n        emit RemovedOwner(owner);\n        // Change threshold if threshold was changed.\n        if (threshold != _threshold) changeThreshold(_threshold);\n    }\n\n    /**\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\n     * @dev This can only be done via a Safe transaction.\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\n     * @param oldOwner Owner address to be replaced.\n     * @param newOwner New owner address.\n     */\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\n        // Owner address cannot be null, the sentinel or the Safe itself.\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \"GS203\");\n        // No duplicate owners allowed.\n        require(owners[newOwner] == address(0), \"GS204\");\n        // Validate oldOwner address and check that it corresponds to owner index.\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \"GS203\");\n        require(owners[prevOwner] == oldOwner, \"GS205\");\n        owners[newOwner] = owners[oldOwner];\n        owners[prevOwner] = newOwner;\n        owners[oldOwner] = address(0);\n        emit RemovedOwner(oldOwner);\n        emit AddedOwner(newOwner);\n    }\n\n    /**\n     * @notice Changes the threshold of the Safe to `_threshold`.\n     * @dev This can only be done via a Safe transaction.\n     * @param _threshold New threshold.\n     */\n    function changeThreshold(uint256 _threshold) public authorized {\n        // Validate that threshold is smaller than number of owners.\n        require(_threshold <= ownerCount, \"GS201\");\n        // There has to be at least one Safe owner.\n        require(_threshold >= 1, \"GS202\");\n        threshold = _threshold;\n        emit ChangedThreshold(threshold);\n    }\n\n    /**\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\n     * @return Threshold number.\n     */\n    function getThreshold() public view returns (uint256) {\n        return threshold;\n    }\n\n    /**\n     * @notice Returns if `owner` is an owner of the Safe.\n     * @return Boolean if owner is an owner of the Safe.\n     */\n    function isOwner(address owner) public view returns (bool) {\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\n    }\n\n    /**\n     * @notice Returns a list of Safe owners.\n     * @return Array of Safe owners.\n     */\n    function getOwners() public view returns (address[] memory) {\n        address[] memory array = new address[](ownerCount);\n\n        // populate return array\n        uint256 index = 0;\n        address currentOwner = owners[SENTINEL_OWNERS];\n        while (currentOwner != SENTINEL_OWNERS) {\n            array[index] = currentOwner;\n            currentOwner = owners[currentOwner];\n            index++;\n        }\n        return array;\n    }\n}\n"},"contracts/common/Enum.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title Enum - Collection of enums used in Safe contracts.\n * @author Richard Meissner - @rmeissner\n */\nabstract contract Enum {\n    enum Operation {\n        Call,\n        DelegateCall\n    }\n}\n"},"contracts/common/NativeCurrencyPaymentFallback.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\n * @author Richard Meissner - @rmeissner\n */\nabstract contract NativeCurrencyPaymentFallback {\n    event SafeReceived(address indexed sender, uint256 value);\n\n    /**\n     * @notice Receive function accepts native currency transactions.\n     * @dev Emits an event with sender and received value.\n     */\n    receive() external payable {\n        emit SafeReceived(msg.sender, msg.value);\n    }\n}\n"},"contracts/common/SecuredTokenTransfer.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title SecuredTokenTransfer - Secure token transfer.\n * @author Richard Meissner - @rmeissner\n */\nabstract contract SecuredTokenTransfer {\n    /**\n     * @notice Transfers a token and returns a boolean if it was a success\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\n     *      It doesn't check if the `token` address is a contract or not.\n     * @param token Token that should be transferred\n     * @param receiver Receiver to whom the token should be transferred\n     * @param amount The amount of tokens that should be transferred\n     * @return transferred Returns true if the transfer was successful\n     */\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\n        // 0xa9059cbb - keccack(\"transfer(address,uint256)\")\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            // We write the return value to scratch space.\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n            switch returndatasize()\n            case 0 {\n                transferred := success\n            }\n            case 0x20 {\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\n            }\n            default {\n                transferred := 0\n            }\n        }\n    }\n}\n"},"contracts/common/SelfAuthorized.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\n * @author Richard Meissner - @rmeissner\n */\nabstract contract SelfAuthorized {\n    function requireSelfCall() private view {\n        require(msg.sender == address(this), \"GS031\");\n    }\n\n    modifier authorized() {\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\n        requireSelfCall();\n        _;\n    }\n}\n"},"contracts/common/SignatureDecoder.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title SignatureDecoder - Decodes signatures encoded as bytes\n * @author Richard Meissner - @rmeissner\n */\nabstract contract SignatureDecoder {\n    /**\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\n     *      Compact means uint8 is not padded to 32 bytes.\n     * @param pos Which signature to read.\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\n     * @param signatures Concatenated {r, s, v} signatures.\n     * @return v Recovery ID or Safe signature type.\n     * @return r Output value r of the signature.\n     * @return s Output value s of the signature.\n     */\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            let signaturePos := mul(0x41, pos)\n            r := mload(add(signatures, add(signaturePos, 0x20)))\n            s := mload(add(signatures, add(signaturePos, 0x40)))\n            /**\n             * Here we are loading the last 32 bytes, including 31 bytes\n             * of 's'. There is no 'mload8' to do this.\n             * 'byte' is not working due to the Solidity parser, so lets\n             * use the second best option, 'and'\n             */\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\n        }\n    }\n}\n"},"contracts/common/Singleton.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\n * @author Richard Meissner - @rmeissner\n */\nabstract contract Singleton {\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\n    // It should also always be ensured the address is stored alone (uses a full word)\n    address private singleton;\n}\n"},"contracts/common/StorageAccessible.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\n *         It removes a method from the original contract not needed for the Safe contracts.\n * @author Gnosis Developers\n */\nabstract contract StorageAccessible {\n    /**\n     * @notice Reads `length` bytes of storage in the currents contract\n     * @param offset - the offset in the current contract's storage in words to start reading from\n     * @param length - the number of words (32 bytes) of data to read\n     * @return the bytes that were read.\n     */\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\n        bytes memory result = new bytes(length * 32);\n        for (uint256 index = 0; index < length; index++) {\n            // solhint-disable-next-line no-inline-assembly\n            assembly {\n                let word := sload(add(offset, index))\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Performs a delegatecall on a targetContract in the context of self.\n     * Internally reverts execution to avoid side effects (making it static).\n     *\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\n     * Specifically, the `returndata` after a call to this method will be:\n     * `success:bool || response.length:uint256 || response:bytes`.\n     *\n     * @param targetContract Address of the contract containing the code to execute.\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\n     */\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\n\n            mstore(0x00, success)\n            mstore(0x20, returndatasize())\n            returndatacopy(0x40, 0, returndatasize())\n            revert(0, add(returndatasize(), 0x40))\n        }\n    }\n}\n"},"contracts/examples/guards/DebugTransactionGuard.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../../common/Enum.sol\";\nimport \"../../base/GuardManager.sol\";\nimport \"../../Safe.sol\";\n\n/**\n * @title Debug Transaction Guard - Emits transaction events with extended information.\n * @dev This guard is only meant as a development tool and example\n * @author Richard Meissner - @rmeissner\n */\ncontract DebugTransactionGuard is BaseGuard {\n    // solhint-disable-next-line payable-fallback\n    fallback() external {\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\n        // E.g. The expected check method might change and then the Safe would be locked.\n    }\n\n    event TransactionDetails(\n        address indexed safe,\n        bytes32 indexed txHash,\n        address to,\n        uint256 value,\n        bytes data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        bool usesRefund,\n        uint256 nonce,\n        bytes signatures,\n        address executor\n    );\n\n    event GasUsage(address indexed safe, bytes32 indexed txHash, uint256 indexed nonce, bool success);\n\n    mapping(bytes32 => uint256) public txNonces;\n\n    /**\n     * @notice Called by the Safe contract before a transaction is executed.\n     * @param to Destination address of Safe transaction.\n     * @param value Ether value of Safe transaction.\n     * @param data Data payload of Safe transaction.\n     * @param operation Operation type of Safe transaction.\n     * @param safeTxGas Gas that should be used for the Safe transaction.\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund)\n     * @param gasPrice Gas price that should be used for the payment calculation.\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n     * @param signatures Signature data that should be verified. Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\n     * @param executor Account executing the transaction.\n     */\n    function checkTransaction(\n        address to,\n        uint256 value,\n        bytes memory data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        // solhint-disable-next-line no-unused-vars\n        address payable refundReceiver,\n        bytes memory signatures,\n        address executor\n    ) external override {\n        uint256 nonce;\n        bytes32 txHash;\n        {\n            Safe safe = Safe(payable(msg.sender));\n            nonce = safe.nonce() - 1;\n            txHash = safe.getTransactionHash(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, nonce);\n        }\n        emit TransactionDetails(msg.sender, txHash, to, value, data, operation, safeTxGas, gasPrice > 0, nonce, signatures, executor);\n        txNonces[txHash] = nonce;\n    }\n\n    /**\n     * @notice Called by the Safe contract after a transaction is executed.\n     * @param txHash Hash of the executed transaction.\n     * @param success True if the transaction was successful.\n     */\n    function checkAfterExecution(bytes32 txHash, bool success) external override {\n        uint256 nonce = txNonces[txHash];\n        require(nonce != 0, \"Could not get nonce\");\n        txNonces[txHash] = 0;\n        emit GasUsage(msg.sender, txHash, nonce, success);\n    }\n}\n"},"contracts/examples/guards/DelegateCallTransactionGuard.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../../common/Enum.sol\";\nimport \"../../base/GuardManager.sol\";\nimport \"../../Safe.sol\";\n\n/**\n * @title DelegateCallTransactionGuard - Limits delegate calls to a specific target.\n * @author Richard Meissner - @rmeissner\n */\ncontract DelegateCallTransactionGuard is BaseGuard {\n    address public immutable allowedTarget;\n\n    constructor(address target) {\n        allowedTarget = target;\n    }\n\n    // solhint-disable-next-line payable-fallback\n    fallback() external {\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\n        // E.g. The expected check method might change and then the Safe would be locked.\n    }\n\n    /**\n     * @notice Called by the Safe contract before a transaction is executed.\n     * @dev  Reverts if the transaction is a delegate call to contract other than the allowed one.\n     * @param to Destination address of Safe transaction.\n     * @param operation Operation type of Safe transaction.\n     */\n    function checkTransaction(\n        address to,\n        uint256,\n        bytes memory,\n        Enum.Operation operation,\n        uint256,\n        uint256,\n        uint256,\n        address,\n        // solhint-disable-next-line no-unused-vars\n        address payable,\n        bytes memory,\n        address\n    ) external view override {\n        require(operation != Enum.Operation.DelegateCall || to == allowedTarget, \"This call is restricted\");\n    }\n\n    function checkAfterExecution(bytes32, bool) external view override {}\n}\n"},"contracts/examples/guards/OnlyOwnersGuard.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../../common/Enum.sol\";\nimport \"../../base/GuardManager.sol\";\nimport \"../../Safe.sol\";\n\ninterface ISafe {\n    function getOwners() external view returns (address[] memory);\n}\n\n/**\n * @title OnlyOwnersGuard - Only allows owners to execute transactions.\n * @author Richard Meissner - @rmeissner\n */\ncontract OnlyOwnersGuard is BaseGuard {\n    ISafe public safe;\n\n    constructor() {}\n\n    // solhint-disable-next-line payable-fallback\n    fallback() external {\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\n        // E.g. The expected check method might change and then the Safe would be locked.\n    }\n\n    /**\n     * @notice Called by the Safe contract before a transaction is executed.\n     * @dev Reverts if the transaction is not executed by an owner.\n     * @param msgSender Executor of the transaction.\n     */\n    function checkTransaction(\n        address,\n        uint256,\n        bytes memory,\n        Enum.Operation,\n        uint256,\n        uint256,\n        uint256,\n        address,\n        // solhint-disable-next-line no-unused-vars\n        address payable,\n        bytes memory,\n        address msgSender\n    ) external view override {\n        // Only owners can exec\n        address[] memory owners = ISafe(msg.sender).getOwners();\n        for (uint256 i = 0; i < owners.length; i++) {\n            if (owners[i] == msgSender) {\n                return;\n            }\n        }\n\n        // msg sender is not an owner\n        revert(\"msg sender is not allowed to exec\");\n    }\n\n    function checkAfterExecution(bytes32, bool) external view override {}\n}\n"},"contracts/examples/guards/ReentrancyTransactionGuard.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../../common/Enum.sol\";\nimport \"../../base/GuardManager.sol\";\nimport \"../../Safe.sol\";\n\n/**\n * @title ReentrancyTransactionGuard - Prevents reentrancy into the transaction execution function.\n * @author Richard Meissner - @rmeissner\n */\ncontract ReentrancyTransactionGuard is BaseGuard {\n    bytes32 internal constant GUARD_STORAGE_SLOT = keccak256(\"reentrancy_guard.guard.struct\");\n\n    struct GuardValue {\n        bool active;\n    }\n\n    // solhint-disable-next-line payable-fallback\n    fallback() external {\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\n        // E.g. The expected check method might change and then the Safe would be locked.\n    }\n\n    /**\n     * @notice Returns the guard value for the current context.\n     * @dev The guard value is stored in a slot that is unique to the contract instance and the function in which it is called.\n     * @return guard The guard value.\n     */\n    function getGuard() internal pure returns (GuardValue storage guard) {\n        bytes32 slot = GUARD_STORAGE_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            guard.slot := slot\n        }\n    }\n\n    /**\n     * @notice Called by the Safe contract before a transaction is executed.\n     * @dev Reverts if reentrancy is detected.\n     */\n    function checkTransaction(\n        address,\n        uint256,\n        bytes memory,\n        Enum.Operation,\n        uint256,\n        uint256,\n        uint256,\n        address,\n        // solhint-disable-next-line no-unused-vars\n        address payable,\n        bytes memory,\n        address\n    ) external override {\n        GuardValue storage guard = getGuard();\n        require(!guard.active, \"Reentrancy detected\");\n        guard.active = true;\n    }\n\n    /**\n     * @notice Called by the Safe contract after a transaction is executed.\n     * @dev Resets the guard value.\n     */\n    function checkAfterExecution(bytes32, bool) external override {\n        getGuard().active = false;\n    }\n}\n"},"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\nimport \"../../libraries/SafeStorage.sol\";\n\n/**\n * @title Migration - Migrates a Safe contract from 1.3.0 to 1.2.0\n * @author Richard Meissner - @rmeissner\n */\ncontract Migration is SafeStorage {\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749;\n\n    address public immutable migrationSingleton;\n    address public immutable safe120Singleton;\n\n    constructor(address targetSingleton) {\n        // Singleton address cannot be zero address.\n        require(targetSingleton != address(0), \"Invalid singleton address provided\");\n        safe120Singleton = targetSingleton;\n        migrationSingleton = address(this);\n    }\n\n    event ChangedMasterCopy(address singleton);\n\n    /**\n     * @notice Migrates the Safe to the Singleton contract at `migrationSingleton`.\n     * @dev This can only be called via a delegatecall.\n     */\n    function migrate() public {\n        require(address(this) != migrationSingleton, \"Migration should only be called via delegatecall\");\n\n        singleton = safe120Singleton;\n        _deprecatedDomainSeparator = keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, this));\n        emit ChangedMasterCopy(singleton);\n    }\n}\n"},"contracts/external/SafeMath.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title SafeMath\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\n */\nlibrary SafeMath {\n    /**\n     * @notice Multiplies two numbers, reverts on overflow.\n     * @param a First number\n     * @param b Second number\n     * @return Product of a and b\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-solidity/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b);\n\n        return c;\n    }\n\n    /**\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n     * @param a First number\n     * @param b Second number\n     * @return Difference of a and b\n     */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b <= a);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n     * @notice Adds two numbers, reverts on overflow.\n     * @param a First number\n     * @param b Second number\n     * @return Sum of a and b\n     */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a);\n\n        return c;\n    }\n\n    /**\n     * @notice Returns the largest of two numbers.\n     * @param a First number\n     * @param b Second number\n     * @return Largest of a and b\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a >= b ? a : b;\n    }\n}\n"},"contracts/handler/CompatibilityFallbackHandler.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"./TokenCallbackHandler.sol\";\nimport \"../interfaces/ISignatureValidator.sol\";\nimport \"../Safe.sol\";\n\n/**\n * @title Compatibility Fallback Handler - Provides compatibility between pre 1.3.0 and 1.3.0+ Safe contracts.\n * @author Richard Meissner - @rmeissner\n */\ncontract CompatibilityFallbackHandler is TokenCallbackHandler, ISignatureValidator {\n    // keccak256(\"SafeMessage(bytes message)\");\n    bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;\n\n    bytes4 internal constant SIMULATE_SELECTOR = bytes4(keccak256(\"simulate(address,bytes)\"));\n\n    address internal constant SENTINEL_MODULES = address(0x1);\n    bytes4 internal constant UPDATED_MAGIC_VALUE = 0x1626ba7e;\n\n    /**\n     * @notice Legacy EIP-1271 signature validation method.\n     * @dev Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)\n     * @param _data Arbitrary length data signed on the behalf of address(msg.sender).\n     * @param _signature Signature byte array associated with _data.\n     * @return The EIP-1271 magic value.\n     */\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view override returns (bytes4) {\n        // Caller should be a Safe\n        Safe safe = Safe(payable(msg.sender));\n        bytes memory messageData = encodeMessageDataForSafe(safe, _data);\n        bytes32 messageHash = keccak256(messageData);\n        if (_signature.length == 0) {\n            require(safe.signedMessages(messageHash) != 0, \"Hash not approved\");\n        } else {\n            safe.checkSignatures(messageHash, messageData, _signature);\n        }\n        return EIP1271_MAGIC_VALUE;\n    }\n\n    /**\n     * @dev Returns the hash of a message to be signed by owners.\n     * @param message Raw message bytes.\n     * @return Message hash.\n     */\n    function getMessageHash(bytes memory message) public view returns (bytes32) {\n        return getMessageHashForSafe(Safe(payable(msg.sender)), message);\n    }\n\n    /**\n     * @dev Returns the pre-image of the message hash (see getMessageHashForSafe).\n     * @param safe Safe to which the message is targeted.\n     * @param message Message that should be encoded.\n     * @return Encoded message.\n     */\n    function encodeMessageDataForSafe(Safe safe, bytes memory message) public view returns (bytes memory) {\n        bytes32 safeMessageHash = keccak256(abi.encode(SAFE_MSG_TYPEHASH, keccak256(message)));\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), safe.domainSeparator(), safeMessageHash);\n    }\n\n    /**\n     * @dev Returns hash of a message that can be signed by owners.\n     * @param safe Safe to which the message is targeted.\n     * @param message Message that should be hashed.\n     * @return Message hash.\n     */\n    function getMessageHashForSafe(Safe safe, bytes memory message) public view returns (bytes32) {\n        return keccak256(encodeMessageDataForSafe(safe, message));\n    }\n\n    /**\n     * @notice Implementation of updated EIP-1271 signature validation method.\n     * @param _dataHash Hash of the data signed on the behalf of address(msg.sender)\n     * @param _signature Signature byte array associated with _dataHash\n     * @return Updated EIP1271 magic value if signature is valid, otherwise 0x0\n     */\n    function isValidSignature(bytes32 _dataHash, bytes calldata _signature) external view returns (bytes4) {\n        ISignatureValidator validator = ISignatureValidator(msg.sender);\n        bytes4 value = validator.isValidSignature(abi.encode(_dataHash), _signature);\n        return (value == EIP1271_MAGIC_VALUE) ? UPDATED_MAGIC_VALUE : bytes4(0);\n    }\n\n    /**\n     * @dev Returns array of first 10 modules.\n     * @return Array of modules.\n     */\n    function getModules() external view returns (address[] memory) {\n        // Caller should be a Safe\n        Safe safe = Safe(payable(msg.sender));\n        (address[] memory array, ) = safe.getModulesPaginated(SENTINEL_MODULES, 10);\n        return array;\n    }\n\n    /**\n     * @dev Performs a delegatecall on a targetContract in the context of self.\n     * Internally reverts execution to avoid side effects (making it static). Catches revert and returns encoded result as bytes.\n     * @dev Inspired by https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\n     * @param targetContract Address of the contract containing the code to execute.\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\n     */\n    function simulate(address targetContract, bytes calldata calldataPayload) external returns (bytes memory response) {\n        /**\n         * Suppress compiler warnings about not using parameters, while allowing\n         * parameters to keep names for documentation purposes. This does not\n         * generate code.\n         */\n        targetContract;\n        calldataPayload;\n\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            let internalCalldata := mload(0x40)\n            /**\n             * Store `simulateAndRevert.selector`.\n             * String representation is used to force right padding\n             */\n            mstore(internalCalldata, \"\\xb4\\xfa\\xba\\x09\")\n            /**\n             * Abuse the fact that both this and the internal methods have the\n             * same signature, and differ only in symbol name (and therefore,\n             * selector) and copy calldata directly. This saves us approximately\n             * 250 bytes of code and 300 gas at runtime over the\n             * `abi.encodeWithSelector` builtin.\n             */\n            calldatacopy(add(internalCalldata, 0x04), 0x04, sub(calldatasize(), 0x04))\n\n            /**\n             * `pop` is required here by the compiler, as top level expressions\n             * can't have return values in inline assembly. `call` typically\n             * returns a 0 or 1 value indicated whether or not it reverted, but\n             * since we know it will always revert, we can safely ignore it.\n             */\n            pop(\n                call(\n                    gas(),\n                    // address() has been changed to caller() to use the implementation of the Safe\n                    caller(),\n                    0,\n                    internalCalldata,\n                    calldatasize(),\n                    /**\n                     * The `simulateAndRevert` call always reverts, and\n                     * instead encodes whether or not it was successful in the return\n                     * data. The first 32-byte word of the return data contains the\n                     * `success` value, so write it to memory address 0x00 (which is\n                     * reserved Solidity scratch space and OK to use).\n                     */\n                    0x00,\n                    0x20\n                )\n            )\n\n            /**\n             * Allocate and copy the response bytes, making sure to increment\n             * the free memory pointer accordingly (in case this method is\n             * called as an internal function). The remaining `returndata[0x20:]`\n             * contains the ABI encoded response bytes, so we can just write it\n             * as is to memory.\n             */\n            let responseSize := sub(returndatasize(), 0x20)\n            response := mload(0x40)\n            mstore(0x40, add(response, responseSize))\n            returndatacopy(response, 0x20, responseSize)\n\n            if iszero(mload(0x00)) {\n                revert(add(response, 0x20), mload(response))\n            }\n        }\n    }\n}\n"},"contracts/handler/HandlerContext.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title Handler Context - Allows the fallback handler to extract addition context from the calldata\n * @dev The fallback manager appends the following context to the calldata:\n *      1. Fallback manager caller address (non-padded)\n * based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/f8cc8b844a9f92f63dc55aa581f7d643a1bc5ac1/contracts/metatx/ERC2771Context.sol\n * @author Richard Meissner - @rmeissner\n */\nabstract contract HandlerContext {\n    /**\n     * @notice Allows fetching the original caller address.\n     * @dev This is only reliable in combination with a FallbackManager that supports this (e.g. Safe contract >=1.3.0).\n     *      When using this functionality make sure that the linked _manager (aka msg.sender) supports this.\n     *      This function does not rely on a trusted forwarder. Use the returned value only to\n     *      check information against the calling manager.\n     * @return sender Original caller address.\n     */\n    function _msgSender() internal pure returns (address sender) {\n        // The assembly code is more direct than the Solidity version using `abi.decode`.\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            sender := shr(96, calldataload(sub(calldatasize(), 20)))\n        }\n    }\n\n    /**\n     * @notice Returns the FallbackManager address\n     * @return Fallback manager address\n     */\n    function _manager() internal view returns (address) {\n        return msg.sender;\n    }\n}\n"},"contracts/handler/TokenCallbackHandler.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../interfaces/ERC1155TokenReceiver.sol\";\nimport \"../interfaces/ERC721TokenReceiver.sol\";\nimport \"../interfaces/ERC777TokensRecipient.sol\";\nimport \"../interfaces/IERC165.sol\";\n\n/**\n * @title Default Callback Handler - Handles supported tokens' callbacks, allowing Safes receiving these tokens.\n * @author Richard Meissner - @rmeissner\n */\ncontract TokenCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 {\n    /**\n     * @notice Handles ERC1155 Token callback.\n     * return Standardized onERC1155Received return value.\n     */\n    function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure override returns (bytes4) {\n        return 0xf23a6e61;\n    }\n\n    /**\n     * @notice Handles ERC1155 Token batch callback.\n     * return Standardized onERC1155BatchReceived return value.\n     */\n    function onERC1155BatchReceived(\n        address,\n        address,\n        uint256[] calldata,\n        uint256[] calldata,\n        bytes calldata\n    ) external pure override returns (bytes4) {\n        return 0xbc197c81;\n    }\n\n    /**\n     * @notice Handles ERC721 Token callback.\n     *  return Standardized onERC721Received return value.\n     */\n    function onERC721Received(address, address, uint256, bytes calldata) external pure override returns (bytes4) {\n        return 0x150b7a02;\n    }\n\n    /**\n     * @notice Handles ERC777 Token callback.\n     * return nothing (not standardized)\n     */\n    function tokensReceived(address, address, address, uint256, bytes calldata, bytes calldata) external pure override {\n        // We implement this for completeness, doesn't really have any value\n    }\n\n    /**\n     * @notice Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165.\n     * @param interfaceId Id of the interface.\n     * @return if the interface is supported.\n     */\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\n        return\n            interfaceId == type(ERC1155TokenReceiver).interfaceId ||\n            interfaceId == type(ERC721TokenReceiver).interfaceId ||\n            interfaceId == type(IERC165).interfaceId;\n    }\n}\n"},"contracts/interfaces/ERC1155TokenReceiver.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n// Note: The ERC-165 identifier for this interface is 0x4e2312e0.\ninterface ERC1155TokenReceiver {\n    /**\n     * @notice Handle the receipt of a single ERC1155 token type.\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.\n     *      This function MUST return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61) if it accepts the transfer.\n     *      This function MUST revert if it rejects the transfer.\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\n     * @param _operator  The address which initiated the transfer (i.e. msg.sender).\n     * @param _from      The address which previously owned the token.\n     * @param _id        The ID of the token being transferred.\n     * @param _value     The amount of tokens being transferred.\n     * @param _data      Additional data with no specified format.\n     * @return           `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`.\n     */\n    function onERC1155Received(\n        address _operator,\n        address _from,\n        uint256 _id,\n        uint256 _value,\n        bytes calldata _data\n    ) external returns (bytes4);\n\n    /**\n     * @notice Handle the receipt of multiple ERC1155 token types.\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.\n     *      This function MUST return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).\n     *      This function MUST revert if it rejects the transfer(s).\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\n     * @param _operator  The address which initiated the batch transfer (i.e. msg.sender).\n     * @param _from      The address which previously owned the token.\n     * @param _ids       An array containing ids of each token being transferred (order and length must match _values array).\n     * @param _values    An array containing amounts of each token being transferred (order and length must match _ids array).\n     * @param _data      Additional data with no specified format.\n     * @return           `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`.\n     */\n    function onERC1155BatchReceived(\n        address _operator,\n        address _from,\n        uint256[] calldata _ids,\n        uint256[] calldata _values,\n        bytes calldata _data\n    ) external returns (bytes4);\n}\n"},"contracts/interfaces/ERC721TokenReceiver.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.\ninterface ERC721TokenReceiver {\n    /**\n     * @notice Handle the receipt of an NFT\n     * @dev The ERC721 smart contract calls this function on the recipient\n     *  after a `transfer`. This function MAY throw to revert and reject the\n     *  transfer. Return of other than the magic value MUST result in the\n     *  transaction being reverted.\n     *  Note: the contract address is always the message sender.\n     * @param _operator The address which called `safeTransferFrom` function.\n     * @param _from The address which previously owned the token.\n     * @param _tokenId The NFT identifier which is being transferred.\n     * @param _data Additional data with no specified format.\n     * @return `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`.\n     *  unless throwing\n     */\n    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);\n}\n"},"contracts/interfaces/ERC777TokensRecipient.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title ERC777TokensRecipient\n * @dev Interface for contracts that will be called with the ERC777 token's `tokensReceived` method.\n * The contract receiving the tokens must implement this interface in order to receive the tokens.\n */\ninterface ERC777TokensRecipient {\n    /**\n     * @dev Called by the ERC777 token contract after a successful transfer or a minting operation.\n     * @param operator The address of the operator performing the transfer or minting operation.\n     * @param from The address of the sender.\n     * @param to The address of the recipient.\n     * @param amount The amount of tokens that were transferred or minted.\n     * @param data Additional data that was passed during the transfer or minting operation.\n     * @param operatorData Additional data that was passed by the operator during the transfer or minting operation.\n     */\n    function tokensReceived(\n        address operator,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata data,\n        bytes calldata operatorData\n    ) external;\n}\n"},"contracts/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\n     * See the corresponding EIP section\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"contracts/interfaces/ISignatureValidator.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\ncontract ISignatureValidatorConstants {\n    // bytes4(keccak256(\"isValidSignature(bytes,bytes)\")\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\n}\n\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\n    /**\n     * @notice Legacy EIP1271 method to validate a signature.\n     * @param _data Arbitrary length data signed on the behalf of address(this).\n     * @param _signature Signature byte array associated with _data.\n     *\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n     * MUST allow external calls\n     */\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\n}\n"},"contracts/interfaces/ViewStorageAccessible.sol":{"content":"pragma solidity >=0.5.0 <0.9.0;\n\n/// @title ViewStorageAccessible - Interface on top of StorageAccessible base class to allow simulations from view functions.\n/// @notice Adjusted version of https://github.com/gnosis/util-contracts/blob/3db1e531cb243a48ea91c60a800d537c1000612a/contracts/StorageAccessible.sol\ninterface ViewStorageAccessible {\n    /**\n     * @dev Same as `simulate` on StorageAccessible. Marked as view so that it can be called from external contracts\n     * that want to run simulations from within view functions. Will revert if the invoked simulation attempts to change state.\n     */\n    function simulate(address targetContract, bytes calldata calldataPayload) external view returns (bytes memory);\n}\n"},"contracts/libraries/CreateCall.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\n\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title Create Call - Allows to use the different create opcodes to deploy a contract.\n * @author Richard Meissner - @rmeissner\n * @notice This contract provides functions for deploying a new contract using the create and create2 opcodes.\n */\ncontract CreateCall {\n    /// @notice Emitted when a new contract is created\n    event ContractCreation(address indexed newContract);\n\n    /**\n     * @notice Deploys a new contract using the create2 opcode.\n     * @param value The value in wei to be sent with the contract creation.\n     * @param deploymentData The initialisation code of the contract to be created.\n     * @param salt The salt value to use for the contract creation.\n     * @return newContract The address of the newly created contract.\n     */\n    function performCreate2(uint256 value, bytes memory deploymentData, bytes32 salt) public returns (address newContract) {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            newContract := create2(value, add(0x20, deploymentData), mload(deploymentData), salt)\n        }\n        require(newContract != address(0), \"Could not deploy contract\");\n        emit ContractCreation(newContract);\n    }\n\n    /**\n     * @notice Deploys a new contract using the create opcode.\n     * @param value The value in wei to be sent with the contract creation.\n     * @param deploymentData The initialisation code of the contract to be created.\n     * @return newContract The address of the newly created contract.\n     */\n    function performCreate(uint256 value, bytes memory deploymentData) public returns (address newContract) {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            newContract := create(value, add(deploymentData, 0x20), mload(deploymentData))\n        }\n        require(newContract != address(0), \"Could not deploy contract\");\n        emit ContractCreation(newContract);\n    }\n}\n"},"contracts/libraries/MultiSend.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title Multi Send - Allows to batch multiple transactions into one.\n * @author Nick Dodson - <nick.dodson@consensys.net>\n * @author Gonçalo Sá - <goncalo.sa@consensys.net>\n * @author Stefan George - @Georgi87\n * @author Richard Meissner - @rmeissner\n */\ncontract MultiSend {\n    address private immutable multisendSingleton;\n\n    constructor() {\n        multisendSingleton = address(this);\n    }\n\n    /**\n     * @dev Sends multiple transactions and reverts all if one fails.\n     * @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\n     *                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),\n     *                     to as a address (=> 20 bytes),\n     *                     value as a uint256 (=> 32 bytes),\n     *                     data length as a uint256 (=> 32 bytes),\n     *                     data as bytes.\n     *                     see abi.encodePacked for more information on packed encoding\n     * @notice This method is payable as delegatecalls keep the msg.value from the previous call\n     *         If the calling method (e.g. execTransaction) received ETH this would revert otherwise\n     */\n    function multiSend(bytes memory transactions) public payable {\n        require(address(this) != multisendSingleton, \"MultiSend should only be called via delegatecall\");\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            let length := mload(transactions)\n            let i := 0x20\n            for {\n                // Pre block is not used in \"while mode\"\n            } lt(i, length) {\n                // Post block is not used in \"while mode\"\n            } {\n                // First byte of the data is the operation.\n                // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).\n                // This will also zero out unused data.\n                let operation := shr(0xf8, mload(add(transactions, i)))\n                // We offset the load address by 1 byte (operation byte)\n                // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.\n                let to := shr(0x60, mload(add(transactions, add(i, 0x01))))\n                // We offset the load address by 21 byte (operation byte + 20 address bytes)\n                let value := mload(add(transactions, add(i, 0x15)))\n                // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)\n                let dataLength := mload(add(transactions, add(i, 0x35)))\n                // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)\n                let data := add(transactions, add(i, 0x55))\n                let success := 0\n                switch operation\n                case 0 {\n                    success := call(gas(), to, value, data, dataLength, 0, 0)\n                }\n                case 1 {\n                    success := delegatecall(gas(), to, data, dataLength, 0, 0)\n                }\n                if eq(success, 0) {\n                    revert(0, 0)\n                }\n                // Next entry starts at 85 byte + data length\n                i := add(i, add(0x55, dataLength))\n            }\n        }\n    }\n}\n"},"contracts/libraries/MultiSendCallOnly.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls\n * @notice The guard logic is not required here as this contract doesn't support nested delegate calls\n * @author Stefan George - @Georgi87\n * @author Richard Meissner - @rmeissner\n */\ncontract MultiSendCallOnly {\n    /**\n     * @dev Sends multiple transactions and reverts all if one fails.\n     * @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\n     *                     operation has to be uint8(0) in this version (=> 1 byte),\n     *                     to as a address (=> 20 bytes),\n     *                     value as a uint256 (=> 32 bytes),\n     *                     data length as a uint256 (=> 32 bytes),\n     *                     data as bytes.\n     *                     see abi.encodePacked for more information on packed encoding\n     * @notice The code is for most part the same as the normal MultiSend (to keep compatibility),\n     *         but reverts if a transaction tries to use a delegatecall.\n     * @notice This method is payable as delegatecalls keep the msg.value from the previous call\n     *         If the calling method (e.g. execTransaction) received ETH this would revert otherwise\n     */\n    function multiSend(bytes memory transactions) public payable {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            let length := mload(transactions)\n            let i := 0x20\n            for {\n                // Pre block is not used in \"while mode\"\n            } lt(i, length) {\n                // Post block is not used in \"while mode\"\n            } {\n                // First byte of the data is the operation.\n                // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).\n                // This will also zero out unused data.\n                let operation := shr(0xf8, mload(add(transactions, i)))\n                // We offset the load address by 1 byte (operation byte)\n                // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.\n                let to := shr(0x60, mload(add(transactions, add(i, 0x01))))\n                // We offset the load address by 21 byte (operation byte + 20 address bytes)\n                let value := mload(add(transactions, add(i, 0x15)))\n                // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)\n                let dataLength := mload(add(transactions, add(i, 0x35)))\n                // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)\n                let data := add(transactions, add(i, 0x55))\n                let success := 0\n                switch operation\n                case 0 {\n                    success := call(gas(), to, value, data, dataLength, 0, 0)\n                }\n                // This version does not allow delegatecalls\n                case 1 {\n                    revert(0, 0)\n                }\n                if eq(success, 0) {\n                    revert(0, 0)\n                }\n                // Next entry starts at 85 byte + data length\n                i := add(i, add(0x55, dataLength))\n            }\n        }\n    }\n}\n"},"contracts/libraries/SafeMigration.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport {SafeStorage} from \"../libraries/SafeStorage.sol\";\n\ninterface ISafe {\n    function setFallbackHandler(address handler) external;\n}\n\n/**\n * @title Migration Contract for Safe Upgrade\n * @notice This is a generic contract that facilitates Safe and SafeL2 proxy contracts to migrate their singleton address.\n *         The supported target Safe version is immutable and set in the constructor during the deployment of the contract.\n *         This contract also supports migration with fallback handler update.\n * @author @safe-global/safe-protocol\n * @dev IMPORTANT: The library is intended to be used with the Safe standard proxy that stores the singleton address\n *      at the storage slot 0. Use at your own risk with custom proxy implementations. The contract will allow invocations\n *      to the migration functions only via delegatecall.\n */\ncontract SafeMigration is SafeStorage {\n    /**\n     * @notice Address of this contract\n     */\n    address public immutable MIGRATION_SINGLETON;\n    /**\n     * @notice Address of the Safe Singleton implementation\n     */\n    address public immutable SAFE_SINGLETON;\n    /**\n     * @notice Address of the Safe Singleton (L2) implementation\n     */\n    address public immutable SAFE_L2_SINGLETON;\n    /**\n     * @notice Address of the Fallback Handler\n     */\n    address public immutable SAFE_FALLBACK_HANDLER;\n\n    /**\n     * @notice Event indicating a change of a singleton address. Named master copy here for legacy reasons.\n     * @param singleton New master copy address\n     */\n    event ChangedMasterCopy(address singleton);\n\n    /**\n     * @notice Modifier to make a function callable via delegatecall only.\n     * If the function is called via a regular call, it will revert.\n     */\n    modifier onlyDelegateCall() {\n        require(address(this) != MIGRATION_SINGLETON, \"Migration should only be called via delegatecall\");\n        _;\n    }\n\n    /**\n     * @notice Constructor\n     * @param safeSingleton Address of the Safe Singleton implementation\n     * @param safeL2Singleton Address of the SafeL2 Singleton implementation\n     * @param fallbackHandler Address of the fallback handler implementation\n     */\n    constructor(address safeSingleton, address safeL2Singleton, address fallbackHandler) {\n        MIGRATION_SINGLETON = address(this);\n\n        require(hasCode(safeSingleton), \"Safe Singleton is not deployed\");\n        require(hasCode(safeL2Singleton), \"Safe Singleton (L2) is not deployed\");\n        require(hasCode(fallbackHandler), \"fallback handler is not deployed\");\n\n        SAFE_SINGLETON = safeSingleton;\n        SAFE_L2_SINGLETON = safeL2Singleton;\n        SAFE_FALLBACK_HANDLER = fallbackHandler;\n    }\n\n    /**\n     * @notice Migrate the Safe contract to a new Safe Singleton implementation.\n     */\n    function migrateSingleton() public onlyDelegateCall {\n        singleton = SAFE_SINGLETON;\n        emit ChangedMasterCopy(SAFE_SINGLETON);\n    }\n\n    /**\n     * @notice Migrate to Safe Singleton and set the fallback handler. This function is intended to be used when migrating\n     *         a Safe to a version which also requires updating fallback handler.\n     */\n    function migrateWithFallbackHandler() external onlyDelegateCall {\n        migrateSingleton();\n        ISafe(payable(address(this))).setFallbackHandler(SAFE_FALLBACK_HANDLER);\n    }\n\n    /**\n     * @notice Migrate the Safe contract to a new Safe Singleton (L2) implementation.\n     */\n    function migrateL2Singleton() public onlyDelegateCall {\n        singleton = SAFE_L2_SINGLETON;\n        emit ChangedMasterCopy(SAFE_L2_SINGLETON);\n    }\n\n    /**\n     * @notice Migrate to Safe Singleton (L2) and set the fallback handler. This function is intended to be used when migrating\n     *         a Safe to a version which also requires updating fallback handler.\n     */\n    function migrateL2WithFallbackHandler() external onlyDelegateCall {\n        migrateL2Singleton();\n        ISafe(payable(address(this))).setFallbackHandler(SAFE_FALLBACK_HANDLER);\n    }\n\n    /**\n     * @notice Checks whether an account has code.\n     * @param account The address of the account to be checked.\n     * @return A boolean value indicating whether the address has code (true) or not (false).\n     * @dev This function relies on the `extcodesize` assembly opcode to determine whether an address has code.\n     * It does not reliably determine whether or not an address is a smart contract or an EOA.\n     */\n    function hasCode(address account) internal view returns (bool) {\n        uint256 size;\n        /* solhint-disable no-inline-assembly */\n        /// @solidity memory-safe-assembly\n        assembly {\n            size := extcodesize(account)\n        }\n        /* solhint-enable no-inline-assembly */\n\n        return size > 0;\n    }\n}\n"},"contracts/libraries/SafeStorage.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\n * @dev Should be always the first base contract of a library that is used with a Safe.\n * @author Richard Meissner - @rmeissner\n */\ncontract SafeStorage {\n    // From /common/Singleton.sol\n    address internal singleton;\n    // From /common/ModuleManager.sol\n    mapping(address => address) internal modules;\n    // From /common/OwnerManager.sol\n    mapping(address => address) internal owners;\n    uint256 internal ownerCount;\n    uint256 internal threshold;\n\n    // From /Safe.sol\n    uint256 internal nonce;\n    bytes32 internal _deprecatedDomainSeparator;\n    mapping(bytes32 => uint256) internal signedMessages;\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\n}\n"},"contracts/libraries/SafeToL2Migration.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\n/* solhint-disable one-contract-per-file */\npragma solidity >=0.7.0 <0.9.0;\n\nimport {SafeStorage} from \"../libraries/SafeStorage.sol\";\nimport {Enum} from \"../common/Enum.sol\";\n\ninterface ISafe {\n    // solhint-disable-next-line\n    function VERSION() external view returns (string memory);\n\n    function setFallbackHandler(address handler) external;\n}\n\n/**\n * @title Migration Contract for updating a Safe from 1.1.1/1.3.0/1.4.1 versions to a L2 version. Useful when replaying a Safe from a non L2 network in a L2 network.\n * @notice This contract facilitates the migration of a Safe contract from version 1.1.1 to 1.3.0/1.4.1 L2, 1.3.0 to 1.3.0L2 or from 1.4.1 to 1.4.1L2\n *         Other versions are not supported\n * @dev IMPORTANT: The migration will only work with proxies that store the implementation address in the storage slot 0.\n */\ncontract SafeToL2Migration is SafeStorage {\n    // Address of this contract\n    address public immutable MIGRATION_SINGLETON;\n\n    /**\n     * @notice Constructor\n     * @dev Initializes the migrationSingleton with the contract's own address.\n     */\n    constructor() {\n        MIGRATION_SINGLETON = address(this);\n    }\n\n    /**\n     * @notice Event indicating a change of master copy address.\n     * @param singleton New master copy address\n     */\n    event ChangedMasterCopy(address singleton);\n\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\n\n    event SafeMultiSigTransaction(\n        address to,\n        uint256 value,\n        bytes data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address payable refundReceiver,\n        bytes signatures,\n        // We combine nonce, sender and threshold into one to avoid stack too deep\n        // Dev note: additionalInfo should not contain `bytes`, as this complicates decoding\n        bytes additionalInfo\n    );\n\n    /**\n     * @notice Modifier to make a function callable via delegatecall only.\n     * If the function is called via a regular call, it will revert.\n     */\n    modifier onlyDelegateCall() {\n        require(address(this) != MIGRATION_SINGLETON, \"Migration should only be called via delegatecall\");\n        _;\n    }\n\n    /**\n     * @notice Modifier to prevent using initialized Safes.\n     * If Safe has a nonce higher than 0, it will revert\n     */\n    modifier onlyNonceZero() {\n        // Nonce is increased before executing a tx, so first executed tx will have nonce=1\n        require(nonce == 1, \"Safe must have not executed any tx\");\n        _;\n    }\n\n    /**\n     * @dev Internal function with common migration steps, changes the singleton and emits SafeMultiSigTransaction event\n     */\n    function migrate(address l2Singleton, bytes memory functionData) private {\n        singleton = l2Singleton;\n\n        // Encode nonce, sender, threshold\n        bytes memory additionalInfo = abi.encode(0, msg.sender, threshold);\n\n        // Simulate a L2 transaction so Safe Tx Service indexer picks up the Safe\n        emit SafeMultiSigTransaction(\n            MIGRATION_SINGLETON,\n            0,\n            functionData,\n            Enum.Operation.DelegateCall,\n            0,\n            0,\n            0,\n            address(0),\n            payable(address(0)),\n            \"\", // We cannot detect signatures\n            additionalInfo\n        );\n        emit ChangedMasterCopy(l2Singleton);\n    }\n\n    /**\n     * @notice Migrate from Safe 1.3.0/1.4.1 Singleton (L1) to the same version provided L2 singleton\n     * Safe is required to have nonce 0 so backend can support it after the migration\n     * @dev This function should only be called via a delegatecall to perform the upgrade.\n     * Singletons versions will be compared, so it implies that contracts exist\n     */\n    function migrateToL2(address l2Singleton) external onlyDelegateCall onlyNonceZero {\n        address _singleton = singleton;\n        require(_singleton != l2Singleton, \"Safe is already using the singleton\");\n        bytes32 oldSingletonVersion = keccak256(abi.encodePacked(ISafe(_singleton).VERSION()));\n        bytes32 newSingletonVersion = keccak256(abi.encodePacked(ISafe(l2Singleton).VERSION()));\n\n        require(oldSingletonVersion == newSingletonVersion, \"L2 singleton must match current version singleton\");\n        // There's no way to make sure if address is a valid singleton, unless we configure the contract for every chain\n        require(\n            newSingletonVersion == keccak256(abi.encodePacked(\"1.3.0\")) || newSingletonVersion == keccak256(abi.encodePacked(\"1.4.1\")),\n            \"Provided singleton version is not supported\"\n        );\n\n        // 0xef2624ae - bytes4(keccak256(\"migrateToL2(address)\"))\n        bytes memory functionData = abi.encodeWithSelector(0xef2624ae, l2Singleton);\n        migrate(l2Singleton, functionData);\n    }\n\n    /**\n     * @notice Migrate from Safe 1.1.1 Singleton to 1.3.0 or 1.4.1 L2\n     * Safe is required to have nonce 0 so backend can support it after the migration\n     * @dev This function should only be called via a delegatecall to perform the upgrade.\n     * Singletons version will be checked, so it implies that contracts exist.\n     * A valid and compatible fallbackHandler needs to be provided, only existence will be checked.\n     */\n    function migrateFromV111(address l2Singleton, address fallbackHandler) external onlyDelegateCall onlyNonceZero {\n        require(isContract(fallbackHandler), \"fallbackHandler is not a contract\");\n\n        bytes32 oldSingletonVersion = keccak256(abi.encodePacked(ISafe(singleton).VERSION()));\n        require(oldSingletonVersion == keccak256(abi.encodePacked(\"1.1.1\")), \"Provided singleton version is not supported\");\n\n        bytes32 newSingletonVersion = keccak256(abi.encodePacked(ISafe(l2Singleton).VERSION()));\n        require(\n            newSingletonVersion == keccak256(abi.encodePacked(\"1.3.0\")) || newSingletonVersion == keccak256(abi.encodePacked(\"1.4.1\")),\n            \"Provided singleton version is not supported\"\n        );\n\n        ISafe safe = ISafe(address(this));\n        safe.setFallbackHandler(fallbackHandler);\n\n        // Safes < 1.3.0 did not emit SafeSetup, so Safe Tx Service backend needs the event to index the Safe\n        emit SafeSetup(MIGRATION_SINGLETON, getOwners(), threshold, address(0), fallbackHandler);\n\n        // 0xd9a20812 - bytes4(keccak256(\"migrateFromV111(address,address)\"))\n        bytes memory functionData = abi.encodeWithSelector(0xd9a20812, l2Singleton, fallbackHandler);\n        migrate(l2Singleton, functionData);\n    }\n\n    /**\n     * @notice Checks whether an Ethereum address corresponds to a contract or an externally owned account (EOA).\n     * @param account The Ethereum address to be checked.\n     * @return A boolean value indicating whether the address is associated with a contract (true) or an EOA (false).\n     * @dev This function relies on the `extcodesize` assembly opcode to determine whether an address is a contract.\n     * It may return incorrect results in some edge cases (see documentation for details).\n     * Developers should use caution when relying on the results of this function for critical decision-making.\n     */\n    function isContract(address account) internal view returns (bool) {\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            size := extcodesize(account)\n        }\n\n        // If the code size is greater than 0, it is a contract; otherwise, it is an EOA.\n        return size > 0;\n    }\n\n    /**\n     * @notice Returns a list of Safe owners.\n     * @dev This function is copied from `OwnerManager.sol` and takes advantage of the fact that\n     * migration happens with a `DELEGATECALL` in the context of the migrating account, which allows\n     * us to read the owners directly from storage and avoid the additional overhead of a `CALL`\n     * into the account implementation. Note that we can rely on the memory layout of the {owners}\n     * @return Array of Safe owners.\n     */\n    function getOwners() internal view returns (address[] memory) {\n        address[] memory array = new address[](ownerCount);\n        address sentinelOwners = address(0x1);\n        // populate return array\n        uint256 index = 0;\n        address currentOwner = owners[sentinelOwners];\n        while (currentOwner != sentinelOwners) {\n            array[index] = currentOwner;\n            currentOwner = owners[currentOwner];\n            index++;\n        }\n        return array;\n    }\n}\n"},"contracts/libraries/SafeToL2Setup.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport {SafeStorage} from \"../libraries/SafeStorage.sol\";\n\n/**\n * @title Safe to L2 Setup Contract\n * @dev This contract expects the singleton to be the {Safe} by default. Even if there are more\n * {SafeL2} proxies deployed, the average gas cost on L2s is significantly lower, making the\n * current design more economically efficient overall.\n * @notice This contract facilitates the deployment of a Safe to the same address on all networks by\n *         automatically changing the singleton to the L2 version when not on chain ID 1.\n */\ncontract SafeToL2Setup is SafeStorage {\n    /**\n     * @dev Address of the contract.\n     *      This is used to ensure that the contract is only ever `DELEGATECALL`-ed.\n     */\n    address private immutable SELF;\n\n    /**\n     * @notice Event indicating a change of master copy address.\n     * @param singleton New master copy address\n     */\n    event ChangedMasterCopy(address singleton);\n\n    /**\n     * @notice Initializes a new {SafeToL2Setup} instance.\n     */\n    constructor() {\n        SELF = address(this);\n    }\n\n    /**\n     * @notice Modifier ensure a function is only called via `DELEGATECALL`. Will revert otherwise.\n     */\n    modifier onlyDelegateCall() {\n        require(address(this) != SELF, \"SafeToL2Setup should only be called via delegatecall\");\n        _;\n    }\n\n    /**\n     * @notice Modifier to prevent using initialized Safes.\n     */\n    modifier onlyNonceZero() {\n        require(nonce == 0, \"Safe must have not executed any tx\");\n        _;\n    }\n\n    /**\n     * @notice Modifier to ensure that the specified account is a contract.\n     *\n     */\n    modifier onlyContract(address account) {\n        require(codeSize(account) != 0, \"Account doesn't contain code\");\n        _;\n    }\n\n    /**\n     * @notice Setup the Safe with the provided L2 singleton if needed.\n     * @dev This function checks that the chain ID is not 1, and if it isn't updates the singleton\n     *      to the provided L2 singleton.\n     */\n    function setupToL2(address l2Singleton) external onlyDelegateCall onlyNonceZero onlyContract(l2Singleton) {\n        if (chainId() != 1) {\n            singleton = l2Singleton;\n            emit ChangedMasterCopy(l2Singleton);\n        }\n    }\n\n    /**\n     * @notice Returns the current chain ID.\n     */\n    function chainId() private view returns (uint256 result) {\n        /* solhint-disable no-inline-assembly */\n        /// @solidity memory-safe-assembly\n        assembly {\n            result := chainid()\n        }\n        /* solhint-enable no-inline-assembly */\n    }\n\n    /**\n     * @notice Returns the code size of the specified account.\n     */\n    function codeSize(address account) internal view returns (uint256 result) {\n        /* solhint-disable no-inline-assembly */\n        /// @solidity memory-safe-assembly\n        assembly {\n            result := extcodesize(account)\n        }\n        /* solhint-enable no-inline-assembly */\n    }\n}\n"},"contracts/libraries/SignMessageLib.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"./SafeStorage.sol\";\nimport \"../Safe.sol\";\n\n/**\n * @title SignMessageLib - Allows to sign messages on-chain by writing the signed message hashes on-chain.\n * @author Richard Meissner - @rmeissner\n */\ncontract SignMessageLib is SafeStorage {\n    // keccak256(\"SafeMessage(bytes message)\");\n    bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;\n\n    event SignMsg(bytes32 indexed msgHash);\n\n    /**\n     * @notice Marks a message (`_data`) as signed.\n     * @dev Can be verified using EIP-1271 validation method by passing the pre-image of the message hash and empty bytes as the signature.\n     * @param _data Arbitrary length data that should be marked as signed on the behalf of address(this).\n     */\n    function signMessage(bytes calldata _data) external {\n        bytes32 msgHash = getMessageHash(_data);\n        signedMessages[msgHash] = 1;\n        emit SignMsg(msgHash);\n    }\n\n    /**\n     * @dev Returns hash of a message that can be signed by owners.\n     * @param message Message that should be hashed.\n     * @return Message hash.\n     */\n    function getMessageHash(bytes memory message) public view returns (bytes32) {\n        bytes32 safeMessageHash = keccak256(abi.encode(SAFE_MSG_TYPEHASH, keccak256(message)));\n        return keccak256(abi.encodePacked(bytes1(0x19), bytes1(0x01), Safe(payable(address(this))).domainSeparator(), safeMessageHash));\n    }\n}\n"},"contracts/proxies/IProxyCreationCallback.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\nimport \"./SafeProxy.sol\";\n\n/**\n * @title IProxyCreationCallback\n * @dev An interface for a contract that implements a callback function to be executed after the creation of a proxy instance.\n */\ninterface IProxyCreationCallback {\n    /**\n     * @dev Function to be called after the creation of a SafeProxy instance.\n     * @param proxy The newly created SafeProxy instance.\n     * @param _singleton The address of the singleton contract used to create the proxy.\n     * @param initializer The initializer function call data.\n     * @param saltNonce The nonce used to generate the salt for the proxy deployment.\n     */\n    function proxyCreated(SafeProxy proxy, address _singleton, bytes calldata initializer, uint256 saltNonce) external;\n}\n"},"contracts/proxies/SafeProxy.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @title IProxy - Helper interface to access the singleton address of the Proxy on-chain.\n * @author Richard Meissner - @rmeissner\n */\ninterface IProxy {\n    function masterCopy() external view returns (address);\n}\n\n/**\n * @title SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\n * @author Stefan George - <stefan@gnosis.io>\n * @author Richard Meissner - <richard@gnosis.io>\n */\ncontract SafeProxy {\n    // Singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.\n    // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`\n    address internal singleton;\n\n    /**\n     * @notice Constructor function sets address of singleton contract.\n     * @param _singleton Singleton address.\n     */\n    constructor(address _singleton) {\n        require(_singleton != address(0), \"Invalid singleton address provided\");\n        singleton = _singleton;\n    }\n\n    /// @dev Fallback function forwards all transactions and returns all received return data.\n    fallback() external payable {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            let _singleton := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\n            // 0xa619486e == keccak(\"masterCopy()\"). The value is right padded to 32-bytes with 0s\n            if eq(calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000) {\n                mstore(0, _singleton)\n                return(0, 0x20)\n            }\n            calldatacopy(0, 0, calldatasize())\n            let success := delegatecall(gas(), _singleton, 0, calldatasize(), 0, 0)\n            returndatacopy(0, 0, returndatasize())\n            if eq(success, 0) {\n                revert(0, returndatasize())\n            }\n            return(0, returndatasize())\n        }\n    }\n}\n"},"contracts/proxies/SafeProxyFactory.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"./SafeProxy.sol\";\nimport \"./IProxyCreationCallback.sol\";\n\n/**\n * @title Proxy Factory - Allows to create a new proxy contract and execute a message call to the new proxy within one transaction.\n * @author Stefan George - @Georgi87\n */\ncontract SafeProxyFactory {\n    event ProxyCreation(SafeProxy indexed proxy, address singleton);\n\n    /// @dev Allows to retrieve the creation code used for the Proxy deployment. With this it is easily possible to calculate predicted address.\n    function proxyCreationCode() public pure returns (bytes memory) {\n        return type(SafeProxy).creationCode;\n    }\n\n    /**\n     * @notice Internal method to create a new proxy contract using CREATE2. Optionally executes an initializer call to a new proxy.\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n     * @param initializer (Optional) Payload for a message call to be sent to a new proxy contract.\n     * @param salt Create2 salt to use for calculating the address of the new proxy contract.\n     * @return proxy Address of the new proxy contract.\n     */\n    function deployProxy(address _singleton, bytes memory initializer, bytes32 salt) internal returns (SafeProxy proxy) {\n        require(isContract(_singleton), \"Singleton contract not deployed\");\n\n        bytes memory deploymentData = abi.encodePacked(type(SafeProxy).creationCode, uint256(uint160(_singleton)));\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            proxy := create2(0x0, add(0x20, deploymentData), mload(deploymentData), salt)\n        }\n        require(address(proxy) != address(0), \"Create2 call failed\");\n\n        if (initializer.length > 0) {\n            // solhint-disable-next-line no-inline-assembly\n            assembly {\n                if eq(call(gas(), proxy, 0, add(initializer, 0x20), mload(initializer), 0, 0), 0) {\n                    revert(0, 0)\n                }\n            }\n        }\n    }\n\n    /**\n     * @notice Deploys a new proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n     * @param initializer Payload for a message call to be sent to a new proxy contract.\n     * @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\n     */\n    function createProxyWithNonce(address _singleton, bytes memory initializer, uint256 saltNonce) public returns (SafeProxy proxy) {\n        // If the initializer changes the proxy address should change too. Hashing the initializer data is cheaper than just concatinating it\n        bytes32 salt = keccak256(abi.encodePacked(keccak256(initializer), saltNonce));\n        proxy = deployProxy(_singleton, initializer, salt);\n        emit ProxyCreation(proxy, _singleton);\n    }\n\n    /**\n     * @notice Deploys a new chain-specific proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\n     * @dev Allows to create a new proxy contract that should exist only on 1 network (e.g. specific governance or admin accounts)\n     *      by including the chain id in the create2 salt. Such proxies cannot be created on other networks by replaying the transaction.\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n     * @param initializer Payload for a message call to be sent to a new proxy contract.\n     * @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\n     */\n    function createChainSpecificProxyWithNonce(\n        address _singleton,\n        bytes memory initializer,\n        uint256 saltNonce\n    ) public returns (SafeProxy proxy) {\n        // If the initializer changes the proxy address should change too. Hashing the initializer data is cheaper than just concatinating it\n        bytes32 salt = keccak256(abi.encodePacked(keccak256(initializer), saltNonce, getChainId()));\n        proxy = deployProxy(_singleton, initializer, salt);\n        emit ProxyCreation(proxy, _singleton);\n    }\n\n    /**\n     * @notice Deploy a new proxy with `_singleton` singleton and `saltNonce` salt.\n     *         Optionally executes an initializer call to a new proxy and calls a specified callback address `callback`.\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n     * @param initializer Payload for a message call to be sent to a new proxy contract.\n     * @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\n     * @param callback Callback that will be invoked after the new proxy contract has been successfully deployed and initialized.\n     */\n    function createProxyWithCallback(\n        address _singleton,\n        bytes memory initializer,\n        uint256 saltNonce,\n        IProxyCreationCallback callback\n    ) public returns (SafeProxy proxy) {\n        uint256 saltNonceWithCallback = uint256(keccak256(abi.encodePacked(saltNonce, callback)));\n        proxy = createProxyWithNonce(_singleton, initializer, saltNonceWithCallback);\n        if (address(callback) != address(0)) callback.proxyCreated(proxy, _singleton, initializer, saltNonce);\n    }\n\n    /**\n     * @notice Returns true if `account` is a contract.\n     * @dev This function will return false if invoked during the constructor of a contract,\n     *      as the code is not actually created until after the constructor finishes.\n     * @param account The address being queried\n     * @return True if `account` is a contract\n     */\n    function isContract(address account) internal view returns (bool) {\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            size := extcodesize(account)\n        }\n        return size > 0;\n    }\n\n    /**\n     * @notice Returns the ID of the chain the contract is currently deployed on.\n     * @return The ID of the current chain as a uint256.\n     */\n    function getChainId() public view returns (uint256) {\n        uint256 id;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            id := chainid()\n        }\n        return id;\n    }\n}\n"},"contracts/Safe.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"./base/ModuleManager.sol\";\nimport \"./base/OwnerManager.sol\";\nimport \"./base/FallbackManager.sol\";\nimport \"./base/GuardManager.sol\";\nimport \"./common/NativeCurrencyPaymentFallback.sol\";\nimport \"./common/Singleton.sol\";\nimport \"./common/SignatureDecoder.sol\";\nimport \"./common/SecuredTokenTransfer.sol\";\nimport \"./common/StorageAccessible.sol\";\nimport \"./interfaces/ISignatureValidator.sol\";\nimport \"./external/SafeMath.sol\";\n\n/**\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\n * @dev Most important concepts:\n *      - Threshold: Number of required confirmations for a Safe transaction.\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\n *        approve transactions. Managed in `OwnerManager`.\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\n *      For the events-based implementation see `SafeL2.sol`.\n * @author Stefan George - @Georgi87\n * @author Richard Meissner - @rmeissner\n */\ncontract Safe is\n    Singleton,\n    NativeCurrencyPaymentFallback,\n    ModuleManager,\n    OwnerManager,\n    SignatureDecoder,\n    SecuredTokenTransfer,\n    ISignatureValidatorConstants,\n    FallbackManager,\n    StorageAccessible,\n    GuardManager\n{\n    using SafeMath for uint256;\n\n    string public constant VERSION = \"1.4.1\";\n\n    // keccak256(\n    //     \"EIP712Domain(uint256 chainId,address verifyingContract)\"\n    // );\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\n\n    // keccak256(\n    //     \"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\"\n    // );\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\n\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\n    event SignMsg(bytes32 indexed msgHash);\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\n\n    uint256 public nonce;\n    bytes32 private _deprecatedDomainSeparator;\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\n    mapping(bytes32 => uint256) public signedMessages;\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\n\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\n    constructor() {\n        /**\n         * By setting the threshold it is not possible to call setup anymore,\n         * so we create a Safe with 0 owners and threshold 1.\n         * This is an unusable Safe, perfect for the singleton\n         */\n        threshold = 1;\n    }\n\n    /**\n     * @notice Sets an initial storage of the Safe contract.\n     * @dev This method can only be called once.\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\n     * @param _owners List of Safe owners.\n     * @param _threshold Number of required confirmations for a Safe transaction.\n     * @param to Contract address for optional delegate call.\n     * @param data Data payload for optional delegate call.\n     * @param fallbackHandler Handler for fallback calls to this contract\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\n     * @param payment Value that should be paid\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\n     */\n    function setup(\n        address[] calldata _owners,\n        uint256 _threshold,\n        address to,\n        bytes calldata data,\n        address fallbackHandler,\n        address paymentToken,\n        uint256 payment,\n        address payable paymentReceiver\n    ) external {\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\n        setupOwners(_owners, _threshold);\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\n        setupModules(to, data);\n\n        if (payment > 0) {\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\n        }\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\n    }\n\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\n     * @dev The fees are always transferred, even if the user transaction fails.\n     *      This method doesn't perform any sanity check of the transaction, such as:\n     *      - if the contract at `to` address has code or not\n     *      - if the `gasToken` is a contract or not\n     *      It is the responsibility of the caller to perform such checks.\n     * @param to Destination address of Safe transaction.\n     * @param value Ether value of Safe transaction.\n     * @param data Data payload of Safe transaction.\n     * @param operation Operation type of Safe transaction.\n     * @param safeTxGas Gas that should be used for the Safe transaction.\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\n     * @param gasPrice Gas price that should be used for the payment calculation.\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n     * @param signatures Signature data that should be verified.\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\n     * @return success Boolean indicating transaction's success.\n     */\n    function execTransaction(\n        address to,\n        uint256 value,\n        bytes calldata data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address payable refundReceiver,\n        bytes memory signatures\n    ) public payable virtual returns (bool success) {\n        bytes32 txHash;\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\n        {\n            bytes memory txHashData = encodeTransactionData(\n                // Transaction info\n                to,\n                value,\n                data,\n                operation,\n                safeTxGas,\n                // Payment info\n                baseGas,\n                gasPrice,\n                gasToken,\n                refundReceiver,\n                // Signature info\n                nonce\n            );\n            // Increase nonce and execute transaction.\n            nonce++;\n            txHash = keccak256(txHashData);\n            checkSignatures(txHash, txHashData, signatures);\n        }\n        address guard = getGuard();\n        {\n            if (guard != address(0)) {\n                Guard(guard).checkTransaction(\n                    // Transaction info\n                    to,\n                    value,\n                    data,\n                    operation,\n                    safeTxGas,\n                    // Payment info\n                    baseGas,\n                    gasPrice,\n                    gasToken,\n                    refundReceiver,\n                    // Signature info\n                    signatures,\n                    msg.sender\n                );\n            }\n        }\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \"GS010\");\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\n        {\n            uint256 gasUsed = gasleft();\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\n            gasUsed = gasUsed.sub(gasleft());\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\n            require(success || safeTxGas != 0 || gasPrice != 0, \"GS013\");\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\n            uint256 payment = 0;\n            if (gasPrice > 0) {\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\n            }\n            if (success) emit ExecutionSuccess(txHash, payment);\n            else emit ExecutionFailure(txHash, payment);\n        }\n        {\n            if (guard != address(0)) {\n                Guard(guard).checkAfterExecution(txHash, success);\n            }\n        }\n    }\n\n    /**\n     * @notice Handles the payment for a Safe transaction.\n     * @param gasUsed Gas used by the Safe transaction.\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\n     * @param gasPrice Gas price that should be used for the payment calculation.\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\n     * @return payment The amount of payment made in the specified token.\n     */\n    function handlePayment(\n        uint256 gasUsed,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address payable refundReceiver\n    ) private returns (uint256 payment) {\n        // solhint-disable-next-line avoid-tx-origin\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\n        if (gasToken == address(0)) {\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\n            require(receiver.send(payment), \"GS011\");\n        } else {\n            payment = gasUsed.add(baseGas).mul(gasPrice);\n            require(transferToken(gasToken, receiver, payment), \"GS012\");\n        }\n    }\n\n    /**\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\n     * @param data That should be signed (this is passed to an external validator contract)\n     * @param signatures Signature data that should be verified.\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\n     */\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\n        // Load threshold to avoid multiple storage loads\n        uint256 _threshold = threshold;\n        // Check that a threshold is set\n        require(_threshold > 0, \"GS001\");\n        checkNSignatures(dataHash, data, signatures, _threshold);\n    }\n\n    /**\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\n     * @param data That should be signed (this is passed to an external validator contract)\n     * @param signatures Signature data that should be verified.\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\n     * @param requiredSignatures Amount of required valid signatures.\n     */\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\n        // Check that the provided signature data is not too short\n        require(signatures.length >= requiredSignatures.mul(65), \"GS020\");\n        // There cannot be an owner with address 0.\n        address lastOwner = address(0);\n        address currentOwner;\n        uint8 v;\n        bytes32 r;\n        bytes32 s;\n        uint256 i;\n        for (i = 0; i < requiredSignatures; i++) {\n            (v, r, s) = signatureSplit(signatures, i);\n            if (v == 0) {\n                require(keccak256(data) == dataHash, \"GS027\");\n                // If v is 0 then it is a contract signature\n                // When handling contract signatures the address of the contract is encoded into r\n                currentOwner = address(uint160(uint256(r)));\n\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\n                // Here we only check that the pointer is not pointing inside the part that is being processed\n                require(uint256(s) >= requiredSignatures.mul(65), \"GS021\");\n\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\n                require(uint256(s).add(32) <= signatures.length, \"GS022\");\n\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\n                uint256 contractSignatureLen;\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\n                }\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \"GS023\");\n\n                // Check signature\n                bytes memory contractSignature;\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\n                    contractSignature := add(add(signatures, s), 0x20)\n                }\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \"GS024\");\n            } else if (v == 1) {\n                // If v is 1 then it is an approved hash\n                // When handling approved hashes the address of the approver is encoded into r\n                currentOwner = address(uint160(uint256(r)));\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \"GS025\");\n            } else if (v > 30) {\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", dataHash)), v - 4, r, s);\n            } else {\n                // Default is the ecrecover flow with the provided data hash\n                // Use ecrecover with the messageHash for EOA signatures\n                currentOwner = ecrecover(dataHash, v, r, s);\n            }\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \"GS026\");\n            lastOwner = currentOwner;\n        }\n    }\n\n    /**\n     * @notice Marks hash `hashToApprove` as approved.\n     * @dev This can be used with a pre-approved hash transaction signature.\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\n     */\n    function approveHash(bytes32 hashToApprove) external {\n        require(owners[msg.sender] != address(0), \"GS030\");\n        approvedHashes[msg.sender][hashToApprove] = 1;\n        emit ApproveHash(hashToApprove, msg.sender);\n    }\n\n    /**\n     * @notice Returns the ID of the chain the contract is currently deployed on.\n     * @return The ID of the current chain as a uint256.\n     */\n    function getChainId() public view returns (uint256) {\n        uint256 id;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            id := chainid()\n        }\n        return id;\n    }\n\n    /**\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\n     * @return bytes32 The domain separator hash.\n     */\n    function domainSeparator() public view returns (bytes32) {\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\n    }\n\n    /**\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\n     * @param to Destination address.\n     * @param value Ether value.\n     * @param data Data payload.\n     * @param operation Operation type.\n     * @param safeTxGas Gas that should be used for the safe transaction.\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\n     * @param gasPrice Maximum gas price that should be used for this transaction.\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n     * @param _nonce Transaction nonce.\n     * @return Transaction hash bytes.\n     */\n    function encodeTransactionData(\n        address to,\n        uint256 value,\n        bytes calldata data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address refundReceiver,\n        uint256 _nonce\n    ) public view returns (bytes memory) {\n        bytes32 safeTxHash = keccak256(\n            abi.encode(\n                SAFE_TX_TYPEHASH,\n                to,\n                value,\n                keccak256(data),\n                operation,\n                safeTxGas,\n                baseGas,\n                gasPrice,\n                gasToken,\n                refundReceiver,\n                _nonce\n            )\n        );\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\n    }\n\n    /**\n     * @notice Returns transaction hash to be signed by owners.\n     * @param to Destination address.\n     * @param value Ether value.\n     * @param data Data payload.\n     * @param operation Operation type.\n     * @param safeTxGas Fas that should be used for the safe transaction.\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\n     * @param gasPrice Maximum gas price that should be used for this transaction.\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n     * @param _nonce Transaction nonce.\n     * @return Transaction hash.\n     */\n    function getTransactionHash(\n        address to,\n        uint256 value,\n        bytes calldata data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address refundReceiver,\n        uint256 _nonce\n    ) public view returns (bytes32) {\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\n    }\n}\n"},"contracts/SafeL2.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"./Safe.sol\";\n\n/**\n * @title SafeL2 - An implementation of the Safe contract that emits additional events on transaction executions.\n * @notice For a more complete description of the Safe contract, please refer to the main Safe contract `Safe.sol`.\n * @author Stefan George - @Georgi87\n * @author Richard Meissner - @rmeissner\n */\ncontract SafeL2 is Safe {\n    event SafeMultiSigTransaction(\n        address to,\n        uint256 value,\n        bytes data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address payable refundReceiver,\n        bytes signatures,\n        // We combine nonce, sender and threshold into one to avoid stack too deep\n        // Dev note: additionalInfo should not contain `bytes`, as this complicates decoding\n        bytes additionalInfo\n    );\n\n    event SafeModuleTransaction(address module, address to, uint256 value, bytes data, Enum.Operation operation);\n\n    // @inheritdoc Safe\n    function execTransaction(\n        address to,\n        uint256 value,\n        bytes calldata data,\n        Enum.Operation operation,\n        uint256 safeTxGas,\n        uint256 baseGas,\n        uint256 gasPrice,\n        address gasToken,\n        address payable refundReceiver,\n        bytes memory signatures\n    ) public payable override returns (bool) {\n        bytes memory additionalInfo;\n        {\n            additionalInfo = abi.encode(nonce, msg.sender, threshold);\n        }\n        emit SafeMultiSigTransaction(\n            to,\n            value,\n            data,\n            operation,\n            safeTxGas,\n            baseGas,\n            gasPrice,\n            gasToken,\n            refundReceiver,\n            signatures,\n            additionalInfo\n        );\n        return super.execTransaction(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures);\n    }\n\n    // @inheritdoc Safe\n    function execTransactionFromModule(\n        address to,\n        uint256 value,\n        bytes memory data,\n        Enum.Operation operation\n    ) public override returns (bool success) {\n        emit SafeModuleTransaction(msg.sender, to, value, data, operation);\n        success = super.execTransactionFromModule(to, value, data, operation);\n    }\n}\n"},"contracts/test/4337/Test4337ModuleAndHandler.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\npragma abicoder v2;\n\nimport \"../../libraries/SafeStorage.sol\";\n\nstruct UserOperation {\n    address sender;\n    uint256 nonce;\n    bytes initCode;\n    bytes callData;\n    uint256 callGasLimit;\n    uint256 verificationGasLimit;\n    uint256 preVerificationGas;\n    uint256 maxFeePerGas;\n    uint256 maxPriorityFeePerGas;\n    bytes paymasterAndData;\n    bytes signature;\n}\n\ninterface ISafe {\n    function execTransactionFromModule(address to, uint256 value, bytes memory data, uint8 operation) external returns (bool success);\n}\n\n/// @dev A Dummy 4337 Module/Handler for testing purposes\n///      ⚠️ ⚠️ ⚠️ DO NOT USE IN PRODUCTION ⚠️ ⚠️ ⚠️\n///      The module does not perform ANY validation, it just executes validateUserOp and execTransaction\n///      to perform the opcode level compliance by the bundler.\ncontract Test4337ModuleAndHandler is SafeStorage {\n    address public immutable myAddress;\n    address public immutable entryPoint;\n\n    address internal constant SENTINEL_MODULES = address(0x1);\n\n    constructor(address entryPointAddress) {\n        entryPoint = entryPointAddress;\n        myAddress = address(this);\n    }\n\n    function validateUserOp(UserOperation calldata userOp, bytes32, uint256 missingAccountFunds) external returns (uint256 validationData) {\n        address payable safeAddress = payable(userOp.sender);\n        ISafe senderSafe = ISafe(safeAddress);\n\n        if (missingAccountFunds != 0) {\n            senderSafe.execTransactionFromModule(entryPoint, missingAccountFunds, \"\", 0);\n        }\n\n        return 0;\n    }\n\n    function execTransaction(address to, uint256 value, bytes calldata data) external payable {\n        address payable safeAddress = payable(msg.sender);\n        ISafe safe = ISafe(safeAddress);\n        require(safe.execTransactionFromModule(to, value, data, 0), \"tx failed\");\n    }\n\n    function enableMyself() public {\n        require(myAddress != address(this), \"You need to DELEGATECALL, sir\");\n\n        // Module cannot be added twice.\n        require(modules[myAddress] == address(0), \"GS102\");\n        modules[myAddress] = modules[SENTINEL_MODULES];\n        modules[SENTINEL_MODULES] = myAddress;\n    }\n}\n"},"contracts/test/ERC1155Token.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../interfaces/ERC1155TokenReceiver.sol\";\nimport \"../external/SafeMath.sol\";\n\n/**\n * @title ERC1155Token - A test ERC1155 token contract\n */\ncontract ERC1155Token {\n    using SafeMath for uint256;\n\n    // Mapping from token ID to owner balances\n    mapping(uint256 => mapping(address => uint256)) private _balances;\n\n    // Mapping from owner to operator approvals\n    mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n    /**\n     * @dev Get the specified address' balance for token with specified ID.\n     * @param owner The address of the token holder\n     * @param id ID of the token\n     * @return The owner's balance of the token type requested\n     */\n    function balanceOf(address owner, uint256 id) public view returns (uint256) {\n        require(owner != address(0), \"ERC1155: balance query for the zero address\");\n        return _balances[id][owner];\n    }\n\n    /**\n     * @notice Transfers `value` amount of an `id` from the `from` address to the `to` address specified.\n     *         Caller must be approved to manage the tokens being transferred out of the `from` account.\n     *         If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\n     * @param from Source address\n     * @param to Target address\n     * @param id ID of the token type\n     * @param value Transfer amount\n     * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n     */\n    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external {\n        require(to != address(0), \"ERC1155: target address must be non-zero\");\n        require(\n            from == msg.sender || _operatorApprovals[from][msg.sender] == true,\n            \"ERC1155: need operator approval for 3rd party transfers.\"\n        );\n\n        _balances[id][from] = _balances[id][from] - value;\n        _balances[id][to] = value + _balances[id][to];\n\n        _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, value, data);\n    }\n\n    /**\n     * @dev Test function to mint an amount of a token with the given ID\n     * @param to The address that will own the minted token\n     * @param id ID of the token to be minted\n     * @param value Amount of the token to be minted\n     * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n     */\n    function mint(address to, uint256 id, uint256 value, bytes calldata data) external {\n        require(to != address(0), \"ERC1155: mint to the zero address\");\n\n        _balances[id][to] = value + _balances[id][to];\n\n        _doSafeTransferAcceptanceCheck(msg.sender, address(0), to, id, value, data);\n    }\n\n    /**\n     * @notice Returns true if `account` is a contract.\n     * @dev This function will return false if invoked during the constructor of a contract,\n     *      as the code is not actually created until after the constructor finishes.\n     * @param account The address being queried\n     * @return True if `account` is a contract\n     */\n    function isContract(address account) internal view returns (bool) {\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            size := extcodesize(account)\n        }\n        return size > 0;\n    }\n\n    /**\n     * @dev Internal function to invoke `onERC1155Received` on a target address\n     * The call is not executed if the target address is not a contract\n     * @param operator  The address which initiated the transfer (i.e. msg.sender)\n     * @param from      The address which previously owned the token\n     * @param to        The address which will now own the token\n     * @param id        The id of the token being transferred\n     * @param value     The amount of tokens being transferred\n     * @param data      Additional data with no specified format\n     */\n    function _doSafeTransferAcceptanceCheck(\n        address operator,\n        address from,\n        address to,\n        uint256 id,\n        uint256 value,\n        bytes memory data\n    ) internal {\n        if (isContract(to)) {\n            require(\n                ERC1155TokenReceiver(to).onERC1155Received(operator, from, id, value, data) ==\n                    ERC1155TokenReceiver(to).onERC1155Received.selector,\n                \"ERC1155: got unknown value from onERC1155Received\"\n            );\n        }\n    }\n}\n"},"contracts/test/ERC20Token.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\n/**\n * @title ERC20Token\n * @dev This contract is an ERC20 token contract that extends the OpenZeppelin ERC20 contract.\n */\ncontract ERC20Token is ERC20 {\n    /**\n     * @dev Constructor that sets the name and symbol of the token and mints an initial supply to the contract deployer.\n     */\n    constructor() public ERC20(\"TestToken\", \"TT\") {\n        _mint(msg.sender, 1000000000000000);\n    }\n}\n"},"contracts/test/Imports.sol":{"content":"pragma solidity >=0.7.0 <0.9.0;\n\n// solhint-disable-next-line no-unused-import\nimport {UpgradeableProxy} from \"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\";\n"},"contracts/test/TestHandler.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport \"../handler/HandlerContext.sol\";\n\n/**\n * @title TestHandler - A test FallbackHandler contract\n */\ncontract TestHandler is HandlerContext {\n    /**\n     * @notice Returns the sender and manager address provided by the HandlerContext\n     * @return sender The sender address\n     * @return manager The manager address\n     */\n    function dudududu() external view returns (address sender, address manager) {\n        return (_msgSender(), _manager());\n    }\n}\n"}},"settings":{"optimizer":{"enabled":false,"runs":200},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","errorCode":"1878","formattedMessage":"contracts/interfaces/ViewStorageAccessible.sol: Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/interfaces/ViewStorageAccessible.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"1878","formattedMessage":"contracts/test/Imports.sol: Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/test/Imports.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"2462","formattedMessage":"@openzeppelin/contracts/proxy/UpgradeableProxy.sol:24:5: Warning: Visibility for constructor is ignored. If you want the contract to be non-deployable, making it \"abstract\" is sufficient.\n    constructor(address _logic, bytes memory _data) public payable {\n    ^ (Relevant source part starts here and spans across multiple lines).\n","message":"Visibility for constructor is ignored. If you want the contract to be non-deployable, making it \"abstract\" is sufficient.","severity":"warning","sourceLocation":{"end":1328,"file":"@openzeppelin/contracts/proxy/UpgradeableProxy.sol","start":1019},"type":"Warning"},{"component":"general","errorCode":"2462","formattedMessage":"@openzeppelin/contracts/token/ERC20/ERC20.sol:55:5: Warning: Visibility for constructor is ignored. If you want the contract to be non-deployable, making it \"abstract\" is sufficient.\n    constructor (string memory name_, string memory symbol_) public {\n    ^ (Relevant source part starts here and spans across multiple lines).\n","message":"Visibility for constructor is ignored. If you want the contract to be non-deployable, making it \"abstract\" is sufficient.","severity":"warning","sourceLocation":{"end":2103,"file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","start":1958},"type":"Warning"},{"component":"general","errorCode":"2462","formattedMessage":"contracts/test/ERC20Token.sol:14:5: Warning: Visibility for constructor is ignored. If you want the contract to be non-deployable, making it \"abstract\" is sufficient.\n    constructor() public ERC20(\"TestToken\", \"TT\") {\n    ^ (Relevant source part starts here and spans across multiple lines).\n","message":"Visibility for constructor is ignored. If you want the contract to be non-deployable, making it \"abstract\" is sufficient.","severity":"warning","sourceLocation":{"end":526,"file":"contracts/test/ERC20Token.sol","start":428},"type":"Warning"},{"component":"general","errorCode":"2018","formattedMessage":"contracts/Safe.sol:352:5: Warning: Function state mutability can be restricted to pure\n    function getChainId() public view returns (uint256) {\n    ^ (Relevant source part starts here and spans across multiple lines).\n","message":"Function state mutability can be restricted to pure","severity":"warning","sourceLocation":{"end":18733,"file":"contracts/Safe.sol","start":18522},"type":"Warning"},{"component":"general","errorCode":"2018","formattedMessage":"contracts/libraries/SafeToL2Setup.sol:74:5: Warning: Function state mutability can be restricted to pure\n    function chainId() private view returns (uint256 result) {\n    ^ (Relevant source part starts here and spans across multiple lines).\n","message":"Function state mutability can be restricted to pure","severity":"warning","sourceLocation":{"end":2633,"file":"contracts/libraries/SafeToL2Setup.sol","start":2368},"type":"Warning"},{"component":"general","errorCode":"2018","formattedMessage":"contracts/proxies/SafeProxyFactory.sol:117:5: Warning: Function state mutability can be restricted to pure\n    function getChainId() public view returns (uint256) {\n    ^ (Relevant source part starts here and spans across multiple lines).\n","message":"Function state mutability can be restricted to pure","severity":"warning","sourceLocation":{"end":6411,"file":"contracts/proxies/SafeProxyFactory.sol","start":6200},"type":"Warning"}],"sources":{"@openzeppelin/contracts/math/SafeMath.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/math/SafeMath.sol","exportedSymbols":{"SafeMath":[354]},"id":355,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"66:563:0","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":354,"linearizedBaseContracts":[354],"name":"SafeMath","nodeType":"ContractDefinition","nodes":[{"body":{"id":32,"nodeType":"Block","src":"865:98:0","statements":[{"assignments":[15],"declarations":[{"constant":false,"id":15,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":32,"src":"875:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14,"name":"uint256","nodeType":"ElementaryTypeName","src":"875:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"887:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7,"src":"891:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"887:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"875:17:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15,"src":"906:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"910:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"906:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27,"nodeType":"IfStatement","src":"902:28:0","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":23,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"921:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":24,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"928:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":25,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"920:10:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":13,"id":26,"nodeType":"Return","src":"913:17:0"}},{"expression":{"components":[{"hexValue":"74727565","id":28,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"948:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":29,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15,"src":"954:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"947:9:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":13,"id":31,"nodeType":"Return","src":"940:16:0"}]},"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"653:131:0","text":" @dev Returns the addition of two unsigned integers, with an overflow flag.\n _Available since v3.4._"},"id":33,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nodeType":"FunctionDefinition","parameters":{"id":8,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":33,"src":"805:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4,"name":"uint256","nodeType":"ElementaryTypeName","src":"805:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":33,"src":"816:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6,"name":"uint256","nodeType":"ElementaryTypeName","src":"816:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"804:22:0"},"returnParameters":{"id":13,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":33,"src":"850:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9,"name":"bool","nodeType":"ElementaryTypeName","src":"850:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":33,"src":"856:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11,"name":"uint256","nodeType":"ElementaryTypeName","src":"856:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"849:15:0"},"scope":354,"src":"789:174:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":59,"nodeType":"Block","src":"1185:75:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1199:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":46,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36,"src":"1203:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1199:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":52,"nodeType":"IfStatement","src":"1195:28:0","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":48,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1214:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":49,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1221:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":50,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1213:10:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":44,"id":51,"nodeType":"Return","src":"1206:17:0"}},{"expression":{"components":[{"hexValue":"74727565","id":53,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1241:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36,"src":"1247:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1251:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1247:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":57,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1240:13:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":44,"id":58,"nodeType":"Return","src":"1233:20:0"}]},"documentation":{"id":34,"nodeType":"StructuredDocumentation","src":"969:135:0","text":" @dev Returns the substraction of two unsigned integers, with an overflow flag.\n _Available since v3.4._"},"id":60,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nodeType":"FunctionDefinition","parameters":{"id":39,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":60,"src":"1125:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35,"name":"uint256","nodeType":"ElementaryTypeName","src":"1125:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":60,"src":"1136:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37,"name":"uint256","nodeType":"ElementaryTypeName","src":"1136:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1124:22:0"},"returnParameters":{"id":44,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":60,"src":"1170:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40,"name":"bool","nodeType":"ElementaryTypeName","src":"1170:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":43,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":60,"src":"1176:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42,"name":"uint256","nodeType":"ElementaryTypeName","src":"1176:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1169:15:0"},"scope":354,"src":"1109:151:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":100,"nodeType":"Block","src":"1484:359:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":72,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63,"src":"1716:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":73,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1721:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1716:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79,"nodeType":"IfStatement","src":"1712:28:0","trueBody":{"expression":{"components":[{"hexValue":"74727565","id":75,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1732:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":76,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1738:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":77,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1731:9:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":71,"id":78,"nodeType":"Return","src":"1724:16:0"}},{"assignments":[81],"declarations":[{"constant":false,"id":81,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":100,"src":"1750:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":80,"name":"uint256","nodeType":"ElementaryTypeName","src":"1750:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":85,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":84,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":82,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63,"src":"1762:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":83,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65,"src":"1766:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1762:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1750:17:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":88,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81,"src":"1781:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":87,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63,"src":"1785:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1781:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":89,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65,"src":"1790:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1781:10:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":95,"nodeType":"IfStatement","src":"1777:33:0","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":91,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1801:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":92,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1808:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":93,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1800:10:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":71,"id":94,"nodeType":"Return","src":"1793:17:0"}},{"expression":{"components":[{"hexValue":"74727565","id":96,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1828:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":97,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81,"src":"1834:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":98,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1827:9:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":71,"id":99,"nodeType":"Return","src":"1820:16:0"}]},"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"1266:137:0","text":" @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n _Available since v3.4._"},"id":101,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nodeType":"FunctionDefinition","parameters":{"id":66,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":101,"src":"1424:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62,"name":"uint256","nodeType":"ElementaryTypeName","src":"1424:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":65,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":101,"src":"1435:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":64,"name":"uint256","nodeType":"ElementaryTypeName","src":"1435:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1423:22:0"},"returnParameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":101,"src":"1469:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":67,"name":"bool","nodeType":"ElementaryTypeName","src":"1469:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":70,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":101,"src":"1475:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":69,"name":"uint256","nodeType":"ElementaryTypeName","src":"1475:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1468:15:0"},"scope":354,"src":"1408:435:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":127,"nodeType":"Block","src":"2068:76:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":113,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106,"src":"2082:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2087:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2082:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":120,"nodeType":"IfStatement","src":"2078:29:0","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2098:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2105:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":118,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2097:10:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":112,"id":119,"nodeType":"Return","src":"2090:17:0"}},{"expression":{"components":[{"hexValue":"74727565","id":121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2125:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":122,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104,"src":"2131:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":123,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106,"src":"2135:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2131:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":125,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2124:13:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":112,"id":126,"nodeType":"Return","src":"2117:20:0"}]},"documentation":{"id":102,"nodeType":"StructuredDocumentation","src":"1849:138:0","text":" @dev Returns the division of two unsigned integers, with a division by zero flag.\n _Available since v3.4._"},"id":128,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nodeType":"FunctionDefinition","parameters":{"id":107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":104,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":128,"src":"2008:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":103,"name":"uint256","nodeType":"ElementaryTypeName","src":"2008:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":106,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":128,"src":"2019:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":105,"name":"uint256","nodeType":"ElementaryTypeName","src":"2019:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2007:22:0"},"returnParameters":{"id":112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":128,"src":"2053:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":108,"name":"bool","nodeType":"ElementaryTypeName","src":"2053:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":111,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":128,"src":"2059:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110,"name":"uint256","nodeType":"ElementaryTypeName","src":"2059:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2052:15:0"},"scope":354,"src":"1992:152:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":154,"nodeType":"Block","src":"2379:76:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":140,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"2393:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2398:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2393:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":147,"nodeType":"IfStatement","src":"2389:29:0","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2409:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2416:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":145,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2408:10:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":139,"id":146,"nodeType":"Return","src":"2401:17:0"}},{"expression":{"components":[{"hexValue":"74727565","id":148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2436:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":149,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"2442:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":150,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"2446:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2442:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":152,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2435:13:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":139,"id":153,"nodeType":"Return","src":"2428:20:0"}]},"documentation":{"id":129,"nodeType":"StructuredDocumentation","src":"2150:148:0","text":" @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n _Available since v3.4._"},"id":155,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nodeType":"FunctionDefinition","parameters":{"id":134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":131,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":155,"src":"2319:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":130,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":133,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":155,"src":"2330:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":132,"name":"uint256","nodeType":"ElementaryTypeName","src":"2330:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:22:0"},"returnParameters":{"id":139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":136,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":155,"src":"2364:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":135,"name":"bool","nodeType":"ElementaryTypeName","src":"2364:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":138,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":155,"src":"2370:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":137,"name":"uint256","nodeType":"ElementaryTypeName","src":"2370:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2363:15:0"},"scope":354,"src":"2303:152:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":180,"nodeType":"Block","src":"2757:108:0","statements":[{"assignments":[166],"declarations":[{"constant":false,"id":166,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":180,"src":"2767:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":165,"name":"uint256","nodeType":"ElementaryTypeName","src":"2767:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":170,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":167,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":158,"src":"2779:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":168,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":160,"src":"2783:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2779:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2767:17:0"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":172,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":166,"src":"2802:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":173,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":158,"src":"2807:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2802:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206164646974696f6e206f766572666c6f77","id":175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2810:29:0","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":171,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2794:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2794:46:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":177,"nodeType":"ExpressionStatement","src":"2794:46:0"},{"expression":{"id":178,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":166,"src":"2857:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":164,"id":179,"nodeType":"Return","src":"2850:8:0"}]},"documentation":{"id":156,"nodeType":"StructuredDocumentation","src":"2461:224:0","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":181,"implemented":true,"kind":"function","modifiers":[],"name":"add","nodeType":"FunctionDefinition","parameters":{"id":161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":158,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":181,"src":"2703:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":157,"name":"uint256","nodeType":"ElementaryTypeName","src":"2703:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":160,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":181,"src":"2714:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":159,"name":"uint256","nodeType":"ElementaryTypeName","src":"2714:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2702:22:0"},"returnParameters":{"id":164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":163,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":181,"src":"2748:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":162,"name":"uint256","nodeType":"ElementaryTypeName","src":"2748:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2747:9:0"},"scope":354,"src":"2690:175:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":202,"nodeType":"Block","src":"3203:88:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":192,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"3221:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":193,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3226:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3221:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a207375627472616374696f6e206f766572666c6f77","id":195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3229:32:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""},"value":"SafeMath: subtraction overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""}],"id":191,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3213:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3213:49:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":197,"nodeType":"ExpressionStatement","src":"3213:49:0"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":198,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3279:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":199,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"3283:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3279:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":190,"id":201,"nodeType":"Return","src":"3272:12:0"}]},"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"2871:260:0","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":203,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nodeType":"FunctionDefinition","parameters":{"id":187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":184,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":203,"src":"3149:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":183,"name":"uint256","nodeType":"ElementaryTypeName","src":"3149:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":186,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":203,"src":"3160:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":185,"name":"uint256","nodeType":"ElementaryTypeName","src":"3160:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3148:22:0"},"returnParameters":{"id":190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":189,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":203,"src":"3194:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":188,"name":"uint256","nodeType":"ElementaryTypeName","src":"3194:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3193:9:0"},"scope":354,"src":"3136:155:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":236,"nodeType":"Block","src":"3605:148:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":213,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"3619:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3624:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3619:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":218,"nodeType":"IfStatement","src":"3615:20:0","trueBody":{"expression":{"hexValue":"30","id":216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3634:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":212,"id":217,"nodeType":"Return","src":"3627:8:0"}},{"assignments":[220],"declarations":[{"constant":false,"id":220,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":236,"src":"3645:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":219,"name":"uint256","nodeType":"ElementaryTypeName","src":"3645:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":224,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":221,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"3657:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":222,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":208,"src":"3661:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3657:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3645:17:0"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":226,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"3680:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":227,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"3684:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3680:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":229,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":208,"src":"3689:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3680:10:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77","id":231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3692:35:0","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":225,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3672:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3672:56:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":233,"nodeType":"ExpressionStatement","src":"3672:56:0"},{"expression":{"id":234,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"3745:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":212,"id":235,"nodeType":"Return","src":"3738:8:0"}]},"documentation":{"id":204,"nodeType":"StructuredDocumentation","src":"3297:236:0","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":237,"implemented":true,"kind":"function","modifiers":[],"name":"mul","nodeType":"FunctionDefinition","parameters":{"id":209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":206,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":237,"src":"3551:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":205,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":208,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":237,"src":"3562:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":207,"name":"uint256","nodeType":"ElementaryTypeName","src":"3562:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3550:22:0"},"returnParameters":{"id":212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":211,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":237,"src":"3596:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":210,"name":"uint256","nodeType":"ElementaryTypeName","src":"3596:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3595:9:0"},"scope":354,"src":"3538:215:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":258,"nodeType":"Block","src":"4284:83:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":248,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":242,"src":"4302:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4306:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4302:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206469766973696f6e206279207a65726f","id":251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4309:28:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""},"value":"SafeMath: division by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""}],"id":247,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4294:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4294:44:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":253,"nodeType":"ExpressionStatement","src":"4294:44:0"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":254,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":240,"src":"4355:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":255,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":242,"src":"4359:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4355:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":246,"id":257,"nodeType":"Return","src":"4348:12:0"}]},"documentation":{"id":238,"nodeType":"StructuredDocumentation","src":"3759:453:0","text":" @dev Returns the integer division of two unsigned integers, reverting 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":259,"implemented":true,"kind":"function","modifiers":[],"name":"div","nodeType":"FunctionDefinition","parameters":{"id":243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":240,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":259,"src":"4230:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":239,"name":"uint256","nodeType":"ElementaryTypeName","src":"4230:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":242,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":259,"src":"4241:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":241,"name":"uint256","nodeType":"ElementaryTypeName","src":"4241:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4229:22:0"},"returnParameters":{"id":246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":245,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":259,"src":"4275:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":244,"name":"uint256","nodeType":"ElementaryTypeName","src":"4275:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4274:9:0"},"scope":354,"src":"4217:150:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":280,"nodeType":"Block","src":"4887:81:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":270,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":264,"src":"4905:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4909:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4905:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206d6f64756c6f206279207a65726f","id":273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4912:26:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""},"value":"SafeMath: modulo by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""}],"id":269,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4897:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4897:42:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":275,"nodeType":"ExpressionStatement","src":"4897:42:0"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":276,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"4956:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":277,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":264,"src":"4960:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4956:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":268,"id":279,"nodeType":"Return","src":"4949:12:0"}]},"documentation":{"id":260,"nodeType":"StructuredDocumentation","src":"4373:442:0","text":" @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n reverting 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":281,"implemented":true,"kind":"function","modifiers":[],"name":"mod","nodeType":"FunctionDefinition","parameters":{"id":265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":262,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":281,"src":"4833:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":261,"name":"uint256","nodeType":"ElementaryTypeName","src":"4833:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":264,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":281,"src":"4844:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":263,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4832:22:0"},"returnParameters":{"id":268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":267,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":281,"src":"4878:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":266,"name":"uint256","nodeType":"ElementaryTypeName","src":"4878:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4877:9:0"},"scope":354,"src":"4820:148:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":304,"nodeType":"Block","src":"5527:68:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":294,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":286,"src":"5545:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":295,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":284,"src":"5550:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5545:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":297,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":288,"src":"5553:12:0","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":293,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5537:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5537:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":299,"nodeType":"ExpressionStatement","src":"5537:29:0"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":300,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":284,"src":"5583:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":301,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":286,"src":"5587:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5583:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":292,"id":303,"nodeType":"Return","src":"5576:12:0"}]},"documentation":{"id":282,"nodeType":"StructuredDocumentation","src":"4974:453:0","text":" @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {trySub}.\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."},"id":305,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nodeType":"FunctionDefinition","parameters":{"id":289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":284,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":305,"src":"5445:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":283,"name":"uint256","nodeType":"ElementaryTypeName","src":"5445:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":286,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":305,"src":"5456:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":285,"name":"uint256","nodeType":"ElementaryTypeName","src":"5456:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":288,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":305,"src":"5467:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":287,"name":"string","nodeType":"ElementaryTypeName","src":"5467:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5444:50:0"},"returnParameters":{"id":292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":291,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":305,"src":"5518:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":290,"name":"uint256","nodeType":"ElementaryTypeName","src":"5518:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5517:9:0"},"scope":354,"src":"5432:163:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":328,"nodeType":"Block","src":"6347:67:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":318,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"6365:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6369:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6365:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":321,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":312,"src":"6372:12:0","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":317,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6357:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6357:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":323,"nodeType":"ExpressionStatement","src":"6357:28:0"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":324,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"6402:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":325,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":310,"src":"6406:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6402:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":316,"id":327,"nodeType":"Return","src":"6395:12:0"}]},"documentation":{"id":306,"nodeType":"StructuredDocumentation","src":"5601:646:0","text":" @dev Returns the integer division of two unsigned integers, reverting with custom message on\n division by zero. The result is rounded towards zero.\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {tryDiv}.\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":329,"implemented":true,"kind":"function","modifiers":[],"name":"div","nodeType":"FunctionDefinition","parameters":{"id":313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":308,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":329,"src":"6265:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":307,"name":"uint256","nodeType":"ElementaryTypeName","src":"6265:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":310,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":329,"src":"6276:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":309,"name":"uint256","nodeType":"ElementaryTypeName","src":"6276:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":329,"src":"6287:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":311,"name":"string","nodeType":"ElementaryTypeName","src":"6287:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6264:50:0"},"returnParameters":{"id":316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":315,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":329,"src":"6338:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":314,"name":"uint256","nodeType":"ElementaryTypeName","src":"6338:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6337:9:0"},"scope":354,"src":"6252:162:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":352,"nodeType":"Block","src":"7155:67:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":342,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":334,"src":"7173:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7177:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7173:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":345,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":336,"src":"7180:12:0","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":341,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7165:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7165:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":347,"nodeType":"ExpressionStatement","src":"7165:28:0"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":348,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":332,"src":"7210:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":349,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":334,"src":"7214:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7210:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":340,"id":351,"nodeType":"Return","src":"7203:12:0"}]},"documentation":{"id":330,"nodeType":"StructuredDocumentation","src":"6420:635:0","text":" @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n reverting with custom message when dividing by zero.\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {tryMod}.\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":353,"implemented":true,"kind":"function","modifiers":[],"name":"mod","nodeType":"FunctionDefinition","parameters":{"id":337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":332,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":353,"src":"7073:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":331,"name":"uint256","nodeType":"ElementaryTypeName","src":"7073:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":334,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":353,"src":"7084:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":333,"name":"uint256","nodeType":"ElementaryTypeName","src":"7084:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":336,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":353,"src":"7095:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":335,"name":"string","nodeType":"ElementaryTypeName","src":"7095:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7072:50:0"},"returnParameters":{"id":340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":339,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":353,"src":"7146:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":338,"name":"uint256","nodeType":"ElementaryTypeName","src":"7146:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7145:9:0"},"scope":354,"src":"7060:162:0","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":355,"src":"630:6594:0"}],"src":"33:7192:0"},"id":0},"@openzeppelin/contracts/proxy/Proxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","exportedSymbols":{"Proxy":[406]},"id":407,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":356,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:1"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":357,"nodeType":"StructuredDocumentation","src":"66:598:1","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":406,"linearizedBaseContracts":[406],"name":"Proxy","nodeType":"ContractDefinition","nodes":[{"body":{"id":364,"nodeType":"Block","src":"951:835:1","statements":[{"AST":{"nodeType":"YulBlock","src":"1026:754:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1279:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1282:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1285:12:1"},"nodeType":"YulFunctionCall","src":"1285:14:1"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1266:12:1"},"nodeType":"YulFunctionCall","src":"1266:34:1"},"nodeType":"YulExpressionStatement","src":"1266:34:1"},{"nodeType":"YulVariableDeclaration","src":"1427:74:1","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1454:3:1"},"nodeType":"YulFunctionCall","src":"1454:5:1"},{"name":"implementation","nodeType":"YulIdentifier","src":"1461:14:1"},{"kind":"number","nodeType":"YulLiteral","src":"1477:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1480:12:1"},"nodeType":"YulFunctionCall","src":"1480:14:1"},{"kind":"number","nodeType":"YulLiteral","src":"1496:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1499:1:1","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"1441:12:1"},"nodeType":"YulFunctionCall","src":"1441:60:1"},"variables":[{"name":"result","nodeType":"YulTypedName","src":"1431:6:1","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1569:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1572:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1575:14:1"},"nodeType":"YulFunctionCall","src":"1575:16:1"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1554:14:1"},"nodeType":"YulFunctionCall","src":"1554:38:1"},"nodeType":"YulExpressionStatement","src":"1554:38:1"},{"cases":[{"body":{"nodeType":"YulBlock","src":"1687:31:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1696:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1699:14:1"},"nodeType":"YulFunctionCall","src":"1699:16:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1689:6:1"},"nodeType":"YulFunctionCall","src":"1689:27:1"},"nodeType":"YulExpressionStatement","src":"1689:27:1"}]},"nodeType":"YulCase","src":"1680:38:1","value":{"kind":"number","nodeType":"YulLiteral","src":"1685:1:1","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"1739:31:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1748:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1751:14:1"},"nodeType":"YulFunctionCall","src":"1751:16:1"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"1741:6:1"},"nodeType":"YulFunctionCall","src":"1741:27:1"},"nodeType":"YulExpressionStatement","src":"1741:27:1"}]},"nodeType":"YulCase","src":"1731:39:1","value":"default"}],"expression":{"name":"result","nodeType":"YulIdentifier","src":"1613:6:1"},"nodeType":"YulSwitch","src":"1606:164:1"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":360,"isOffset":false,"isSlot":false,"src":"1461:14:1","valueSize":1}],"id":363,"nodeType":"InlineAssembly","src":"1017:763:1"}]},"documentation":{"id":358,"nodeType":"StructuredDocumentation","src":"695:191:1","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internall call site, it will return directly to the external caller."},"id":365,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nodeType":"FunctionDefinition","parameters":{"id":361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":360,"mutability":"mutable","name":"implementation","nodeType":"VariableDeclaration","scope":365,"src":"910:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":359,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"909:24:1"},"returnParameters":{"id":362,"nodeType":"ParameterList","parameters":[],"src":"951:0:1"},"scope":406,"src":"891:895:1","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":366,"nodeType":"StructuredDocumentation","src":"1792:172:1","text":" @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n and {_fallback} should delegate."},"id":371,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nodeType":"FunctionDefinition","parameters":{"id":367,"nodeType":"ParameterList","parameters":[],"src":"1993:2:1"},"returnParameters":{"id":370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":369,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":371,"src":"2027:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":368,"name":"address","nodeType":"ElementaryTypeName","src":"2027:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2026:9:1"},"scope":406,"src":"1969:67:1","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":383,"nodeType":"Block","src":"2303:72:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":375,"name":"_beforeFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":405,"src":"2313:15:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2313:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":377,"nodeType":"ExpressionStatement","src":"2313:17:1"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":379,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":371,"src":"2350:15:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2350:17:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":378,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":365,"src":"2340:9:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2340:28:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":382,"nodeType":"ExpressionStatement","src":"2340:28:1"}]},"documentation":{"id":372,"nodeType":"StructuredDocumentation","src":"2042:218:1","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internall call site, it will return directly to the external caller."},"id":384,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nodeType":"FunctionDefinition","parameters":{"id":373,"nodeType":"ParameterList","parameters":[],"src":"2283:2:1"},"returnParameters":{"id":374,"nodeType":"ParameterList","parameters":[],"src":"2303:0:1"},"scope":406,"src":"2265:110:1","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":391,"nodeType":"Block","src":"2609:28:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":388,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":384,"src":"2619:9:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2619:11:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":390,"nodeType":"ExpressionStatement","src":"2619:11:1"}]},"documentation":{"id":385,"nodeType":"StructuredDocumentation","src":"2381:186:1","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":392,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":386,"nodeType":"ParameterList","parameters":[],"src":"2581:2:1"},"returnParameters":{"id":387,"nodeType":"ParameterList","parameters":[],"src":"2609:0:1"},"scope":406,"src":"2572:65:1","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":399,"nodeType":"Block","src":"2833:28:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":396,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":384,"src":"2843:9:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2843:11:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":398,"nodeType":"ExpressionStatement","src":"2843:11:1"}]},"documentation":{"id":393,"nodeType":"StructuredDocumentation","src":"2643:149:1","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n is empty."},"id":400,"implemented":true,"kind":"receive","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":394,"nodeType":"ParameterList","parameters":[],"src":"2805:2:1"},"returnParameters":{"id":395,"nodeType":"ParameterList","parameters":[],"src":"2833:0:1"},"scope":406,"src":"2797:64:1","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":404,"nodeType":"Block","src":"3186:7:1","statements":[]},"documentation":{"id":401,"nodeType":"StructuredDocumentation","src":"2867:270:1","text":" @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n call, or as part of the Solidity `fallback` or `receive` functions.\n If overriden should call `super._beforeFallback()`."},"id":405,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nodeType":"FunctionDefinition","parameters":{"id":402,"nodeType":"ParameterList","parameters":[],"src":"3166:2:1"},"returnParameters":{"id":403,"nodeType":"ParameterList","parameters":[],"src":"3186:0:1"},"scope":406,"src":"3142:51:1","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":407,"src":"665:2530:1"}],"src":"33:3163:1"},"id":1},"@openzeppelin/contracts/proxy/UpgradeableProxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/UpgradeableProxy.sol","exportedSymbols":{"Address":[1390],"Proxy":[406],"UpgradeableProxy":[513]},"id":514,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":408,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:2"},{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","file":"./Proxy.sol","id":409,"nodeType":"ImportDirective","scope":514,"sourceUnit":407,"src":"66:21:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../utils/Address.sol","id":410,"nodeType":"ImportDirective","scope":514,"sourceUnit":1391,"src":"88:30:2","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":412,"name":"Proxy","nodeType":"UserDefinedTypeName","referencedDeclaration":406,"src":"667:5:2","typeDescriptions":{"typeIdentifier":"t_contract$_Proxy_$406","typeString":"contract Proxy"}},"id":413,"nodeType":"InheritanceSpecifier","src":"667:5:2"}],"contractDependencies":[406],"contractKind":"contract","documentation":{"id":411,"nodeType":"StructuredDocumentation","src":"120:517:2","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy.\n Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n {TransparentUpgradeableProxy}."},"fullyImplemented":true,"id":513,"linearizedBaseContracts":[513,406],"name":"UpgradeableProxy","nodeType":"ContractDefinition","nodes":[{"body":{"id":454,"nodeType":"Block","src":"1082:246:2","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":422,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":464,"src":"1099:20:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e696d706c656d656e746174696f6e","id":428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1149:30:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""},"value":"eip1967.proxy.implementation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""}],"id":427,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1139:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1139:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1131:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":425,"name":"uint256","nodeType":"ElementaryTypeName","src":"1131:7:2","typeDescriptions":{}}},"id":430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1131:50:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1184:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1131:54:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1123:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":423,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1123:7:2","typeDescriptions":{}}},"id":433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1123:63:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1099:87:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":421,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"1092:6:2","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1092:95:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":436,"nodeType":"ExpressionStatement","src":"1092:95:2"},{"expression":{"arguments":[{"id":438,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":416,"src":"1216:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":437,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":512,"src":"1197:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1197:26:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":440,"nodeType":"ExpressionStatement","src":"1197:26:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":441,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"1236:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1236:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1251:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1236:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":453,"nodeType":"IfStatement","src":"1233:89:2","trueBody":{"id":452,"nodeType":"Block","src":"1254:68:2","statements":[{"expression":{"arguments":[{"id":448,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":416,"src":"1297:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":449,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"1305:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":445,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1390,"src":"1268:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$1390_$","typeString":"type(library Address)"}},"id":447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":1324,"src":"1268:28:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1268:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":451,"nodeType":"ExpressionStatement","src":"1268:43:2"}]}}]},"documentation":{"id":414,"nodeType":"StructuredDocumentation","src":"679:335:2","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n function call, and allows initializating the storage of the proxy like a Solidity constructor."},"id":455,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":416,"mutability":"mutable","name":"_logic","nodeType":"VariableDeclaration","scope":455,"src":"1031:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":415,"name":"address","nodeType":"ElementaryTypeName","src":"1031:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":418,"mutability":"mutable","name":"_data","nodeType":"VariableDeclaration","scope":455,"src":"1047:18:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":417,"name":"bytes","nodeType":"ElementaryTypeName","src":"1047:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1030:36:2"},"returnParameters":{"id":420,"nodeType":"ParameterList","parameters":[],"src":"1082:0:2"},"scope":513,"src":"1019:309:2","stateMutability":"payable","virtual":false,"visibility":"public"},{"anonymous":false,"documentation":{"id":456,"nodeType":"StructuredDocumentation","src":"1334:68:2","text":" @dev Emitted when the implementation is upgraded."},"id":460,"name":"Upgraded","nodeType":"EventDefinition","parameters":{"id":459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":458,"indexed":true,"mutability":"mutable","name":"implementation","nodeType":"VariableDeclaration","scope":460,"src":"1422:30:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":457,"name":"address","nodeType":"ElementaryTypeName","src":"1422:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1421:32:2"},"src":"1407:47:2"},{"constant":true,"documentation":{"id":461,"nodeType":"StructuredDocumentation","src":"1460:214:2","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":464,"mutability":"constant","name":"_IMPLEMENTATION_SLOT","nodeType":"VariableDeclaration","scope":513,"src":"1679:114:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":462,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1679:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1727:66:2","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"private"},{"baseFunctions":[371],"body":{"id":476,"nodeType":"Block","src":"1953:169:2","statements":[{"assignments":[472],"declarations":[{"constant":false,"id":472,"mutability":"mutable","name":"slot","nodeType":"VariableDeclaration","scope":476,"src":"1963:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":471,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1963:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":474,"initialValue":{"id":473,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":464,"src":"1978:20:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1963:35:2"},{"AST":{"nodeType":"YulBlock","src":"2073:43:2","statements":[{"nodeType":"YulAssignment","src":"2087:19:2","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"2101:4:2"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"2095:5:2"},"nodeType":"YulFunctionCall","src":"2095:11:2"},"variableNames":[{"name":"impl","nodeType":"YulIdentifier","src":"2087:4:2"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":469,"isOffset":false,"isSlot":false,"src":"2087:4:2","valueSize":1},{"declaration":472,"isOffset":false,"isSlot":false,"src":"2101:4:2","valueSize":1}],"id":475,"nodeType":"InlineAssembly","src":"2064:52:2"}]},"documentation":{"id":465,"nodeType":"StructuredDocumentation","src":"1800:67:2","text":" @dev Returns the current implementation address."},"id":477,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nodeType":"FunctionDefinition","overrides":{"id":467,"nodeType":"OverrideSpecifier","overrides":[],"src":"1921:8:2"},"parameters":{"id":466,"nodeType":"ParameterList","parameters":[],"src":"1896:2:2"},"returnParameters":{"id":470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":469,"mutability":"mutable","name":"impl","nodeType":"VariableDeclaration","scope":477,"src":"1939:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":468,"name":"address","nodeType":"ElementaryTypeName","src":"1939:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1938:14:2"},"scope":513,"src":"1872:250:2","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":491,"nodeType":"Block","src":"2305:96:2","statements":[{"expression":{"arguments":[{"id":484,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"2334:17:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":483,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":512,"src":"2315:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2315:37:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":486,"nodeType":"ExpressionStatement","src":"2315:37:2"},{"eventCall":{"arguments":[{"id":488,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"2376:17:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":487,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":460,"src":"2367:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2367:27:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":490,"nodeType":"EmitStatement","src":"2362:32:2"}]},"documentation":{"id":478,"nodeType":"StructuredDocumentation","src":"2128:108:2","text":" @dev Upgrades the proxy to a new implementation.\n Emits an {Upgraded} event."},"id":492,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nodeType":"FunctionDefinition","parameters":{"id":481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":480,"mutability":"mutable","name":"newImplementation","nodeType":"VariableDeclaration","scope":492,"src":"2261:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":479,"name":"address","nodeType":"ElementaryTypeName","src":"2261:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2260:27:2"},"returnParameters":{"id":482,"nodeType":"ParameterList","parameters":[],"src":"2305:0:2"},"scope":513,"src":"2241:160:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":511,"nodeType":"Block","src":"2555:297:2","statements":[{"expression":{"arguments":[{"arguments":[{"id":501,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":495,"src":"2592:17:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":499,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1390,"src":"2573:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$1390_$","typeString":"type(library Address)"}},"id":500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":1114,"src":"2573:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2573:37:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2612:56:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_a962afc8125c78a56caf50b104c38b8318717478c281b4e59e7fb3e32af3a877","typeString":"literal_string \"UpgradeableProxy: new implementation is not a contract\""},"value":"UpgradeableProxy: new implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a962afc8125c78a56caf50b104c38b8318717478c281b4e59e7fb3e32af3a877","typeString":"literal_string \"UpgradeableProxy: new implementation is not a contract\""}],"id":498,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2565:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2565:104:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":505,"nodeType":"ExpressionStatement","src":"2565:104:2"},{"assignments":[507],"declarations":[{"constant":false,"id":507,"mutability":"mutable","name":"slot","nodeType":"VariableDeclaration","scope":511,"src":"2680:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":506,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2680:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":509,"initialValue":{"id":508,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":464,"src":"2695:20:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2680:35:2"},{"AST":{"nodeType":"YulBlock","src":"2791:55:2","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"2812:4:2"},{"name":"newImplementation","nodeType":"YulIdentifier","src":"2818:17:2"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2805:6:2"},"nodeType":"YulFunctionCall","src":"2805:31:2"},"nodeType":"YulExpressionStatement","src":"2805:31:2"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":495,"isOffset":false,"isSlot":false,"src":"2818:17:2","valueSize":1},{"declaration":507,"isOffset":false,"isSlot":false,"src":"2812:4:2","valueSize":1}],"id":510,"nodeType":"InlineAssembly","src":"2782:64:2"}]},"documentation":{"id":493,"nodeType":"StructuredDocumentation","src":"2407:80:2","text":" @dev Stores a new address in the EIP1967 implementation slot."},"id":512,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nodeType":"FunctionDefinition","parameters":{"id":496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":495,"mutability":"mutable","name":"newImplementation","nodeType":"VariableDeclaration","scope":512,"src":"2520:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":494,"name":"address","nodeType":"ElementaryTypeName","src":"2520:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2519:27:2"},"returnParameters":{"id":497,"nodeType":"ParameterList","parameters":[],"src":"2555:0:2"},"scope":513,"src":"2492:360:2","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":514,"src":"638:2216:2"}],"src":"33:2822:2"},"id":2},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","exportedSymbols":{"Context":[1413],"ERC20":[1016],"IERC20":[1094],"SafeMath":[354]},"id":1017,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":515,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:3"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":516,"nodeType":"ImportDirective","scope":1017,"sourceUnit":1414,"src":"66:33:3","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"./IERC20.sol","id":517,"nodeType":"ImportDirective","scope":1017,"sourceUnit":1095,"src":"100:22:3","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/math/SafeMath.sol","file":"../../math/SafeMath.sol","id":518,"nodeType":"ImportDirective","scope":1017,"sourceUnit":355,"src":"123:33:3","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":520,"name":"Context","nodeType":"UserDefinedTypeName","referencedDeclaration":1413,"src":"1339:7:3","typeDescriptions":{"typeIdentifier":"t_contract$_Context_$1413","typeString":"contract Context"}},"id":521,"nodeType":"InheritanceSpecifier","src":"1339:7:3"},{"baseName":{"id":522,"name":"IERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":1094,"src":"1348:6:3","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1094","typeString":"contract IERC20"}},"id":523,"nodeType":"InheritanceSpecifier","src":"1348:6:3"}],"contractDependencies":[1094,1413],"contractKind":"contract","documentation":{"id":519,"nodeType":"StructuredDocumentation","src":"158:1162:3","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":1016,"linearizedBaseContracts":[1016,1094,1413],"name":"ERC20","nodeType":"ContractDefinition","nodes":[{"id":526,"libraryName":{"id":524,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":354,"src":"1367:8:3","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$354","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"1361:27:3","typeName":{"id":525,"name":"uint256","nodeType":"ElementaryTypeName","src":"1380:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":530,"mutability":"mutable","name":"_balances","nodeType":"VariableDeclaration","scope":1016,"src":"1394:46:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":529,"keyType":{"id":527,"name":"address","nodeType":"ElementaryTypeName","src":"1403:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1394:28:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":528,"name":"uint256","nodeType":"ElementaryTypeName","src":"1414:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":536,"mutability":"mutable","name":"_allowances","nodeType":"VariableDeclaration","scope":1016,"src":"1447:69:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":535,"keyType":{"id":531,"name":"address","nodeType":"ElementaryTypeName","src":"1456:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1447:49:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":534,"keyType":{"id":532,"name":"address","nodeType":"ElementaryTypeName","src":"1476:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1467:28:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":533,"name":"uint256","nodeType":"ElementaryTypeName","src":"1487:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":538,"mutability":"mutable","name":"_totalSupply","nodeType":"VariableDeclaration","scope":1016,"src":"1523:28:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1523:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":540,"mutability":"mutable","name":"_name","nodeType":"VariableDeclaration","scope":1016,"src":"1558:20:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":539,"name":"string","nodeType":"ElementaryTypeName","src":"1558:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":542,"mutability":"mutable","name":"_symbol","nodeType":"VariableDeclaration","scope":1016,"src":"1584:22:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":541,"name":"string","nodeType":"ElementaryTypeName","src":"1584:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":544,"mutability":"mutable","name":"_decimals","nodeType":"VariableDeclaration","scope":1016,"src":"1612:23:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":543,"name":"uint8","nodeType":"ElementaryTypeName","src":"1612:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"body":{"id":564,"nodeType":"Block","src":"2022:81:3","statements":[{"expression":{"id":554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":552,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":540,"src":"2032:5:3","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":553,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"2040:5:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2032:13:3","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":555,"nodeType":"ExpressionStatement","src":"2032:13:3"},{"expression":{"id":558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":556,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":542,"src":"2055:7:3","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":557,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":549,"src":"2065:7:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2055:17:3","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":559,"nodeType":"ExpressionStatement","src":"2055:17:3"},{"expression":{"id":562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":560,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"2082:9:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3138","id":561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2094:2:3","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"2082:14:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":563,"nodeType":"ExpressionStatement","src":"2082:14:3"}]},"documentation":{"id":545,"nodeType":"StructuredDocumentation","src":"1642:311:3","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":565,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":547,"mutability":"mutable","name":"name_","nodeType":"VariableDeclaration","scope":565,"src":"1971:19:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":546,"name":"string","nodeType":"ElementaryTypeName","src":"1971:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":549,"mutability":"mutable","name":"symbol_","nodeType":"VariableDeclaration","scope":565,"src":"1992:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":548,"name":"string","nodeType":"ElementaryTypeName","src":"1992:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1970:44:3"},"returnParameters":{"id":551,"nodeType":"ParameterList","parameters":[],"src":"2022:0:3"},"scope":1016,"src":"1958:145:3","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":573,"nodeType":"Block","src":"2228:29:3","statements":[{"expression":{"id":571,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":540,"src":"2245:5:3","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":570,"id":572,"nodeType":"Return","src":"2238:12:3"}]},"documentation":{"id":566,"nodeType":"StructuredDocumentation","src":"2109:54:3","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":574,"implemented":true,"kind":"function","modifiers":[],"name":"name","nodeType":"FunctionDefinition","parameters":{"id":567,"nodeType":"ParameterList","parameters":[],"src":"2181:2:3"},"returnParameters":{"id":570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":569,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":574,"src":"2213:13:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":568,"name":"string","nodeType":"ElementaryTypeName","src":"2213:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2212:15:3"},"scope":1016,"src":"2168:89:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":582,"nodeType":"Block","src":"2432:31:3","statements":[{"expression":{"id":580,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":542,"src":"2449:7:3","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":579,"id":581,"nodeType":"Return","src":"2442:14:3"}]},"documentation":{"id":575,"nodeType":"StructuredDocumentation","src":"2263:102:3","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":583,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nodeType":"FunctionDefinition","parameters":{"id":576,"nodeType":"ParameterList","parameters":[],"src":"2385:2:3"},"returnParameters":{"id":579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":578,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":583,"src":"2417:13:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":577,"name":"string","nodeType":"ElementaryTypeName","src":"2417:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2416:15:3"},"scope":1016,"src":"2370:93:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":591,"nodeType":"Block","src":"3142:33:3","statements":[{"expression":{"id":589,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"3159:9:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":588,"id":590,"nodeType":"Return","src":"3152:16:3"}]},"documentation":{"id":584,"nodeType":"StructuredDocumentation","src":"2469:612:3","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":592,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nodeType":"FunctionDefinition","parameters":{"id":585,"nodeType":"ParameterList","parameters":[],"src":"3103:2:3"},"returnParameters":{"id":588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":587,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":592,"src":"3135:5:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":586,"name":"uint8","nodeType":"ElementaryTypeName","src":"3135:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3134:7:3"},"scope":1016,"src":"3086:89:3","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1025],"body":{"id":601,"nodeType":"Block","src":"3305:36:3","statements":[{"expression":{"id":599,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"3322:12:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":598,"id":600,"nodeType":"Return","src":"3315:19:3"}]},"documentation":{"id":593,"nodeType":"StructuredDocumentation","src":"3181:49:3","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":602,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nodeType":"FunctionDefinition","overrides":{"id":595,"nodeType":"OverrideSpecifier","overrides":[],"src":"3278:8:3"},"parameters":{"id":594,"nodeType":"ParameterList","parameters":[],"src":"3255:2:3"},"returnParameters":{"id":598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":597,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":602,"src":"3296:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":596,"name":"uint256","nodeType":"ElementaryTypeName","src":"3296:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3295:9:3"},"scope":1016,"src":"3235:106:3","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1033],"body":{"id":615,"nodeType":"Block","src":"3482:42:3","statements":[{"expression":{"baseExpression":{"id":611,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"3499:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":613,"indexExpression":{"id":612,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":605,"src":"3509:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3499:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":610,"id":614,"nodeType":"Return","src":"3492:25:3"}]},"documentation":{"id":603,"nodeType":"StructuredDocumentation","src":"3347:47:3","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":616,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nodeType":"FunctionDefinition","overrides":{"id":607,"nodeType":"OverrideSpecifier","overrides":[],"src":"3455:8:3"},"parameters":{"id":606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":605,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":616,"src":"3418:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":604,"name":"address","nodeType":"ElementaryTypeName","src":"3418:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3417:17:3"},"returnParameters":{"id":610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":616,"src":"3473:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":608,"name":"uint256","nodeType":"ElementaryTypeName","src":"3473:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3472:9:3"},"scope":1016,"src":"3399:125:3","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1043],"body":{"id":636,"nodeType":"Block","src":"3819:80:3","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":628,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"3839:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3839:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":630,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":619,"src":"3853:9:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":631,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":621,"src":"3864:6:3","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":627,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":837,"src":"3829:9:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3829:42:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":633,"nodeType":"ExpressionStatement","src":"3829:42:3"},{"expression":{"hexValue":"74727565","id":634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3888:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":626,"id":635,"nodeType":"Return","src":"3881:11:3"}]},"documentation":{"id":617,"nodeType":"StructuredDocumentation","src":"3530:192:3","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":637,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","overrides":{"id":623,"nodeType":"OverrideSpecifier","overrides":[],"src":"3795:8:3"},"parameters":{"id":622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":619,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":637,"src":"3745:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":618,"name":"address","nodeType":"ElementaryTypeName","src":"3745:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":621,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":637,"src":"3764:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":620,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3744:35:3"},"returnParameters":{"id":626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":625,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":637,"src":"3813:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":624,"name":"bool","nodeType":"ElementaryTypeName","src":"3813:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3812:6:3"},"scope":1016,"src":"3727:172:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1053],"body":{"id":654,"nodeType":"Block","src":"4055:51:3","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":648,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"4072:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":650,"indexExpression":{"id":649,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"4084:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4072:18:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":652,"indexExpression":{"id":651,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":642,"src":"4091:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4072:27:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":647,"id":653,"nodeType":"Return","src":"4065:34:3"}]},"documentation":{"id":638,"nodeType":"StructuredDocumentation","src":"3905:47:3","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":655,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nodeType":"FunctionDefinition","overrides":{"id":644,"nodeType":"OverrideSpecifier","overrides":[],"src":"4028:8:3"},"parameters":{"id":643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":640,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":655,"src":"3976:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":639,"name":"address","nodeType":"ElementaryTypeName","src":"3976:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":642,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":655,"src":"3991:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":641,"name":"address","nodeType":"ElementaryTypeName","src":"3991:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3975:32:3"},"returnParameters":{"id":647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":646,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":655,"src":"4046:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":645,"name":"uint256","nodeType":"ElementaryTypeName","src":"4046:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4045:9:3"},"scope":1016,"src":"3957:149:3","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1063],"body":{"id":675,"nodeType":"Block","src":"4333:77:3","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":667,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"4352:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4352:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":669,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"4366:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":670,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":660,"src":"4375:6:3","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":666,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":993,"src":"4343:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4343:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":672,"nodeType":"ExpressionStatement","src":"4343:39:3"},{"expression":{"hexValue":"74727565","id":673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4399:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":665,"id":674,"nodeType":"Return","src":"4392:11:3"}]},"documentation":{"id":656,"nodeType":"StructuredDocumentation","src":"4112:127:3","text":" @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":676,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nodeType":"FunctionDefinition","overrides":{"id":662,"nodeType":"OverrideSpecifier","overrides":[],"src":"4309:8:3"},"parameters":{"id":661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":658,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":676,"src":"4261:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":657,"name":"address","nodeType":"ElementaryTypeName","src":"4261:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":660,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":676,"src":"4278:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":659,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4260:33:3"},"returnParameters":{"id":665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":664,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":676,"src":"4327:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":663,"name":"bool","nodeType":"ElementaryTypeName","src":"4327:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4326:6:3"},"scope":1016,"src":"4244:166:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1075],"body":{"id":713,"nodeType":"Block","src":"4989:205:3","statements":[{"expression":{"arguments":[{"id":690,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":679,"src":"5009:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":691,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"5017:9:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":692,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":683,"src":"5028:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":689,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":837,"src":"4999:9:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4999:36:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":694,"nodeType":"ExpressionStatement","src":"4999:36:3"},{"expression":{"arguments":[{"id":696,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":679,"src":"5054:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":697,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"5062:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5062:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"arguments":[{"id":706,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":683,"src":"5114:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365","id":707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5122:42:3","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":699,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"5076:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":701,"indexExpression":{"id":700,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":679,"src":"5088:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5076:19:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":704,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":702,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"5096:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5096:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5076:33:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":305,"src":"5076:37:3","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":708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5076:89:3","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":695,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":993,"src":"5045:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5045:121:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":710,"nodeType":"ExpressionStatement","src":"5045:121:3"},{"expression":{"hexValue":"74727565","id":711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5183:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":688,"id":712,"nodeType":"Return","src":"5176:11:3"}]},"documentation":{"id":677,"nodeType":"StructuredDocumentation","src":"4416:456:3","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":714,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","overrides":{"id":685,"nodeType":"OverrideSpecifier","overrides":[],"src":"4965:8:3"},"parameters":{"id":684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":679,"mutability":"mutable","name":"sender","nodeType":"VariableDeclaration","scope":714,"src":"4899:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":678,"name":"address","nodeType":"ElementaryTypeName","src":"4899:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":681,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":714,"src":"4915:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":680,"name":"address","nodeType":"ElementaryTypeName","src":"4915:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":683,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":714,"src":"4934:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":682,"name":"uint256","nodeType":"ElementaryTypeName","src":"4934:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4898:51:3"},"returnParameters":{"id":688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":687,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":714,"src":"4983:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":686,"name":"bool","nodeType":"ElementaryTypeName","src":"4983:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4982:6:3"},"scope":1016,"src":"4877:317:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":741,"nodeType":"Block","src":"5683:121:3","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":725,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"5702:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5702:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":727,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"5716:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":735,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":719,"src":"5764:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"baseExpression":{"id":728,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"5725:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":731,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":729,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"5737:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5737:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5725:25:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":733,"indexExpression":{"id":732,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"5751:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5725:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":181,"src":"5725:38:3","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":736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5725:50:3","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":724,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":993,"src":"5693:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5693:83:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":738,"nodeType":"ExpressionStatement","src":"5693:83:3"},{"expression":{"hexValue":"74727565","id":739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5793:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":723,"id":740,"nodeType":"Return","src":"5786:11:3"}]},"documentation":{"id":715,"nodeType":"StructuredDocumentation","src":"5200:384:3","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":742,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nodeType":"FunctionDefinition","parameters":{"id":720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":717,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":742,"src":"5616:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":716,"name":"address","nodeType":"ElementaryTypeName","src":"5616:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":719,"mutability":"mutable","name":"addedValue","nodeType":"VariableDeclaration","scope":742,"src":"5633:18:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":718,"name":"uint256","nodeType":"ElementaryTypeName","src":"5633:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5615:37:3"},"returnParameters":{"id":723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":722,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":742,"src":"5677:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":721,"name":"bool","nodeType":"ElementaryTypeName","src":"5677:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5676:6:3"},"scope":1016,"src":"5589:215:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":770,"nodeType":"Block","src":"6390:167:3","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":753,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"6409:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6409:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":755,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":745,"src":"6423:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":763,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":747,"src":"6471:15:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6488:39:3","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":756,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"6432:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":759,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":757,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1401,"src":"6444:10:3","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":"6444:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6432:25:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":761,"indexExpression":{"id":760,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":745,"src":"6458:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6432:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":305,"src":"6432:38:3","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":765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6432:96:3","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":752,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":993,"src":"6400:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6400:129:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":767,"nodeType":"ExpressionStatement","src":"6400:129:3"},{"expression":{"hexValue":"74727565","id":768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6546:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":751,"id":769,"nodeType":"Return","src":"6539:11:3"}]},"documentation":{"id":743,"nodeType":"StructuredDocumentation","src":"5810:476:3","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":771,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nodeType":"FunctionDefinition","parameters":{"id":748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":745,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":771,"src":"6318:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":744,"name":"address","nodeType":"ElementaryTypeName","src":"6318:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":747,"mutability":"mutable","name":"subtractedValue","nodeType":"VariableDeclaration","scope":771,"src":"6335:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":746,"name":"uint256","nodeType":"ElementaryTypeName","src":"6335:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6317:42:3"},"returnParameters":{"id":751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":750,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":771,"src":"6384:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":749,"name":"bool","nodeType":"ElementaryTypeName","src":"6384:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6383:6:3"},"scope":1016,"src":"6291:266:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":836,"nodeType":"Block","src":"7118:443:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":782,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":774,"src":"7136:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7154:1:3","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":784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7146:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":783,"name":"address","nodeType":"ElementaryTypeName","src":"7146:7:3","typeDescriptions":{}}},"id":786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7146:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"7136:20:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373","id":788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7158:39:3","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":781,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7128:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7128:70:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":790,"nodeType":"ExpressionStatement","src":"7128:70:3"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":792,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":776,"src":"7216:9:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7237:1:3","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":794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7229:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":793,"name":"address","nodeType":"ElementaryTypeName","src":"7229:7:3","typeDescriptions":{}}},"id":796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7229:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"7216:23:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472657373","id":798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7241:37:3","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":791,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7208:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7208:71:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":800,"nodeType":"ExpressionStatement","src":"7208:71:3"},{"expression":{"arguments":[{"id":802,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":774,"src":"7311:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":803,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":776,"src":"7319:9:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":804,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"7330:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":801,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1015,"src":"7290:20:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7290:47:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":806,"nodeType":"ExpressionStatement","src":"7290:47:3"},{"expression":{"id":817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":807,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"7348:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":809,"indexExpression":{"id":808,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":774,"src":"7358:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7348:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":814,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"7390:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365","id":815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7398:40:3","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":810,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"7368:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":812,"indexExpression":{"id":811,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":774,"src":"7378:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7368:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":305,"src":"7368:21:3","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":816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7368:71:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7348:91:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":818,"nodeType":"ExpressionStatement","src":"7348:91:3"},{"expression":{"id":828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":819,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"7449:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":821,"indexExpression":{"id":820,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":776,"src":"7459:9:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7449:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":826,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"7497:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":822,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"7472:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":824,"indexExpression":{"id":823,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":776,"src":"7482:9:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7472:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":181,"src":"7472:24:3","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":827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7472:32:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7449:55:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":829,"nodeType":"ExpressionStatement","src":"7449:55:3"},{"eventCall":{"arguments":[{"id":831,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":774,"src":"7528:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":832,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":776,"src":"7536:9:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":833,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"7547:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":830,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1084,"src":"7519:8:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7519:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":835,"nodeType":"EmitStatement","src":"7514:40:3"}]},"documentation":{"id":772,"nodeType":"StructuredDocumentation","src":"6563:463:3","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":837,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nodeType":"FunctionDefinition","parameters":{"id":779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"mutability":"mutable","name":"sender","nodeType":"VariableDeclaration","scope":837,"src":"7050:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":773,"name":"address","nodeType":"ElementaryTypeName","src":"7050:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":776,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":837,"src":"7066:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":775,"name":"address","nodeType":"ElementaryTypeName","src":"7066:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":778,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":837,"src":"7085:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":777,"name":"uint256","nodeType":"ElementaryTypeName","src":"7085:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7049:51:3"},"returnParameters":{"id":780,"nodeType":"ParameterList","parameters":[],"src":"7118:0:3"},"scope":1016,"src":"7031:530:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":891,"nodeType":"Block","src":"7897:305:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":846,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":840,"src":"7915:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7934:1:3","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":848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7926:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":847,"name":"address","nodeType":"ElementaryTypeName","src":"7926:7:3","typeDescriptions":{}}},"id":850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7926:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"7915:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","id":852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7938:33:3","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":845,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7907:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7907:65:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":854,"nodeType":"ExpressionStatement","src":"7907:65:3"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8012:1:3","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":857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8004:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":856,"name":"address","nodeType":"ElementaryTypeName","src":"8004:7:3","typeDescriptions":{}}},"id":859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8004:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":860,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":840,"src":"8016:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":861,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"8025:6:3","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":855,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1015,"src":"7983:20:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7983:49:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":863,"nodeType":"ExpressionStatement","src":"7983:49:3"},{"expression":{"id":869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":864,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"8043:12:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":867,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"8075:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":865,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"8058:12:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":181,"src":"8058:16:3","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":868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8058:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8043:39:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":870,"nodeType":"ExpressionStatement","src":"8043:39:3"},{"expression":{"id":880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":871,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"8092:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":873,"indexExpression":{"id":872,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":840,"src":"8102:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8092:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":878,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"8136:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":874,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"8113:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":876,"indexExpression":{"id":875,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":840,"src":"8123:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8113:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":181,"src":"8113:22:3","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":879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8113:30:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8092:51:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":881,"nodeType":"ExpressionStatement","src":"8092:51:3"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8175:1:3","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":884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8167:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":883,"name":"address","nodeType":"ElementaryTypeName","src":"8167:7:3","typeDescriptions":{}}},"id":886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8167:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":887,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":840,"src":"8179:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":888,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"8188:6:3","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":882,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1084,"src":"8158:8:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8158:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":890,"nodeType":"EmitStatement","src":"8153:42:3"}]},"documentation":{"id":838,"nodeType":"StructuredDocumentation","src":"7567:260:3","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":892,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nodeType":"FunctionDefinition","parameters":{"id":843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":840,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":892,"src":"7847:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":839,"name":"address","nodeType":"ElementaryTypeName","src":"7847:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":842,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":892,"src":"7864:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":841,"name":"uint256","nodeType":"ElementaryTypeName","src":"7864:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7846:33:3"},"returnParameters":{"id":844,"nodeType":"ParameterList","parameters":[],"src":"7897:0:3"},"scope":1016,"src":"7832:370:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":947,"nodeType":"Block","src":"8587:345:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":901,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"8605:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8624:1:3","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":903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8616:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":902,"name":"address","nodeType":"ElementaryTypeName","src":"8616:7:3","typeDescriptions":{}}},"id":905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8616:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"8605:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f2061646472657373","id":907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8628:35:3","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":900,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8597:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8597:67:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":909,"nodeType":"ExpressionStatement","src":"8597:67:3"},{"expression":{"arguments":[{"id":911,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"8696:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8713:1:3","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":913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8705:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":912,"name":"address","nodeType":"ElementaryTypeName","src":"8705:7:3","typeDescriptions":{}}},"id":915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8705:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":916,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":897,"src":"8717:6:3","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":910,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1015,"src":"8675:20:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8675:49:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":918,"nodeType":"ExpressionStatement","src":"8675:49:3"},{"expression":{"id":929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":919,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"8735:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":921,"indexExpression":{"id":920,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"8745:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8735:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":926,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":897,"src":"8779:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365","id":927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8787:36:3","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":922,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"8756:9:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":924,"indexExpression":{"id":923,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"8766:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8756:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":305,"src":"8756:22:3","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":928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8756:68:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8735:89:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":930,"nodeType":"ExpressionStatement","src":"8735:89:3"},{"expression":{"id":936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":931,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"8834:12:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":934,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":897,"src":"8866:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":932,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"8849:12:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":203,"src":"8849:16:3","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":935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8849:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8834:39:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":937,"nodeType":"ExpressionStatement","src":"8834:39:3"},{"eventCall":{"arguments":[{"id":939,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":895,"src":"8897:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8914:1:3","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":941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8906:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":940,"name":"address","nodeType":"ElementaryTypeName","src":"8906:7:3","typeDescriptions":{}}},"id":943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8906:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":944,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":897,"src":"8918:6:3","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":938,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1084,"src":"8888:8:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8888:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":946,"nodeType":"EmitStatement","src":"8883:42:3"}]},"documentation":{"id":893,"nodeType":"StructuredDocumentation","src":"8208:309:3","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":948,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":895,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":948,"src":"8537:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":894,"name":"address","nodeType":"ElementaryTypeName","src":"8537:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":897,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":948,"src":"8554:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":896,"name":"uint256","nodeType":"ElementaryTypeName","src":"8554:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8536:33:3"},"returnParameters":{"id":899,"nodeType":"ParameterList","parameters":[],"src":"8587:0:3"},"scope":1016,"src":"8522:410:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":992,"nodeType":"Block","src":"9438:257:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":959,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":951,"src":"9456:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9473:1:3","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":961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9465:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":960,"name":"address","nodeType":"ElementaryTypeName","src":"9465:7:3","typeDescriptions":{}}},"id":963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9465:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"9456:19:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373","id":965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9477:38:3","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":958,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9448:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9448:68:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":967,"nodeType":"ExpressionStatement","src":"9448:68:3"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":969,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":953,"src":"9534:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9553:1:3","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":971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9545:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":970,"name":"address","nodeType":"ElementaryTypeName","src":"9545:7:3","typeDescriptions":{}}},"id":973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9545:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"9534:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f2061646472657373","id":975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9557:36:3","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":968,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9526:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9526:68:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":977,"nodeType":"ExpressionStatement","src":"9526:68:3"},{"expression":{"id":984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":978,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"9605:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":981,"indexExpression":{"id":979,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":951,"src":"9617:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9605:18:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":982,"indexExpression":{"id":980,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":953,"src":"9624:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9605:27:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":983,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"9635:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9605:36:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":985,"nodeType":"ExpressionStatement","src":"9605:36:3"},{"eventCall":{"arguments":[{"id":987,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":951,"src":"9665:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":988,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":953,"src":"9672:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":989,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"9681:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":986,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1093,"src":"9656:8:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9656:32:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":991,"nodeType":"EmitStatement","src":"9651:37:3"}]},"documentation":{"id":949,"nodeType":"StructuredDocumentation","src":"8938:412:3","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":993,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nodeType":"FunctionDefinition","parameters":{"id":956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":951,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":993,"src":"9373:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":950,"name":"address","nodeType":"ElementaryTypeName","src":"9373:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":953,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":993,"src":"9388:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":952,"name":"address","nodeType":"ElementaryTypeName","src":"9388:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":955,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":993,"src":"9405:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":954,"name":"uint256","nodeType":"ElementaryTypeName","src":"9405:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9372:48:3"},"returnParameters":{"id":957,"nodeType":"ParameterList","parameters":[],"src":"9438:0:3"},"scope":1016,"src":"9355:340:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1003,"nodeType":"Block","src":"10076:38:3","statements":[{"expression":{"id":1001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":999,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"10086:9:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1000,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":996,"src":"10098:9:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10086:21:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":1002,"nodeType":"ExpressionStatement","src":"10086:21:3"}]},"documentation":{"id":994,"nodeType":"StructuredDocumentation","src":"9701:312:3","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":1004,"implemented":true,"kind":"function","modifiers":[],"name":"_setupDecimals","nodeType":"FunctionDefinition","parameters":{"id":997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":996,"mutability":"mutable","name":"decimals_","nodeType":"VariableDeclaration","scope":1004,"src":"10042:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":995,"name":"uint8","nodeType":"ElementaryTypeName","src":"10042:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"10041:17:3"},"returnParameters":{"id":998,"nodeType":"ParameterList","parameters":[],"src":"10076:0:3"},"scope":1016,"src":"10018:96:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1014,"nodeType":"Block","src":"10790:3:3","statements":[]},"documentation":{"id":1005,"nodeType":"StructuredDocumentation","src":"10120:576:3","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":1015,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeTokenTransfer","nodeType":"FunctionDefinition","parameters":{"id":1012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1007,"mutability":"mutable","name":"from","nodeType":"VariableDeclaration","scope":1015,"src":"10731:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1006,"name":"address","nodeType":"ElementaryTypeName","src":"10731:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1009,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":1015,"src":"10745:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1008,"name":"address","nodeType":"ElementaryTypeName","src":"10745:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1011,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":1015,"src":"10757:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1010,"name":"uint256","nodeType":"ElementaryTypeName","src":"10757:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10730:42:3"},"returnParameters":{"id":1013,"nodeType":"ParameterList","parameters":[],"src":"10790:0:3"},"scope":1016,"src":"10701:92:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":1017,"src":"1321:9474:3"}],"src":"33:10763:3"},"id":3},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[1094]},"id":1095,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1018,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:4"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":1019,"nodeType":"StructuredDocumentation","src":"66:70:4","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":1094,"linearizedBaseContracts":[1094],"name":"IERC20","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1020,"nodeType":"StructuredDocumentation","src":"160:66:4","text":" @dev Returns the amount of tokens in existence."},"functionSelector":"18160ddd","id":1025,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nodeType":"FunctionDefinition","parameters":{"id":1021,"nodeType":"ParameterList","parameters":[],"src":"251:2:4"},"returnParameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1025,"src":"277:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1022,"name":"uint256","nodeType":"ElementaryTypeName","src":"277:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"276:9:4"},"scope":1094,"src":"231:55:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"292:72:4","text":" @dev Returns the amount of tokens owned by `account`."},"functionSelector":"70a08231","id":1033,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nodeType":"FunctionDefinition","parameters":{"id":1029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":1033,"src":"388:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"388:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"387:17:4"},"returnParameters":{"id":1032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1031,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1033,"src":"428:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1030,"name":"uint256","nodeType":"ElementaryTypeName","src":"428:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"427:9:4"},"scope":1094,"src":"369:68:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1034,"nodeType":"StructuredDocumentation","src":"443:209:4","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":1043,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":1039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1036,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":1043,"src":"675:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1035,"name":"address","nodeType":"ElementaryTypeName","src":"675:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1038,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":1043,"src":"694:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1037,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"674:35:4"},"returnParameters":{"id":1042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1041,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1043,"src":"728:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1040,"name":"bool","nodeType":"ElementaryTypeName","src":"728:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"727:6:4"},"scope":1094,"src":"657:77:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1044,"nodeType":"StructuredDocumentation","src":"740:264:4","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":1053,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nodeType":"FunctionDefinition","parameters":{"id":1049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1046,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":1053,"src":"1028:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1045,"name":"address","nodeType":"ElementaryTypeName","src":"1028:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1048,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":1053,"src":"1043:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1047,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1027:32:4"},"returnParameters":{"id":1052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1051,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1053,"src":"1083:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1050,"name":"uint256","nodeType":"ElementaryTypeName","src":"1083:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1082:9:4"},"scope":1094,"src":"1009:83:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1054,"nodeType":"StructuredDocumentation","src":"1098:642:4","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":1063,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nodeType":"FunctionDefinition","parameters":{"id":1059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1056,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":1063,"src":"1762:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1055,"name":"address","nodeType":"ElementaryTypeName","src":"1762:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1058,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":1063,"src":"1779:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1057,"name":"uint256","nodeType":"ElementaryTypeName","src":"1779:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1761:33:4"},"returnParameters":{"id":1062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1061,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1063,"src":"1813:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1060,"name":"bool","nodeType":"ElementaryTypeName","src":"1813:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1812:6:4"},"scope":1094,"src":"1745:74:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1064,"nodeType":"StructuredDocumentation","src":"1825:296:4","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":1075,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1066,"mutability":"mutable","name":"sender","nodeType":"VariableDeclaration","scope":1075,"src":"2148:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1065,"name":"address","nodeType":"ElementaryTypeName","src":"2148:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1068,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":1075,"src":"2164:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1067,"name":"address","nodeType":"ElementaryTypeName","src":"2164:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":1075,"src":"2183:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1069,"name":"uint256","nodeType":"ElementaryTypeName","src":"2183:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2147:51:4"},"returnParameters":{"id":1074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1073,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1075,"src":"2217:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1072,"name":"bool","nodeType":"ElementaryTypeName","src":"2217:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2216:6:4"},"scope":1094,"src":"2126:97:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":1076,"nodeType":"StructuredDocumentation","src":"2229:158:4","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"id":1084,"name":"Transfer","nodeType":"EventDefinition","parameters":{"id":1083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"indexed":true,"mutability":"mutable","name":"from","nodeType":"VariableDeclaration","scope":1084,"src":"2407:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1077,"name":"address","nodeType":"ElementaryTypeName","src":"2407:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1080,"indexed":true,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":1084,"src":"2429:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1079,"name":"address","nodeType":"ElementaryTypeName","src":"2429:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1082,"indexed":false,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1084,"src":"2449:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1081,"name":"uint256","nodeType":"ElementaryTypeName","src":"2449:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2406:57:4"},"src":"2392:72:4"},{"anonymous":false,"documentation":{"id":1085,"nodeType":"StructuredDocumentation","src":"2470:148:4","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":1093,"name":"Approval","nodeType":"EventDefinition","parameters":{"id":1092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1087,"indexed":true,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":1093,"src":"2638:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1086,"name":"address","nodeType":"ElementaryTypeName","src":"2638:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1089,"indexed":true,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":1093,"src":"2661:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1088,"name":"address","nodeType":"ElementaryTypeName","src":"2661:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1091,"indexed":false,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1093,"src":"2686:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1090,"name":"uint256","nodeType":"ElementaryTypeName","src":"2686:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2637:63:4"},"src":"2623:78:4"}],"scope":1095,"src":"137:2566:4"}],"src":"33:2671:4"},"id":4},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[1390]},"id":1391,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1096,"literals":["solidity",">=","0.6",".2","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:5"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":1097,"nodeType":"StructuredDocumentation","src":"66:67:5","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":1390,"linearizedBaseContracts":[1390],"name":"Address","nodeType":"ContractDefinition","nodes":[{"body":{"id":1113,"nodeType":"Block","src":"792:347:5","statements":[{"assignments":[1106],"declarations":[{"constant":false,"id":1106,"mutability":"mutable","name":"size","nodeType":"VariableDeclaration","scope":1113,"src":"989:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1105,"name":"uint256","nodeType":"ElementaryTypeName","src":"989:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1107,"nodeType":"VariableDeclarationStatement","src":"989:12:5"},{"AST":{"nodeType":"YulBlock","src":"1076:32:5","statements":[{"nodeType":"YulAssignment","src":"1078:28:5","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"1098:7:5"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"1086:11:5"},"nodeType":"YulFunctionCall","src":"1086:20:5"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1078:4:5"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":1100,"isOffset":false,"isSlot":false,"src":"1098:7:5","valueSize":1},{"declaration":1106,"isOffset":false,"isSlot":false,"src":"1078:4:5","valueSize":1}],"id":1108,"nodeType":"InlineAssembly","src":"1067:41:5"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1109,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1106,"src":"1124:4:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1131:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1124:8:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1104,"id":1112,"nodeType":"Return","src":"1117:15:5"}]},"documentation":{"id":1098,"nodeType":"StructuredDocumentation","src":"156:565:5","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":1114,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nodeType":"FunctionDefinition","parameters":{"id":1101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1100,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":1114,"src":"746:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1099,"name":"address","nodeType":"ElementaryTypeName","src":"746:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"745:17:5"},"returnParameters":{"id":1104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1103,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1114,"src":"786:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1102,"name":"bool","nodeType":"ElementaryTypeName","src":"786:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"785:6:5"},"scope":1390,"src":"726:413:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1147,"nodeType":"Block","src":"2127:320:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":1125,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2153:4:5","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$1390","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$1390","typeString":"library Address"}],"id":1124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2145:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1123,"name":"address","nodeType":"ElementaryTypeName","src":"2145:7:5","typeDescriptions":{}}},"id":1126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2145:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"2145:21:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1128,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1119,"src":"2170:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2145:31:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":1130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2178:31:5","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":1122,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2137:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2137:73:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1132,"nodeType":"ExpressionStatement","src":"2137:73:5"},{"assignments":[1134,null],"declarations":[{"constant":false,"id":1134,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":1147,"src":"2299:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1133,"name":"bool","nodeType":"ElementaryTypeName","src":"2299:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":1141,"initialValue":{"arguments":[{"hexValue":"","id":1139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2349:2:5","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":1135,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1117,"src":"2317:9:5","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":1136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"2317:14:5","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":1138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":1137,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1119,"src":"2340:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2317:31:5","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":1140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2317:35:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2298:54:5"},{"expression":{"arguments":[{"id":1143,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1134,"src":"2370:7:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":1144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2379:60:5","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":1142,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2362:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2362:78:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1146,"nodeType":"ExpressionStatement","src":"2362:78:5"}]},"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"1145:906:5","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":1148,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nodeType":"FunctionDefinition","parameters":{"id":1120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1117,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":1148,"src":"2075:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1116,"name":"address","nodeType":"ElementaryTypeName","src":"2075:15:5","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1119,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":1148,"src":"2102:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1118,"name":"uint256","nodeType":"ElementaryTypeName","src":"2102:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2074:43:5"},"returnParameters":{"id":1121,"nodeType":"ParameterList","parameters":[],"src":"2127:0:5"},"scope":1390,"src":"2056:391:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1164,"nodeType":"Block","src":"3277:82:5","statements":[{"expression":{"arguments":[{"id":1159,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1151,"src":"3305:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1160,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1153,"src":"3313:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":1161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3319:32:5","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":1158,"name":"functionCall","nodeType":"Identifier","overloadedDeclarations":[1165,1185],"referencedDeclaration":1185,"src":"3292:12:5","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":1162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3292:60:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1157,"id":1163,"nodeType":"Return","src":"3285:67:5"}]},"documentation":{"id":1149,"nodeType":"StructuredDocumentation","src":"2453:730:5","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":1165,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nodeType":"FunctionDefinition","parameters":{"id":1154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1151,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1165,"src":"3210:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1150,"name":"address","nodeType":"ElementaryTypeName","src":"3210:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1153,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1165,"src":"3226:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1152,"name":"bytes","nodeType":"ElementaryTypeName","src":"3226:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3209:35:5"},"returnParameters":{"id":1157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1156,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1165,"src":"3263:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1155,"name":"bytes","nodeType":"ElementaryTypeName","src":"3263:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3262:14:5"},"scope":1390,"src":"3188:171:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1184,"nodeType":"Block","src":"3698:76:5","statements":[{"expression":{"arguments":[{"id":1178,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1168,"src":"3737:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1179,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1170,"src":"3745:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":1180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3751:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":1181,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"3754:12:5","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":1177,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[1205,1255],"referencedDeclaration":1255,"src":"3715:21:5","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":1182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3715:52:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1176,"id":1183,"nodeType":"Return","src":"3708:59:5"}]},"documentation":{"id":1166,"nodeType":"StructuredDocumentation","src":"3365:211:5","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":1185,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nodeType":"FunctionDefinition","parameters":{"id":1173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1185,"src":"3603:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1167,"name":"address","nodeType":"ElementaryTypeName","src":"3603:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1170,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1185,"src":"3619:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1169,"name":"bytes","nodeType":"ElementaryTypeName","src":"3619:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1172,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1185,"src":"3638:26:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1171,"name":"string","nodeType":"ElementaryTypeName","src":"3638:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3602:63:5"},"returnParameters":{"id":1176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1175,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1185,"src":"3684:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1174,"name":"bytes","nodeType":"ElementaryTypeName","src":"3684:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3683:14:5"},"scope":1390,"src":"3581:193:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1204,"nodeType":"Block","src":"4249:111:5","statements":[{"expression":{"arguments":[{"id":1198,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1188,"src":"4288:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1199,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"4296:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1200,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1192,"src":"4302:5:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":1201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4309:43:5","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":1197,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[1205,1255],"referencedDeclaration":1255,"src":"4266:21:5","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":1202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4266:87:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1196,"id":1203,"nodeType":"Return","src":"4259:94:5"}]},"documentation":{"id":1186,"nodeType":"StructuredDocumentation","src":"3780:351:5","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":1205,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nodeType":"FunctionDefinition","parameters":{"id":1193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1188,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1205,"src":"4167:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1187,"name":"address","nodeType":"ElementaryTypeName","src":"4167:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1190,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1205,"src":"4183:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1189,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1192,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1205,"src":"4202:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1191,"name":"uint256","nodeType":"ElementaryTypeName","src":"4202:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4166:50:5"},"returnParameters":{"id":1196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1195,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1205,"src":"4235:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1194,"name":"bytes","nodeType":"ElementaryTypeName","src":"4235:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4234:14:5"},"scope":1390,"src":"4136:224:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1254,"nodeType":"Block","src":"4749:382:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":1222,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4775:4:5","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$1390","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$1390","typeString":"library Address"}],"id":1221,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4767:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1220,"name":"address","nodeType":"ElementaryTypeName","src":"4767:7:5","typeDescriptions":{}}},"id":1223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4767:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"4767:21:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1225,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1212,"src":"4792:5:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4767:30:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":1227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4799:40:5","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":1219,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4759:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4759:81:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1229,"nodeType":"ExpressionStatement","src":"4759:81:5"},{"expression":{"arguments":[{"arguments":[{"id":1232,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1208,"src":"4869:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1231,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"4858:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4858:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":1234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4878:31:5","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":1230,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4850:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4850:60:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1236,"nodeType":"ExpressionStatement","src":"4850:60:5"},{"assignments":[1238,1240],"declarations":[{"constant":false,"id":1238,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":1254,"src":"4981:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1237,"name":"bool","nodeType":"ElementaryTypeName","src":"4981:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1240,"mutability":"mutable","name":"returndata","nodeType":"VariableDeclaration","scope":1254,"src":"4995:23:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1239,"name":"bytes","nodeType":"ElementaryTypeName","src":"4995:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1247,"initialValue":{"arguments":[{"id":1245,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1210,"src":"5050:4:5","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":1241,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1208,"src":"5022:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"5022:11:5","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":1244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":1243,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1212,"src":"5042:5:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5022:27:5","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":1246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5022:33:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4980:75:5"},{"expression":{"arguments":[{"id":1249,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1238,"src":"5090:7:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1250,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1240,"src":"5099:10:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1251,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"5111:12:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1248,"name":"_verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1389,"src":"5072:17:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":1252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5072:52:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1218,"id":1253,"nodeType":"Return","src":"5065:59:5"}]},"documentation":{"id":1206,"nodeType":"StructuredDocumentation","src":"4366:237:5","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":1255,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nodeType":"FunctionDefinition","parameters":{"id":1215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1208,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1255,"src":"4639:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1207,"name":"address","nodeType":"ElementaryTypeName","src":"4639:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1210,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1255,"src":"4655:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1209,"name":"bytes","nodeType":"ElementaryTypeName","src":"4655:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1212,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1255,"src":"4674:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1211,"name":"uint256","nodeType":"ElementaryTypeName","src":"4674:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1214,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1255,"src":"4689:26:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1213,"name":"string","nodeType":"ElementaryTypeName","src":"4689:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4638:78:5"},"returnParameters":{"id":1218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1217,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1255,"src":"4735:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1216,"name":"bytes","nodeType":"ElementaryTypeName","src":"4735:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4734:14:5"},"scope":1390,"src":"4608:523:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1271,"nodeType":"Block","src":"5408:97:5","statements":[{"expression":{"arguments":[{"id":1266,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1258,"src":"5444:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1267,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1260,"src":"5452:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":1268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5458:39:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":1265,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[1272,1307],"referencedDeclaration":1307,"src":"5425:18:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":1269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5425:73:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1264,"id":1270,"nodeType":"Return","src":"5418:80:5"}]},"documentation":{"id":1256,"nodeType":"StructuredDocumentation","src":"5137:166:5","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":1272,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nodeType":"FunctionDefinition","parameters":{"id":1261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1258,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1272,"src":"5336:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1257,"name":"address","nodeType":"ElementaryTypeName","src":"5336:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1260,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1272,"src":"5352:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1259,"name":"bytes","nodeType":"ElementaryTypeName","src":"5352:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5335:35:5"},"returnParameters":{"id":1264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1263,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1272,"src":"5394:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1262,"name":"bytes","nodeType":"ElementaryTypeName","src":"5394:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5393:14:5"},"scope":1390,"src":"5308:197:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1306,"nodeType":"Block","src":"5817:288:5","statements":[{"expression":{"arguments":[{"arguments":[{"id":1286,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"5846:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1285,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"5835:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5835:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374","id":1288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5855:38:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""},"value":"Address: static call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""}],"id":1284,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5827:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5827:67:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1290,"nodeType":"ExpressionStatement","src":"5827:67:5"},{"assignments":[1292,1294],"declarations":[{"constant":false,"id":1292,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":1306,"src":"5965:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1291,"name":"bool","nodeType":"ElementaryTypeName","src":"5965:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1294,"mutability":"mutable","name":"returndata","nodeType":"VariableDeclaration","scope":1306,"src":"5979:23:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1293,"name":"bytes","nodeType":"ElementaryTypeName","src":"5979:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1299,"initialValue":{"arguments":[{"id":1297,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1277,"src":"6024:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1295,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"6006:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"staticcall","nodeType":"MemberAccess","src":"6006:17:5","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":1298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6006:23:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5964:65:5"},{"expression":{"arguments":[{"id":1301,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1292,"src":"6064:7:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1302,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1294,"src":"6073:10:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1303,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1279,"src":"6085:12:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1300,"name":"_verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1389,"src":"6046:17:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":1304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6046:52:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1283,"id":1305,"nodeType":"Return","src":"6039:59:5"}]},"documentation":{"id":1273,"nodeType":"StructuredDocumentation","src":"5511:173:5","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":1307,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nodeType":"FunctionDefinition","parameters":{"id":1280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1275,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1307,"src":"5717:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1274,"name":"address","nodeType":"ElementaryTypeName","src":"5717:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1277,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1307,"src":"5733:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1276,"name":"bytes","nodeType":"ElementaryTypeName","src":"5733:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1279,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1307,"src":"5752:26:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1278,"name":"string","nodeType":"ElementaryTypeName","src":"5752:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5716:63:5"},"returnParameters":{"id":1283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1282,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1307,"src":"5803:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1281,"name":"bytes","nodeType":"ElementaryTypeName","src":"5803:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5802:14:5"},"scope":1390,"src":"5689:416:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1323,"nodeType":"Block","src":"6381:101:5","statements":[{"expression":{"arguments":[{"id":1318,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1310,"src":"6419:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1319,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"6427:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":1320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6433:41:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":1317,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[1324,1359],"referencedDeclaration":1359,"src":"6398:20:5","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":1321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6398:77:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1316,"id":1322,"nodeType":"Return","src":"6391:84:5"}]},"documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"6111:168:5","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":1324,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nodeType":"FunctionDefinition","parameters":{"id":1313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1310,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1324,"src":"6314:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1309,"name":"address","nodeType":"ElementaryTypeName","src":"6314:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1312,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1324,"src":"6330:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1311,"name":"bytes","nodeType":"ElementaryTypeName","src":"6330:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6313:35:5"},"returnParameters":{"id":1316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1324,"src":"6367:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1314,"name":"bytes","nodeType":"ElementaryTypeName","src":"6367:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6366:14:5"},"scope":1390,"src":"6284:198:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1358,"nodeType":"Block","src":"6793:292:5","statements":[{"expression":{"arguments":[{"arguments":[{"id":1338,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1327,"src":"6822:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1337,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"6811:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6811:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374","id":1340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6831:40:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""},"value":"Address: delegate call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""}],"id":1336,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6803:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6803:69:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1342,"nodeType":"ExpressionStatement","src":"6803:69:5"},{"assignments":[1344,1346],"declarations":[{"constant":false,"id":1344,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":1358,"src":"6943:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1343,"name":"bool","nodeType":"ElementaryTypeName","src":"6943:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1346,"mutability":"mutable","name":"returndata","nodeType":"VariableDeclaration","scope":1358,"src":"6957:23:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1345,"name":"bytes","nodeType":"ElementaryTypeName","src":"6957:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1351,"initialValue":{"arguments":[{"id":1349,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1329,"src":"7004:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1347,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1327,"src":"6984:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"6984:19:5","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":1350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6984:25:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6942:67:5"},{"expression":{"arguments":[{"id":1353,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1344,"src":"7044:7:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1354,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"7053:10:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1355,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"7065:12:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1352,"name":"_verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1389,"src":"7026:17:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":1356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7026:52:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1335,"id":1357,"nodeType":"Return","src":"7019:59:5"}]},"documentation":{"id":1325,"nodeType":"StructuredDocumentation","src":"6488:175:5","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":1359,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nodeType":"FunctionDefinition","parameters":{"id":1332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1327,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":1359,"src":"6698:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1326,"name":"address","nodeType":"ElementaryTypeName","src":"6698:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1329,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1359,"src":"6714:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1328,"name":"bytes","nodeType":"ElementaryTypeName","src":"6714:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1331,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1359,"src":"6733:26:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1330,"name":"string","nodeType":"ElementaryTypeName","src":"6733:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6697:63:5"},"returnParameters":{"id":1335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1334,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1359,"src":"6779:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1333,"name":"bytes","nodeType":"ElementaryTypeName","src":"6779:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6778:14:5"},"scope":1390,"src":"6668:417:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1388,"nodeType":"Block","src":"7220:596:5","statements":[{"condition":{"id":1370,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"7234:7:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1386,"nodeType":"Block","src":"7291:519:5","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1374,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1363,"src":"7375:10:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7375:17:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7395:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7375:21:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1384,"nodeType":"Block","src":"7747:53:5","statements":[{"expression":{"arguments":[{"id":1381,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1365,"src":"7772:12:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1380,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"7765:6:5","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":1382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7765:20:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1383,"nodeType":"ExpressionStatement","src":"7765:20:5"}]},"id":1385,"nodeType":"IfStatement","src":"7371:429:5","trueBody":{"id":1379,"nodeType":"Block","src":"7398:343:5","statements":[{"AST":{"nodeType":"YulBlock","src":"7582:145:5","statements":[{"nodeType":"YulVariableDeclaration","src":"7604:40:5","value":{"arguments":[{"name":"returndata","nodeType":"YulIdentifier","src":"7633:10:5"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7627:5:5"},"nodeType":"YulFunctionCall","src":"7627:17:5"},"variables":[{"name":"returndata_size","nodeType":"YulTypedName","src":"7608:15:5","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7676:2:5","type":"","value":"32"},{"name":"returndata","nodeType":"YulIdentifier","src":"7680:10:5"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7672:3:5"},"nodeType":"YulFunctionCall","src":"7672:19:5"},{"name":"returndata_size","nodeType":"YulIdentifier","src":"7693:15:5"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7665:6:5"},"nodeType":"YulFunctionCall","src":"7665:44:5"},"nodeType":"YulExpressionStatement","src":"7665:44:5"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":1363,"isOffset":false,"isSlot":false,"src":"7633:10:5","valueSize":1},{"declaration":1363,"isOffset":false,"isSlot":false,"src":"7680:10:5","valueSize":1}],"id":1378,"nodeType":"InlineAssembly","src":"7573:154:5"}]}}]},"id":1387,"nodeType":"IfStatement","src":"7230:580:5","trueBody":{"id":1373,"nodeType":"Block","src":"7243:42:5","statements":[{"expression":{"id":1371,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1363,"src":"7264:10:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1369,"id":1372,"nodeType":"Return","src":"7257:17:5"}]}}]},"id":1389,"implemented":true,"kind":"function","modifiers":[],"name":"_verifyCallResult","nodeType":"FunctionDefinition","parameters":{"id":1366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1361,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":1389,"src":"7118:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1360,"name":"bool","nodeType":"ElementaryTypeName","src":"7118:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1363,"mutability":"mutable","name":"returndata","nodeType":"VariableDeclaration","scope":1389,"src":"7132:23:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1362,"name":"bytes","nodeType":"ElementaryTypeName","src":"7132:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1365,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1389,"src":"7157:26:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1364,"name":"string","nodeType":"ElementaryTypeName","src":"7157:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7117:67:5"},"returnParameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1368,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1389,"src":"7206:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1367,"name":"bytes","nodeType":"ElementaryTypeName","src":"7206:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7205:14:5"},"scope":1390,"src":"7091:725:5","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":1391,"src":"134:7684:5"}],"src":"33:7786:5"},"id":5},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[1413]},"id":1414,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1392,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:6"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":1413,"linearizedBaseContracts":[1413],"name":"Context","nodeType":"ContractDefinition","nodes":[{"body":{"id":1400,"nodeType":"Block","src":"668:34:6","statements":[{"expression":{"expression":{"id":1397,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"685:3:6","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"685:10:6","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":1396,"id":1399,"nodeType":"Return","src":"678:17:6"}]},"id":1401,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nodeType":"FunctionDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[],"src":"617:2:6"},"returnParameters":{"id":1396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1395,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1401,"src":"651:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1394,"name":"address","nodeType":"ElementaryTypeName","src":"651:15:6","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"650:17:6"},"scope":1413,"src":"598:104:6","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":1411,"nodeType":"Block","src":"773:165:6","statements":[{"expression":{"id":1406,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"783:4:6","typeDescriptions":{"typeIdentifier":"t_contract$_Context_$1413","typeString":"contract Context"}},"id":1407,"nodeType":"ExpressionStatement","src":"783:4:6"},{"expression":{"expression":{"id":1408,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"923:3:6","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","src":"923:8:6","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":1405,"id":1410,"nodeType":"Return","src":"916:15:6"}]},"id":1412,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nodeType":"FunctionDefinition","parameters":{"id":1402,"nodeType":"ParameterList","parameters":[],"src":"725:2:6"},"returnParameters":{"id":1405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1404,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1412,"src":"759:12:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1403,"name":"bytes","nodeType":"ElementaryTypeName","src":"759:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"758:14:6"},"scope":1413,"src":"708:230:6","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":1414,"src":"566:374:6"}],"src":"33:908:6"},"id":6},"contracts/Safe.sol":{"ast":{"absolutePath":"contracts/Safe.sol","exportedSymbols":{"BaseGuard":[2711],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OwnerManager":[3710],"Safe":[2325],"SafeMath":[4501],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867]},"id":2326,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":1415,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:7"},{"absolutePath":"contracts/base/ModuleManager.sol","file":"./base/ModuleManager.sol","id":1416,"nodeType":"ImportDirective","scope":2326,"sourceUnit":3198,"src":"75:34:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/OwnerManager.sol","file":"./base/OwnerManager.sol","id":1417,"nodeType":"ImportDirective","scope":2326,"sourceUnit":3711,"src":"110:33:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/FallbackManager.sol","file":"./base/FallbackManager.sol","id":1418,"nodeType":"ImportDirective","scope":2326,"sourceUnit":2646,"src":"144:36:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/GuardManager.sol","file":"./base/GuardManager.sol","id":1419,"nodeType":"ImportDirective","scope":2326,"sourceUnit":2774,"src":"181:33:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/common/NativeCurrencyPaymentFallback.sol","file":"./common/NativeCurrencyPaymentFallback.sol","id":1420,"nodeType":"ImportDirective","scope":2326,"sourceUnit":3740,"src":"215:52:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/common/Singleton.sol","file":"./common/Singleton.sol","id":1421,"nodeType":"ImportDirective","scope":2326,"sourceUnit":3819,"src":"268:32:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/common/SignatureDecoder.sol","file":"./common/SignatureDecoder.sol","id":1422,"nodeType":"ImportDirective","scope":2326,"sourceUnit":3813,"src":"301:39:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/common/SecuredTokenTransfer.sol","file":"./common/SecuredTokenTransfer.sol","id":1423,"nodeType":"ImportDirective","scope":2326,"sourceUnit":3767,"src":"341:43:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/common/StorageAccessible.sol","file":"./common/StorageAccessible.sol","id":1424,"nodeType":"ImportDirective","scope":2326,"sourceUnit":3868,"src":"385:40:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/interfaces/ISignatureValidator.sol","file":"./interfaces/ISignatureValidator.sol","id":1425,"nodeType":"ImportDirective","scope":2326,"sourceUnit":5012,"src":"426:46:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/external/SafeMath.sol","file":"./external/SafeMath.sol","id":1426,"nodeType":"ImportDirective","scope":2326,"sourceUnit":4502,"src":"473:33:7","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1428,"name":"Singleton","nodeType":"UserDefinedTypeName","referencedDeclaration":3818,"src":"1940:9:7","typeDescriptions":{"typeIdentifier":"t_contract$_Singleton_$3818","typeString":"contract Singleton"}},"id":1429,"nodeType":"InheritanceSpecifier","src":"1940:9:7"},{"baseName":{"id":1430,"name":"NativeCurrencyPaymentFallback","nodeType":"UserDefinedTypeName","referencedDeclaration":3739,"src":"1955:29:7","typeDescriptions":{"typeIdentifier":"t_contract$_NativeCurrencyPaymentFallback_$3739","typeString":"contract NativeCurrencyPaymentFallback"}},"id":1431,"nodeType":"InheritanceSpecifier","src":"1955:29:7"},{"baseName":{"id":1432,"name":"ModuleManager","nodeType":"UserDefinedTypeName","referencedDeclaration":3197,"src":"1990:13:7","typeDescriptions":{"typeIdentifier":"t_contract$_ModuleManager_$3197","typeString":"contract ModuleManager"}},"id":1433,"nodeType":"InheritanceSpecifier","src":"1990:13:7"},{"baseName":{"id":1434,"name":"OwnerManager","nodeType":"UserDefinedTypeName","referencedDeclaration":3710,"src":"2009:12:7","typeDescriptions":{"typeIdentifier":"t_contract$_OwnerManager_$3710","typeString":"contract OwnerManager"}},"id":1435,"nodeType":"InheritanceSpecifier","src":"2009:12:7"},{"baseName":{"id":1436,"name":"SignatureDecoder","nodeType":"UserDefinedTypeName","referencedDeclaration":3812,"src":"2027:16:7","typeDescriptions":{"typeIdentifier":"t_contract$_SignatureDecoder_$3812","typeString":"contract SignatureDecoder"}},"id":1437,"nodeType":"InheritanceSpecifier","src":"2027:16:7"},{"baseName":{"id":1438,"name":"SecuredTokenTransfer","nodeType":"UserDefinedTypeName","referencedDeclaration":3766,"src":"2049:20:7","typeDescriptions":{"typeIdentifier":"t_contract$_SecuredTokenTransfer_$3766","typeString":"contract SecuredTokenTransfer"}},"id":1439,"nodeType":"InheritanceSpecifier","src":"2049:20:7"},{"baseName":{"id":1440,"name":"ISignatureValidatorConstants","nodeType":"UserDefinedTypeName","referencedDeclaration":4998,"src":"2075:28:7","typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidatorConstants_$4998","typeString":"contract ISignatureValidatorConstants"}},"id":1441,"nodeType":"InheritanceSpecifier","src":"2075:28:7"},{"baseName":{"id":1442,"name":"FallbackManager","nodeType":"UserDefinedTypeName","referencedDeclaration":2645,"src":"2109:15:7","typeDescriptions":{"typeIdentifier":"t_contract$_FallbackManager_$2645","typeString":"contract FallbackManager"}},"id":1443,"nodeType":"InheritanceSpecifier","src":"2109:15:7"},{"baseName":{"id":1444,"name":"StorageAccessible","nodeType":"UserDefinedTypeName","referencedDeclaration":3867,"src":"2130:17:7","typeDescriptions":{"typeIdentifier":"t_contract$_StorageAccessible_$3867","typeString":"contract StorageAccessible"}},"id":1445,"nodeType":"InheritanceSpecifier","src":"2130:17:7"},{"baseName":{"id":1446,"name":"GuardManager","nodeType":"UserDefinedTypeName","referencedDeclaration":2773,"src":"2153:12:7","typeDescriptions":{"typeIdentifier":"t_contract$_GuardManager_$2773","typeString":"contract GuardManager"}},"id":1447,"nodeType":"InheritanceSpecifier","src":"2153:12:7"}],"contractDependencies":[2583,2645,2773,3197,3710,3739,3766,3792,3812,3818,3867,4998],"contractKind":"contract","documentation":{"id":1427,"nodeType":"StructuredDocumentation","src":"508:1410:7","text":" @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\n @dev Most important concepts:\n      - Threshold: Number of required confirmations for a Safe transaction.\n      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\n        approve transactions. Managed in `OwnerManager`.\n      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\n      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\n      - Signature: A valid signature of an owner of the Safe for a transaction hash.\n      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\n      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\n      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\n      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\n      For the events-based implementation see `SafeL2.sol`.\n @author Stefan George - @Georgi87\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":2325,"linearizedBaseContracts":[2325,2773,3867,2645,4998,3766,3812,3710,3197,2583,3792,3739,3818],"name":"Safe","nodeType":"ContractDefinition","nodes":[{"id":1450,"libraryName":{"id":1448,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":4501,"src":"2178:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$4501","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"2172:27:7","typeName":{"id":1449,"name":"uint256","nodeType":"ElementaryTypeName","src":"2191:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"functionSelector":"ffa1ad74","id":1453,"mutability":"constant","name":"VERSION","nodeType":"VariableDeclaration","scope":2325,"src":"2205:40:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1451,"name":"string","nodeType":"ElementaryTypeName","src":"2205:6:7","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e342e31","id":1452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2238:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_7015c1a48403d132ad83884b326109f1b309c42f752b2abd1db79522ee074673","typeString":"literal_string \"1.4.1\""},"value":"1.4.1"},"visibility":"public"},{"constant":true,"id":1456,"mutability":"constant","name":"DOMAIN_SEPARATOR_TYPEHASH","nodeType":"VariableDeclaration","scope":2325,"src":"2349:119:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1454,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2349:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307834376537393533346132343539353265386231363839336133333662383561336439656139666138633537336633643830336166623932613739343639323138","id":1455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2402:66:7","typeDescriptions":{"typeIdentifier":"t_rational_32523383700587834770323112271211932718128200013265661849047136999858837557784_by_1","typeString":"int_const 3252...(69 digits omitted)...7784"},"value":"0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218"},"visibility":"private"},{"constant":true,"id":1459,"mutability":"constant","name":"SAFE_TX_TYPEHASH","nodeType":"VariableDeclaration","scope":2325,"src":"2681:110:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1457,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2681:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862623833313064343836333638646236626436663834393430326664643733616435336433313662356134623236343461643665666530663934313238366438","id":1458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2725:66:7","typeDescriptions":{"typeIdentifier":"t_rational_84814075808141314178395468817534025465894426928601295766380145544921651250904_by_1","typeString":"int_const 8481...(69 digits omitted)...0904"},"value":"0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8"},"visibility":"private"},{"anonymous":false,"id":1472,"name":"SafeSetup","nodeType":"EventDefinition","parameters":{"id":1471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1461,"indexed":true,"mutability":"mutable","name":"initiator","nodeType":"VariableDeclaration","scope":1472,"src":"2814:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1460,"name":"address","nodeType":"ElementaryTypeName","src":"2814:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1464,"indexed":false,"mutability":"mutable","name":"owners","nodeType":"VariableDeclaration","scope":1472,"src":"2841:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1462,"name":"address","nodeType":"ElementaryTypeName","src":"2841:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1463,"nodeType":"ArrayTypeName","src":"2841:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1466,"indexed":false,"mutability":"mutable","name":"threshold","nodeType":"VariableDeclaration","scope":1472,"src":"2859:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1465,"name":"uint256","nodeType":"ElementaryTypeName","src":"2859:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1468,"indexed":false,"mutability":"mutable","name":"initializer","nodeType":"VariableDeclaration","scope":1472,"src":"2878:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1467,"name":"address","nodeType":"ElementaryTypeName","src":"2878:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1470,"indexed":false,"mutability":"mutable","name":"fallbackHandler","nodeType":"VariableDeclaration","scope":1472,"src":"2899:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1469,"name":"address","nodeType":"ElementaryTypeName","src":"2899:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2813:110:7"},"src":"2798:126:7"},{"anonymous":false,"id":1478,"name":"ApproveHash","nodeType":"EventDefinition","parameters":{"id":1477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1474,"indexed":true,"mutability":"mutable","name":"approvedHash","nodeType":"VariableDeclaration","scope":1478,"src":"2947:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1473,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2947:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1476,"indexed":true,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":1478,"src":"2977:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1475,"name":"address","nodeType":"ElementaryTypeName","src":"2977:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2946:53:7"},"src":"2929:71:7"},{"anonymous":false,"id":1482,"name":"SignMsg","nodeType":"EventDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"indexed":true,"mutability":"mutable","name":"msgHash","nodeType":"VariableDeclaration","scope":1482,"src":"3019:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1479,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3019:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3018:25:7"},"src":"3005:39:7"},{"anonymous":false,"id":1488,"name":"ExecutionFailure","nodeType":"EventDefinition","parameters":{"id":1487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1484,"indexed":true,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":1488,"src":"3072:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1483,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3072:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1486,"indexed":false,"mutability":"mutable","name":"payment","nodeType":"VariableDeclaration","scope":1488,"src":"3096:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1485,"name":"uint256","nodeType":"ElementaryTypeName","src":"3096:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3071:41:7"},"src":"3049:64:7"},{"anonymous":false,"id":1494,"name":"ExecutionSuccess","nodeType":"EventDefinition","parameters":{"id":1493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1490,"indexed":true,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":1494,"src":"3141:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1489,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3141:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1492,"indexed":false,"mutability":"mutable","name":"payment","nodeType":"VariableDeclaration","scope":1494,"src":"3165:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1491,"name":"uint256","nodeType":"ElementaryTypeName","src":"3165:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3140:41:7"},"src":"3118:64:7"},{"constant":false,"functionSelector":"affed0e0","id":1496,"mutability":"mutable","name":"nonce","nodeType":"VariableDeclaration","scope":2325,"src":"3188:20:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1495,"name":"uint256","nodeType":"ElementaryTypeName","src":"3188:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"id":1498,"mutability":"mutable","name":"_deprecatedDomainSeparator","nodeType":"VariableDeclaration","scope":2325,"src":"3214:42:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1497,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3214:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"functionSelector":"5ae6bd37","id":1502,"mutability":"mutable","name":"signedMessages","nodeType":"VariableDeclaration","scope":2325,"src":"3360:49:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":1501,"keyType":{"id":1499,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3368:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"3360:27:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":1500,"name":"uint256","nodeType":"ElementaryTypeName","src":"3379:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"functionSelector":"7d832974","id":1508,"mutability":"mutable","name":"approvedHashes","nodeType":"VariableDeclaration","scope":2325,"src":"3521:69:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(address => mapping(bytes32 => uint256))"},"typeName":{"id":1507,"keyType":{"id":1503,"name":"address","nodeType":"ElementaryTypeName","src":"3529:7:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3521:47:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(address => mapping(bytes32 => uint256))"},"valueType":{"id":1506,"keyType":{"id":1504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3548:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"3540:27:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":1505,"name":"uint256","nodeType":"ElementaryTypeName","src":"3559:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"body":{"id":1515,"nodeType":"Block","src":"3714:257:7","statements":[{"expression":{"id":1513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1511,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"3951:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":1512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3963:1:7","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3951:13:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1514,"nodeType":"ExpressionStatement","src":"3951:13:7"}]},"id":1516,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":1509,"nodeType":"ParameterList","parameters":[],"src":"3711:2:7"},"returnParameters":{"id":1510,"nodeType":"ParameterList","parameters":[],"src":"3714:0:7"},"scope":2325,"src":"3700:271:7","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1580,"nodeType":"Block","src":"5012:879:7","statements":[{"expression":{"arguments":[{"id":1538,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1520,"src":"5151:7:7","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":1539,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1522,"src":"5160:10:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1537,"name":"setupOwners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3346,"src":"5139:11:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (address[] memory,uint256)"}},"id":1540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5139:32:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1541,"nodeType":"ExpressionStatement","src":"5139:32:7"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1542,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1528,"src":"5185:15:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5212:1:7","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":1544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5204:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1543,"name":"address","nodeType":"ElementaryTypeName","src":"5204:7:7","typeDescriptions":{}}},"id":1546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5204:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"5185:29:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1552,"nodeType":"IfStatement","src":"5181:78:7","trueBody":{"expression":{"arguments":[{"id":1549,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1528,"src":"5243:15:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1548,"name":"internalSetFallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2618,"src":"5216:26:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5216:43:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1551,"nodeType":"ExpressionStatement","src":"5216:43:7"}},{"expression":{"arguments":[{"id":1554,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1524,"src":"5407:2:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1555,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1526,"src":"5411:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":1553,"name":"setupModules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"5394:12:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":1556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5394:22:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1557,"nodeType":"ExpressionStatement","src":"5394:22:7"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1558,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1532,"src":"5431:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5441:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5431:11:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1570,"nodeType":"IfStatement","src":"5427:380:7","trueBody":{"id":1569,"nodeType":"Block","src":"5444:363:7","statements":[{"expression":{"arguments":[{"id":1562,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1532,"src":"5751:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":1563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5760:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31","id":1564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5763:1:7","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"id":1565,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1530,"src":"5766:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1566,"name":"paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1534,"src":"5780:15:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":1561,"name":"handlePayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1875,"src":"5737:13:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_payable_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,address,address payable) returns (uint256)"}},"id":1567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5737:59:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1568,"nodeType":"ExpressionStatement","src":"5737:59:7"}]}},{"eventCall":{"arguments":[{"expression":{"id":1572,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5831:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5831:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1574,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1520,"src":"5843:7:7","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":1575,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1522,"src":"5852:10:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1576,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1524,"src":"5864:2:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1577,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1528,"src":"5868:15:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1571,"name":"SafeSetup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"5821:9:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address[] memory,uint256,address,address)"}},"id":1578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5821:63:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1579,"nodeType":"EmitStatement","src":"5816:68:7"}]},"documentation":{"id":1517,"nodeType":"StructuredDocumentation","src":"3977:758:7","text":" @notice Sets an initial storage of the Safe contract.\n @dev This method can only be called once.\n      If a proxy was created without setting up, anyone can call setup and claim the proxy.\n @param _owners List of Safe owners.\n @param _threshold Number of required confirmations for a Safe transaction.\n @param to Contract address for optional delegate call.\n @param data Data payload for optional delegate call.\n @param fallbackHandler Handler for fallback calls to this contract\n @param paymentToken Token that should be used for the payment (0 is ETH)\n @param payment Value that should be paid\n @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)"},"functionSelector":"b63e800d","id":1581,"implemented":true,"kind":"function","modifiers":[],"name":"setup","nodeType":"FunctionDefinition","parameters":{"id":1535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1520,"mutability":"mutable","name":"_owners","nodeType":"VariableDeclaration","scope":1581,"src":"4764:26:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1518,"name":"address","nodeType":"ElementaryTypeName","src":"4764:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1519,"nodeType":"ArrayTypeName","src":"4764:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1522,"mutability":"mutable","name":"_threshold","nodeType":"VariableDeclaration","scope":1581,"src":"4800:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1521,"name":"uint256","nodeType":"ElementaryTypeName","src":"4800:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1524,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":1581,"src":"4828:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1523,"name":"address","nodeType":"ElementaryTypeName","src":"4828:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1526,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1581,"src":"4848:19:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1525,"name":"bytes","nodeType":"ElementaryTypeName","src":"4848:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1528,"mutability":"mutable","name":"fallbackHandler","nodeType":"VariableDeclaration","scope":1581,"src":"4877:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1527,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1530,"mutability":"mutable","name":"paymentToken","nodeType":"VariableDeclaration","scope":1581,"src":"4910:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1529,"name":"address","nodeType":"ElementaryTypeName","src":"4910:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1532,"mutability":"mutable","name":"payment","nodeType":"VariableDeclaration","scope":1581,"src":"4940:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1531,"name":"uint256","nodeType":"ElementaryTypeName","src":"4940:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1534,"mutability":"mutable","name":"paymentReceiver","nodeType":"VariableDeclaration","scope":1581,"src":"4965:31:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1533,"name":"address","nodeType":"ElementaryTypeName","src":"4965:15:7","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"4754:248:7"},"returnParameters":{"id":1536,"nodeType":"ParameterList","parameters":[],"src":"5012:0:7"},"scope":2325,"src":"4740:1151:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1788,"nodeType":"Block","src":"7793:3196:7","statements":[{"assignments":[1608],"declarations":[{"constant":false,"id":1608,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":1788,"src":"7803:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1607,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7803:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":1609,"nodeType":"VariableDeclarationStatement","src":"7803:14:7"},{"id":1640,"nodeType":"Block","src":"7916:620:7","statements":[{"assignments":[1611],"declarations":[{"constant":false,"id":1611,"mutability":"mutable","name":"txHashData","nodeType":"VariableDeclaration","scope":1640,"src":"7930:23:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1610,"name":"bytes","nodeType":"ElementaryTypeName","src":"7930:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1624,"initialValue":{"arguments":[{"id":1613,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1584,"src":"8031:2:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1614,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1586,"src":"8051:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1615,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1588,"src":"8074:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1616,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1590,"src":"8096:9:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":1617,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1592,"src":"8123:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1618,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1594,"src":"8182:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1619,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1596,"src":"8207:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1620,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1598,"src":"8233:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1621,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1600,"src":"8259:14:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1622,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1496,"src":"8325:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1612,"name":"encodeTransactionData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2282,"src":"7956:21:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,uint256,bytes calldata,enum Enum.Operation,uint256,uint256,uint256,address,address,uint256) view returns (bytes memory)"}},"id":1623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7956:388:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"7930:414:7"},{"expression":{"id":1626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8413:7:7","subExpression":{"id":1625,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1496,"src":"8413:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1627,"nodeType":"ExpressionStatement","src":"8413:7:7"},{"expression":{"id":1632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1628,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"8434:6:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1630,"name":"txHashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1611,"src":"8453:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1629,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8443:9:7","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":1631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8443:21:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8434:30:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":1633,"nodeType":"ExpressionStatement","src":"8434:30:7"},{"expression":{"arguments":[{"id":1635,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"8494:6:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1636,"name":"txHashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1611,"src":"8502:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1637,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1602,"src":"8514:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1634,"name":"checkSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1904,"src":"8478:15:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory,bytes memory) view"}},"id":1638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8478:47:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1639,"nodeType":"ExpressionStatement","src":"8478:47:7"}]},{"assignments":[1642],"declarations":[{"constant":false,"id":1642,"mutability":"mutable","name":"guard","nodeType":"VariableDeclaration","scope":1788,"src":"8545:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1641,"name":"address","nodeType":"ElementaryTypeName","src":"8545:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1645,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1643,"name":"getGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2772,"src":"8561:8:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8561:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8545:26:7"},{"id":1672,"nodeType":"Block","src":"8581:571:7","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1646,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1642,"src":"8599:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8616:1:7","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":1648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8608:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1647,"name":"address","nodeType":"ElementaryTypeName","src":"8608:7:7","typeDescriptions":{}}},"id":1650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8608:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"8599:19:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1671,"nodeType":"IfStatement","src":"8595:547:7","trueBody":{"id":1670,"nodeType":"Block","src":"8620:522:7","statements":[{"expression":{"arguments":[{"id":1656,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1584,"src":"8729:2:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1657,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1586,"src":"8753:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1658,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1588,"src":"8780:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1659,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1590,"src":"8806:9:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":1660,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1592,"src":"8837:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1661,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1594,"src":"8904:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1662,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1596,"src":"8933:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1663,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1598,"src":"8963:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1664,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1600,"src":"8993:14:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1665,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1602,"src":"9067:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":1666,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9099:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9099:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"expression":{"arguments":[{"id":1653,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1642,"src":"8644:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1652,"name":"Guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"8638:5:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Guard_$2685_$","typeString":"type(contract Guard)"}},"id":1654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8638:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Guard_$2685","typeString":"contract Guard"}},"id":1655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"checkTransaction","nodeType":"MemberAccess","referencedDeclaration":2677,"src":"8638:29:7","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_payable_$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address payable,bytes memory,address) external"}},"id":1668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8638:489:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1669,"nodeType":"ExpressionStatement","src":"8638:489:7"}]}}]},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1674,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"9443:7:7","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9443:9:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1684,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1592,"src":"9484:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32353030","id":1685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9496:4:7","typeDescriptions":{"typeIdentifier":"t_rational_2500_by_1","typeString":"int_const 2500"},"value":"2500"},"src":"9484:16:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1676,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1592,"src":"9458:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3634","id":1677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9470:2:7","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"9458:14:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1679,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9457:16:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3633","id":1680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9476:2:7","typeDescriptions":{"typeIdentifier":"t_rational_63_by_1","typeString":"int_const 63"},"value":"63"},"src":"9457:21:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1682,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9456:23:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","referencedDeclaration":4500,"src":"9456:27:7","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":1687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9456:45:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"353030","id":1688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9504:3:7","typeDescriptions":{"typeIdentifier":"t_rational_500_by_1","typeString":"int_const 500"},"value":"500"},"src":"9456:51:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9443:64:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303130","id":1691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9509:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_9d970fd9adbe3047cd5b7a20406b6bf2e613338cfe3a19aca4ca1810b67fad10","typeString":"literal_string \"GS010\""},"value":"GS010"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9d970fd9adbe3047cd5b7a20406b6bf2e613338cfe3a19aca4ca1810b67fad10","typeString":"literal_string \"GS010\""}],"id":1673,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9435:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9435:82:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1693,"nodeType":"ExpressionStatement","src":"9435:82:7"},{"id":1770,"nodeType":"Block","src":"9616:1227:7","statements":[{"assignments":[1695],"declarations":[{"constant":false,"id":1695,"mutability":"mutable","name":"gasUsed","nodeType":"VariableDeclaration","scope":1770,"src":"9630:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1694,"name":"uint256","nodeType":"ElementaryTypeName","src":"9630:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1698,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1696,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"9648:7:7","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9648:9:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9630:27:7"},{"expression":{"id":1716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1699,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"9926:7:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1701,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1584,"src":"9944:2:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1702,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1586,"src":"9948:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1703,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1588,"src":"9955:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1704,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1590,"src":"9961:9:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1705,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1596,"src":"9972:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9984:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9972:13:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":1713,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1592,"src":"10009:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9972:46:7","trueExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1708,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"9989:7:7","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9989:9:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32353030","id":1710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10001:4:7","typeDescriptions":{"typeIdentifier":"t_rational_2500_by_1","typeString":"int_const 2500"},"value":"2500"},"src":"9989:16:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1712,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9988:18:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1700,"name":"execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2582,"src":"9936:7:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)"}},"id":1715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9936:83:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9926:93:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1717,"nodeType":"ExpressionStatement","src":"9926:93:7"},{"expression":{"id":1724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1718,"name":"gasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"10033:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1721,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"10055:7:7","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10055:9:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1719,"name":"gasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"10043:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":4457,"src":"10043:11:7","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":1723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10043:22:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10033:32:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1725,"nodeType":"ExpressionStatement","src":"10033:32:7"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1727,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"10349:7:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1728,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1592,"src":"10360:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":1729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10373:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10360:14:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10349:25:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1732,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1596,"src":"10378:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":1733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10390:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10378:13:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10349:42:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303133","id":1736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10393:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_99333b4627cde46d9c53d7148b33b8b1f4f065f5dceb2cb210893e67e551978e","typeString":"literal_string \"GS013\""},"value":"GS013"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_99333b4627cde46d9c53d7148b33b8b1f4f065f5dceb2cb210893e67e551978e","typeString":"literal_string \"GS013\""}],"id":1726,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10341:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10341:60:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1738,"nodeType":"ExpressionStatement","src":"10341:60:7"},{"assignments":[1740],"declarations":[{"constant":false,"id":1740,"mutability":"mutable","name":"payment","nodeType":"VariableDeclaration","scope":1770,"src":"10550:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1739,"name":"uint256","nodeType":"ElementaryTypeName","src":"10550:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1742,"initialValue":{"hexValue":"30","id":1741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10568:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10550:19:7"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1743,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1596,"src":"10587:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10598:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10587:12:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1757,"nodeType":"IfStatement","src":"10583:128:7","trueBody":{"id":1756,"nodeType":"Block","src":"10601:110:7","statements":[{"expression":{"id":1754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1746,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1740,"src":"10619:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1748,"name":"gasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"10643:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1749,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1594,"src":"10652:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1750,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1596,"src":"10661:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1751,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1598,"src":"10671:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1752,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1600,"src":"10681:14:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":1747,"name":"handlePayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1875,"src":"10629:13:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_payable_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,address,address payable) returns (uint256)"}},"id":1753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10629:67:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10619:77:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1755,"nodeType":"ExpressionStatement","src":"10619:77:7"}]}},{"condition":{"id":1758,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"10728:7:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"eventCall":{"arguments":[{"id":1765,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"10816:6:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1766,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1740,"src":"10824:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1764,"name":"ExecutionFailure","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1488,"src":"10799:16:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,uint256)"}},"id":1767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10799:33:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1768,"nodeType":"EmitStatement","src":"10794:38:7"},"id":1769,"nodeType":"IfStatement","src":"10724:108:7","trueBody":{"eventCall":{"arguments":[{"id":1760,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"10759:6:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1761,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1740,"src":"10767:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1759,"name":"ExecutionSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1494,"src":"10742:16:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,uint256)"}},"id":1762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10742:33:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1763,"nodeType":"EmitStatement","src":"10737:38:7"}}]},{"id":1787,"nodeType":"Block","src":"10852:131:7","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1771,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1642,"src":"10870:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10887:1:7","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":1773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1772,"name":"address","nodeType":"ElementaryTypeName","src":"10879:7:7","typeDescriptions":{}}},"id":1775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10879:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"10870:19:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1786,"nodeType":"IfStatement","src":"10866:107:7","trueBody":{"id":1785,"nodeType":"Block","src":"10891:82:7","statements":[{"expression":{"arguments":[{"id":1781,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"10942:6:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1782,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1605,"src":"10950:7:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"id":1778,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1642,"src":"10915:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1777,"name":"Guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"10909:5:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Guard_$2685_$","typeString":"type(contract Guard)"}},"id":1779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10909:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Guard_$2685","typeString":"contract Guard"}},"id":1780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"checkAfterExecution","nodeType":"MemberAccess","referencedDeclaration":2684,"src":"10909:32:7","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool) external"}},"id":1783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10909:49:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1784,"nodeType":"ExpressionStatement","src":"10909:49:7"}]}}]}]},"documentation":{"id":1582,"nodeType":"StructuredDocumentation","src":"5897:1531:7","text":"@notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\n          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\n @dev The fees are always transferred, even if the user transaction fails.\n      This method doesn't perform any sanity check of the transaction, such as:\n      - if the contract at `to` address has code or not\n      - if the `gasToken` is a contract or not\n      It is the responsibility of the caller to perform such checks.\n @param to Destination address of Safe transaction.\n @param value Ether value of Safe transaction.\n @param data Data payload of Safe transaction.\n @param operation Operation type of Safe transaction.\n @param safeTxGas Gas that should be used for the Safe transaction.\n @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\n @param gasPrice Gas price that should be used for the payment calculation.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param signatures Signature data that should be verified.\n                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\n @return success Boolean indicating transaction's success."},"functionSelector":"6a761202","id":1789,"implemented":true,"kind":"function","modifiers":[],"name":"execTransaction","nodeType":"FunctionDefinition","parameters":{"id":1603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":1789,"src":"7467:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1583,"name":"address","nodeType":"ElementaryTypeName","src":"7467:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1586,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1789,"src":"7487:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint256","nodeType":"ElementaryTypeName","src":"7487:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1588,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1789,"src":"7510:19:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1587,"name":"bytes","nodeType":"ElementaryTypeName","src":"7510:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1590,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":1789,"src":"7539:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":1589,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"7539:14:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":1592,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":1789,"src":"7573:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1591,"name":"uint256","nodeType":"ElementaryTypeName","src":"7573:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1594,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":1789,"src":"7600:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1593,"name":"uint256","nodeType":"ElementaryTypeName","src":"7600:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1596,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":1789,"src":"7625:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1595,"name":"uint256","nodeType":"ElementaryTypeName","src":"7625:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1598,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":1789,"src":"7651:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1597,"name":"address","nodeType":"ElementaryTypeName","src":"7651:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1600,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":1789,"src":"7677:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1599,"name":"address","nodeType":"ElementaryTypeName","src":"7677:15:7","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1602,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":1789,"src":"7717:23:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1601,"name":"bytes","nodeType":"ElementaryTypeName","src":"7717:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7457:289:7"},"returnParameters":{"id":1606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1605,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":1789,"src":"7779:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1604,"name":"bool","nodeType":"ElementaryTypeName","src":"7779:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7778:14:7"},"scope":2325,"src":"7433:3556:7","stateMutability":"payable","virtual":true,"visibility":"public"},{"body":{"id":1874,"nodeType":"Block","src":"11719:616:7","statements":[{"assignments":[1806],"declarations":[{"constant":false,"id":1806,"mutability":"mutable","name":"receiver","nodeType":"VariableDeclaration","scope":1874,"src":"11782:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1805,"name":"address","nodeType":"ElementaryTypeName","src":"11782:15:7","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"id":1820,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"id":1812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1807,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1800,"src":"11809:14:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11835:1:7","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":1809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11827:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1808,"name":"address","nodeType":"ElementaryTypeName","src":"11827:7:7","typeDescriptions":{}}},"id":1811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11827:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"11809:28:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":1818,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1800,"src":"11861:14:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":1819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11809:66:7","trueExpression":{"arguments":[{"expression":{"id":1815,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"11848:2:7","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":1816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"origin","nodeType":"MemberAccess","src":"11848:9:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":1814,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11840:8:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":1813,"name":"address","nodeType":"ElementaryTypeName","src":"11840:8:7","stateMutability":"payable","typeDescriptions":{}}},"id":1817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11840:18:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"11782:93:7"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1821,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1798,"src":"11889:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11909:1:7","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":1823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11901:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1822,"name":"address","nodeType":"ElementaryTypeName","src":"11901:7:7","typeDescriptions":{}}},"id":1825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11901:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"11889:22:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1872,"nodeType":"Block","src":"12186:143:7","statements":[{"expression":{"id":1861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1853,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1803,"src":"12200:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1859,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1796,"src":"12235:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1856,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1794,"src":"12222:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1854,"name":"gasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1792,"src":"12210:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":4482,"src":"12210:11:7","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":1857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12210:20:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":4432,"src":"12210:24:7","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":1860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12210:34:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12200:44:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1862,"nodeType":"ExpressionStatement","src":"12200:44:7"},{"expression":{"arguments":[{"arguments":[{"id":1865,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1798,"src":"12280:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1866,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1806,"src":"12290:8:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1867,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1803,"src":"12300:7:7","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":1864,"name":"transferToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"12266:13:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":1868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12266:42:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303132","id":1869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12310:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_74edef16877c9a34a97f281dbea2805f9198008e7df330ab6416449a66143b07","typeString":"literal_string \"GS012\""},"value":"GS012"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_74edef16877c9a34a97f281dbea2805f9198008e7df330ab6416449a66143b07","typeString":"literal_string \"GS012\""}],"id":1863,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12258:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12258:60:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1871,"nodeType":"ExpressionStatement","src":"12258:60:7"}]},"id":1873,"nodeType":"IfStatement","src":"11885:444:7","trueBody":{"id":1852,"nodeType":"Block","src":"11913:267:7","statements":[{"expression":{"id":1842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1827,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1803,"src":"12032:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1833,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1796,"src":"12067:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1834,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"12078:2:7","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":1835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"gasprice","nodeType":"MemberAccess","src":"12078:11:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12067:22:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":1838,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"12103:2:7","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":1839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"gasprice","nodeType":"MemberAccess","src":"12103:11:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12067:47:7","trueExpression":{"id":1837,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1796,"src":"12092:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1830,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1794,"src":"12054:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1828,"name":"gasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1792,"src":"12042:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":4482,"src":"12042:11:7","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":1831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12042:20:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":4432,"src":"12042:24:7","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":1841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12042:73:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12032:83:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1843,"nodeType":"ExpressionStatement","src":"12032:83:7"},{"expression":{"arguments":[{"arguments":[{"id":1847,"name":"payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1803,"src":"12151:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1845,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1806,"src":"12137:8:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":1846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"send","nodeType":"MemberAccess","src":"12137:13:7","typeDescriptions":{"typeIdentifier":"t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":1848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12137:22:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303131","id":1849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12161:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_4353e9bcd8ea99b4d56990ac4b8777f1ab67cada8356790f30e482f2408a44b0","typeString":"literal_string \"GS011\""},"value":"GS011"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4353e9bcd8ea99b4d56990ac4b8777f1ab67cada8356790f30e482f2408a44b0","typeString":"literal_string \"GS011\""}],"id":1844,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12129:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12129:40:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1851,"nodeType":"ExpressionStatement","src":"12129:40:7"}]}}]},"documentation":{"id":1790,"nodeType":"StructuredDocumentation","src":"10995:514:7","text":" @notice Handles the payment for a Safe transaction.\n @param gasUsed Gas used by the Safe transaction.\n @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\n @param gasPrice Gas price that should be used for the payment calculation.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @return payment The amount of payment made in the specified token."},"id":1875,"implemented":true,"kind":"function","modifiers":[],"name":"handlePayment","nodeType":"FunctionDefinition","parameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1792,"mutability":"mutable","name":"gasUsed","nodeType":"VariableDeclaration","scope":1875,"src":"11546:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1791,"name":"uint256","nodeType":"ElementaryTypeName","src":"11546:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1794,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":1875,"src":"11571:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1793,"name":"uint256","nodeType":"ElementaryTypeName","src":"11571:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1796,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":1875,"src":"11596:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1795,"name":"uint256","nodeType":"ElementaryTypeName","src":"11596:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1798,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":1875,"src":"11622:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1797,"name":"address","nodeType":"ElementaryTypeName","src":"11622:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1800,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":1875,"src":"11648:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1799,"name":"address","nodeType":"ElementaryTypeName","src":"11648:15:7","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"11536:148:7"},"returnParameters":{"id":1804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1803,"mutability":"mutable","name":"payment","nodeType":"VariableDeclaration","scope":1875,"src":"11702:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1802,"name":"uint256","nodeType":"ElementaryTypeName","src":"11702:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11701:17:7"},"scope":2325,"src":"11514:821:7","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":1903,"nodeType":"Block","src":"12957:254:7","statements":[{"assignments":[1886],"declarations":[{"constant":false,"id":1886,"mutability":"mutable","name":"_threshold","nodeType":"VariableDeclaration","scope":1903,"src":"13025:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1885,"name":"uint256","nodeType":"ElementaryTypeName","src":"13025:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1888,"initialValue":{"id":1887,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"13046:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13025:30:7"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1890,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1886,"src":"13114:10:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13127:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13114:14:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303031","id":1893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13130:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_93293a4a2e4cde533ea81b8912d8934c2d7892ceb975e9ad2c25f4abf449a730","typeString":"literal_string \"GS001\""},"value":"GS001"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_93293a4a2e4cde533ea81b8912d8934c2d7892ceb975e9ad2c25f4abf449a730","typeString":"literal_string \"GS001\""}],"id":1889,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13106:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13106:32:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1895,"nodeType":"ExpressionStatement","src":"13106:32:7"},{"expression":{"arguments":[{"id":1897,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1878,"src":"13165:8:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1898,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1880,"src":"13175:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1899,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1882,"src":"13181:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1900,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1886,"src":"13193:10:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1896,"name":"checkNSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2154,"src":"13148:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes memory,bytes memory,uint256) view"}},"id":1901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13148:56:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1902,"nodeType":"ExpressionStatement","src":"13148:56:7"}]},"documentation":{"id":1876,"nodeType":"StructuredDocumentation","src":"12341:512:7","text":" @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\n @param dataHash Hash of the data (could be either a message hash or transaction hash)\n @param data That should be signed (this is passed to an external validator contract)\n @param signatures Signature data that should be verified.\n                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash."},"functionSelector":"934f3a11","id":1904,"implemented":true,"kind":"function","modifiers":[],"name":"checkSignatures","nodeType":"FunctionDefinition","parameters":{"id":1883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1878,"mutability":"mutable","name":"dataHash","nodeType":"VariableDeclaration","scope":1904,"src":"12883:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1877,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12883:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1880,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":1904,"src":"12901:17:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1879,"name":"bytes","nodeType":"ElementaryTypeName","src":"12901:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1882,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":1904,"src":"12920:23:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1881,"name":"bytes","nodeType":"ElementaryTypeName","src":"12920:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12882:62:7"},"returnParameters":{"id":1884,"nodeType":"ParameterList","parameters":[],"src":"12957:0:7"},"scope":2325,"src":"12858:353:7","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2153,"nodeType":"Block","src":"14020:3709:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1917,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1911,"src":"14105:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"14105:17:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[{"hexValue":"3635","id":1921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14149:2:7","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"}],"expression":{"id":1919,"name":"requiredSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1913,"src":"14126:18:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":4432,"src":"14126:22:7","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":1922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14126:26:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14105:47:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303230","id":1924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14154:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_f27dba96666375fe844b71e8ea4f388db2ce9f87fa9882d36a17036a7478b232","typeString":"literal_string \"GS020\""},"value":"GS020"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f27dba96666375fe844b71e8ea4f388db2ce9f87fa9882d36a17036a7478b232","typeString":"literal_string \"GS020\""}],"id":1916,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14097:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14097:65:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1926,"nodeType":"ExpressionStatement","src":"14097:65:7"},{"assignments":[1928],"declarations":[{"constant":false,"id":1928,"mutability":"mutable","name":"lastOwner","nodeType":"VariableDeclaration","scope":2153,"src":"14224:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1927,"name":"address","nodeType":"ElementaryTypeName","src":"14224:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1933,"initialValue":{"arguments":[{"hexValue":"30","id":1931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14252:1:7","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":1930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14244:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1929,"name":"address","nodeType":"ElementaryTypeName","src":"14244:7:7","typeDescriptions":{}}},"id":1932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14244:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"14224:30:7"},{"assignments":[1935],"declarations":[{"constant":false,"id":1935,"mutability":"mutable","name":"currentOwner","nodeType":"VariableDeclaration","scope":2153,"src":"14264:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1934,"name":"address","nodeType":"ElementaryTypeName","src":"14264:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1936,"nodeType":"VariableDeclarationStatement","src":"14264:20:7"},{"assignments":[1938],"declarations":[{"constant":false,"id":1938,"mutability":"mutable","name":"v","nodeType":"VariableDeclaration","scope":2153,"src":"14294:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1937,"name":"uint8","nodeType":"ElementaryTypeName","src":"14294:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":1939,"nodeType":"VariableDeclarationStatement","src":"14294:7:7"},{"assignments":[1941],"declarations":[{"constant":false,"id":1941,"mutability":"mutable","name":"r","nodeType":"VariableDeclaration","scope":2153,"src":"14311:9:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1940,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14311:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":1942,"nodeType":"VariableDeclarationStatement","src":"14311:9:7"},{"assignments":[1944],"declarations":[{"constant":false,"id":1944,"mutability":"mutable","name":"s","nodeType":"VariableDeclaration","scope":2153,"src":"14330:9:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1943,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14330:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":1945,"nodeType":"VariableDeclarationStatement","src":"14330:9:7"},{"assignments":[1947],"declarations":[{"constant":false,"id":1947,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":2153,"src":"14349:9:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1946,"name":"uint256","nodeType":"ElementaryTypeName","src":"14349:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1948,"nodeType":"VariableDeclarationStatement","src":"14349:9:7"},{"body":{"id":2151,"nodeType":"Block","src":"14409:3314:7","statements":[{"expression":{"id":1967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1959,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"14424:1:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":1960,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"14427:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1961,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1944,"src":"14430:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1962,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"14423:9:7","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$","typeString":"tuple(uint8,bytes32,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1964,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1911,"src":"14450:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":1965,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"14462:1:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1963,"name":"signatureSplit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3811,"src":"14435:14:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$_t_bytes32_$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (uint8,bytes32,bytes32)"}},"id":1966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14435:29:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$","typeString":"tuple(uint8,bytes32,bytes32)"}},"src":"14423:41:7","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1968,"nodeType":"ExpressionStatement","src":"14423:41:7"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":1971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1969,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"14482:1:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14487:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14482:6:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":2062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2060,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"16425:1:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":2061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16430:1:7","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16425:6:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":2095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2093,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"16925:1:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3330","id":2094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16929:2:7","typeDescriptions":{"typeIdentifier":"t_rational_30_by_1","typeString":"int_const 30"},"value":"30"},"src":"16925:6:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2123,"nodeType":"Block","src":"17320:226:7","statements":[{"expression":{"id":2121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2114,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"17488:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2116,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"17513:8:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2117,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"17523:1:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":2118,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"17526:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2119,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1944,"src":"17529:1:7","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":2115,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"17503:9:7","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":2120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17503:28:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17488:43:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2122,"nodeType":"ExpressionStatement","src":"17488:43:7"}]},"id":2124,"nodeType":"IfStatement","src":"16921:625:7","trueBody":{"id":2113,"nodeType":"Block","src":"16933:381:7","statements":[{"expression":{"id":2111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2096,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"17187:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a3332","id":2101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17239:34:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""},"value":"\u0019Ethereum Signed Message:\n32"},{"id":2102,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"17275:8:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2099,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17222:3:7","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"17222:16:7","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17222:62:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2098,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17212:9:7","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17212:73:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":2107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2105,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1938,"src":"17287:1:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"34","id":2106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17291:1:7","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"17287:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":2108,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"17294:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2109,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1944,"src":"17297:1:7","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":2097,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"17202:9:7","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":2110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17202:97:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17187:112:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2112,"nodeType":"ExpressionStatement","src":"17187:112:7"}]}},"id":2125,"nodeType":"IfStatement","src":"16421:1125:7","trueBody":{"id":2092,"nodeType":"Block","src":"16433:482:7","statements":[{"expression":{"id":2074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2063,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"16603:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":2070,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"16642:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2069,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16634:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2068,"name":"uint256","nodeType":"ElementaryTypeName","src":"16634:7:7","typeDescriptions":{}}},"id":2071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16634:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16626:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":2066,"name":"uint160","nodeType":"ElementaryTypeName","src":"16626:7:7","typeDescriptions":{}}},"id":2072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16626:19:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":2065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16618:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2064,"name":"address","nodeType":"ElementaryTypeName","src":"16618:7:7","typeDescriptions":{}}},"id":2073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16618:28:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"16603:43:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2075,"nodeType":"ExpressionStatement","src":"16603:43:7"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2077,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16817:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"16817:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2079,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"16831:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16817:26:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":2081,"name":"approvedHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1508,"src":"16847:14:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(address => mapping(bytes32 => uint256))"}},"id":2083,"indexExpression":{"id":2082,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"16862:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16847:28:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":2085,"indexExpression":{"id":2084,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"16876:8:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16847:38:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16889:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16847:43:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16817:73:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303235","id":2089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16892:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc2491dc7fc5c71a630e01bcb9c3e39f61f559ab54f6528d2adb67d65ed9ff6b","typeString":"literal_string \"GS025\""},"value":"GS025"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc2491dc7fc5c71a630e01bcb9c3e39f61f559ab54f6528d2adb67d65ed9ff6b","typeString":"literal_string \"GS025\""}],"id":2076,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16809:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16809:91:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2091,"nodeType":"ExpressionStatement","src":"16809:91:7"}]}},"id":2126,"nodeType":"IfStatement","src":"14478:3068:7","trueBody":{"id":2059,"nodeType":"Block","src":"14490:1925:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":1977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1974,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1909,"src":"14526:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1973,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14516:9:7","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":1975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14516:15:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1976,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"14535:8:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"14516:27:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303237","id":1978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14545:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_71cf63766ccc857998a36e6f1707e507e2e8921214ba4b8df65713cc885a8888","typeString":"literal_string \"GS027\""},"value":"GS027"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_71cf63766ccc857998a36e6f1707e507e2e8921214ba4b8df65713cc885a8888","typeString":"literal_string \"GS027\""}],"id":1972,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14508:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14508:45:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1980,"nodeType":"ExpressionStatement","src":"14508:45:7"},{"expression":{"id":1992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1981,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"14731:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":1988,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"14770:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14762:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1986,"name":"uint256","nodeType":"ElementaryTypeName","src":"14762:7:7","typeDescriptions":{}}},"id":1989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14762:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14754:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":1984,"name":"uint160","nodeType":"ElementaryTypeName","src":"14754:7:7","typeDescriptions":{}}},"id":1990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14754:19:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":1983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14746:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1982,"name":"address","nodeType":"ElementaryTypeName","src":"14746:7:7","typeDescriptions":{}}},"id":1991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14746:28:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"14731:43:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1993,"nodeType":"ExpressionStatement","src":"14731:43:7"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1997,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1944,"src":"15169:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15161:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1995,"name":"uint256","nodeType":"ElementaryTypeName","src":"15161:7:7","typeDescriptions":{}}},"id":1998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15161:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[{"hexValue":"3635","id":2001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15198:2:7","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"}],"expression":{"id":1999,"name":"requiredSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1913,"src":"15175:18:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":4432,"src":"15175:22:7","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":2002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15175:26:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15161:40:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303231","id":2004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15203:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_d153a9d5a0d4e2c2b7d4e887f02c1da6287d6d54f20f4d8ce40382a23140787a","typeString":"literal_string \"GS021\""},"value":"GS021"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d153a9d5a0d4e2c2b7d4e887f02c1da6287d6d54f20f4d8ce40382a23140787a","typeString":"literal_string \"GS021\""}],"id":1994,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15153:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15153:58:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2006,"nodeType":"ExpressionStatement","src":"15153:58:7"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"3332","id":2013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15366:2:7","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"arguments":[{"id":2010,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1944,"src":"15359:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15351:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2008,"name":"uint256","nodeType":"ElementaryTypeName","src":"15351:7:7","typeDescriptions":{}}},"id":2011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15351:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":4482,"src":"15351:14:7","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":2014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15351:18:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":2015,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1911,"src":"15373:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"15373:17:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15351:39:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303232","id":2018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15392:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_372498b513e17609439d064ce0277017b054c808f722c83ff57cee4e06a9e457","typeString":"literal_string \"GS022\""},"value":"GS022"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_372498b513e17609439d064ce0277017b054c808f722c83ff57cee4e06a9e457","typeString":"literal_string \"GS022\""}],"id":2007,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15343:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15343:57:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2020,"nodeType":"ExpressionStatement","src":"15343:57:7"},{"assignments":[2022],"declarations":[{"constant":false,"id":2022,"mutability":"mutable","name":"contractSignatureLen","nodeType":"VariableDeclaration","scope":2059,"src":"15544:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2021,"name":"uint256","nodeType":"ElementaryTypeName","src":"15544:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2023,"nodeType":"VariableDeclarationStatement","src":"15544:28:7"},{"AST":{"nodeType":"YulBlock","src":"15663:100:7","statements":[{"nodeType":"YulAssignment","src":"15685:60:7","value":{"arguments":[{"arguments":[{"arguments":[{"name":"signatures","nodeType":"YulIdentifier","src":"15723:10:7"},{"name":"s","nodeType":"YulIdentifier","src":"15735:1:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15719:3:7"},"nodeType":"YulFunctionCall","src":"15719:18:7"},{"kind":"number","nodeType":"YulLiteral","src":"15739:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15715:3:7"},"nodeType":"YulFunctionCall","src":"15715:29:7"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15709:5:7"},"nodeType":"YulFunctionCall","src":"15709:36:7"},"variableNames":[{"name":"contractSignatureLen","nodeType":"YulIdentifier","src":"15685:20:7"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2022,"isOffset":false,"isSlot":false,"src":"15685:20:7","valueSize":1},{"declaration":1944,"isOffset":false,"isSlot":false,"src":"15735:1:7","valueSize":1},{"declaration":1911,"isOffset":false,"isSlot":false,"src":"15723:10:7","valueSize":1}],"id":2024,"nodeType":"InlineAssembly","src":"15654:109:7"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2034,"name":"contractSignatureLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2022,"src":"15811:20:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"hexValue":"3332","id":2031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15803:2:7","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"arguments":[{"id":2028,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1944,"src":"15796:1:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15788:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2026,"name":"uint256","nodeType":"ElementaryTypeName","src":"15788:7:7","typeDescriptions":{}}},"id":2029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15788:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":4482,"src":"15788:14:7","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":2032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15788:18:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":4482,"src":"15788:22:7","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":2035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15788:44:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":2036,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1911,"src":"15836:10:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"15836:17:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15788:65:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303233","id":2039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15855:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_00aecc0fa22d38afc0f465808a9fee188ba139fb53b2ca550ea01d91d6ecf29f","typeString":"literal_string \"GS023\""},"value":"GS023"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_00aecc0fa22d38afc0f465808a9fee188ba139fb53b2ca550ea01d91d6ecf29f","typeString":"literal_string \"GS023\""}],"id":2025,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15780:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15780:83:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2041,"nodeType":"ExpressionStatement","src":"15780:83:7"},{"assignments":[2043],"declarations":[{"constant":false,"id":2043,"mutability":"mutable","name":"contractSignature","nodeType":"VariableDeclaration","scope":2059,"src":"15917:30:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2042,"name":"bytes","nodeType":"ElementaryTypeName","src":"15917:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2044,"nodeType":"VariableDeclarationStatement","src":"15917:30:7"},{"AST":{"nodeType":"YulBlock","src":"16038:229:7","statements":[{"nodeType":"YulAssignment","src":"16199:50:7","value":{"arguments":[{"arguments":[{"name":"signatures","nodeType":"YulIdentifier","src":"16228:10:7"},{"name":"s","nodeType":"YulIdentifier","src":"16240:1:7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16224:3:7"},"nodeType":"YulFunctionCall","src":"16224:18:7"},{"kind":"number","nodeType":"YulLiteral","src":"16244:4:7","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16220:3:7"},"nodeType":"YulFunctionCall","src":"16220:29:7"},"variableNames":[{"name":"contractSignature","nodeType":"YulIdentifier","src":"16199:17:7"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2043,"isOffset":false,"isSlot":false,"src":"16199:17:7","valueSize":1},{"declaration":1944,"isOffset":false,"isSlot":false,"src":"16240:1:7","valueSize":1},{"declaration":1911,"isOffset":false,"isSlot":false,"src":"16228:10:7","valueSize":1}],"id":2045,"nodeType":"InlineAssembly","src":"16029:238:7"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":2055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2051,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1909,"src":"16343:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2052,"name":"contractSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2043,"src":"16349:17:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":2048,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"16312:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2047,"name":"ISignatureValidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5011,"src":"16292:19:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISignatureValidator_$5011_$","typeString":"type(contract ISignatureValidator)"}},"id":2049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16292:33:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidator_$5011","typeString":"contract ISignatureValidator"}},"id":2050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isValidSignature","nodeType":"MemberAccess","referencedDeclaration":5010,"src":"16292:50:7","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory,bytes memory) view external returns (bytes4)"}},"id":2053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16292:75:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2054,"name":"EIP1271_MAGIC_VALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"16371:19:7","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"16292:98:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303234","id":2056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16392:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_1d9dfad0f7e80ccb3a898324566cbd9ed8451678d229622c4c1b5f1f19330139","typeString":"literal_string \"GS024\""},"value":"GS024"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1d9dfad0f7e80ccb3a898324566cbd9ed8451678d229622c4c1b5f1f19330139","typeString":"literal_string \"GS024\""}],"id":2046,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16284:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16284:116:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2058,"nodeType":"ExpressionStatement","src":"16284:116:7"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2128,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"17567:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2129,"name":"lastOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1928,"src":"17582:9:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17567:24:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2131,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"17595:6:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2133,"indexExpression":{"id":2132,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"17602:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17595:20:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17627:1:7","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":2135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17619:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2134,"name":"address","nodeType":"ElementaryTypeName","src":"17619:7:7","typeDescriptions":{}}},"id":2137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17619:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"17595:34:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17567:62:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2140,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"17633:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2141,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"17649:15:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17633:31:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17567:97:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303236","id":2144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17666:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_14032cc06a7a2043c1b961d6b7d6cbfaea1511224ce5ca723af49fa68e55c159","typeString":"literal_string \"GS026\""},"value":"GS026"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_14032cc06a7a2043c1b961d6b7d6cbfaea1511224ce5ca723af49fa68e55c159","typeString":"literal_string \"GS026\""}],"id":2127,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17559:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17559:115:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2146,"nodeType":"ExpressionStatement","src":"17559:115:7"},{"expression":{"id":2149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2147,"name":"lastOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1928,"src":"17688:9:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2148,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"17700:12:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17688:24:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2150,"nodeType":"ExpressionStatement","src":"17688:24:7"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1953,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"14380:1:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1954,"name":"requiredSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1913,"src":"14384:18:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14380:22:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2152,"initializationExpression":{"expression":{"id":1951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1949,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"14373:1:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":1950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14377:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14373:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1952,"nodeType":"ExpressionStatement","src":"14373:5:7"},"loopExpression":{"expression":{"id":1957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14404:3:7","subExpression":{"id":1956,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"14404:1:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1958,"nodeType":"ExpressionStatement","src":"14404:3:7"},"nodeType":"ForStatement","src":"14368:3355:7"}]},"documentation":{"id":1905,"nodeType":"StructuredDocumentation","src":"13217:670:7","text":" @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\n @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\n @param dataHash Hash of the data (could be either a message hash or transaction hash)\n @param data That should be signed (this is passed to an external validator contract)\n @param signatures Signature data that should be verified.\n                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\n @param requiredSignatures Amount of required valid signatures."},"functionSelector":"12fb68e0","id":2154,"implemented":true,"kind":"function","modifiers":[],"name":"checkNSignatures","nodeType":"FunctionDefinition","parameters":{"id":1914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1907,"mutability":"mutable","name":"dataHash","nodeType":"VariableDeclaration","scope":2154,"src":"13918:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1906,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13918:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1909,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2154,"src":"13936:17:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1908,"name":"bytes","nodeType":"ElementaryTypeName","src":"13936:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1911,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":2154,"src":"13955:23:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1910,"name":"bytes","nodeType":"ElementaryTypeName","src":"13955:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1913,"mutability":"mutable","name":"requiredSignatures","nodeType":"VariableDeclaration","scope":2154,"src":"13980:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1912,"name":"uint256","nodeType":"ElementaryTypeName","src":"13980:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13917:90:7"},"returnParameters":{"id":1915,"nodeType":"ParameterList","parameters":[],"src":"14020:0:7"},"scope":2325,"src":"13892:3837:7","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2188,"nodeType":"Block","src":"18186:175:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2161,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"18204:6:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2164,"indexExpression":{"expression":{"id":2162,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18211:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18211:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18204:18:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18234:1:7","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":2166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18226:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2165,"name":"address","nodeType":"ElementaryTypeName","src":"18226:7:7","typeDescriptions":{}}},"id":2168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18226:10:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"18204:32:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303330","id":2170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18238:7:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_26b7fa7d947085035b53de5c25693e568c405e1e894ad22389a1528045f35ba8","typeString":"literal_string \"GS030\""},"value":"GS030"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_26b7fa7d947085035b53de5c25693e568c405e1e894ad22389a1528045f35ba8","typeString":"literal_string \"GS030\""}],"id":2160,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18196:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18196:50:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2172,"nodeType":"ExpressionStatement","src":"18196:50:7"},{"expression":{"id":2180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":2173,"name":"approvedHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1508,"src":"18256:14:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(address => mapping(bytes32 => uint256))"}},"id":2177,"indexExpression":{"expression":{"id":2174,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18271:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18271:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18256:26:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":2178,"indexExpression":{"id":2176,"name":"hashToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2157,"src":"18283:13:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18256:41:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":2179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18300:1:7","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18256:45:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2181,"nodeType":"ExpressionStatement","src":"18256:45:7"},{"eventCall":{"arguments":[{"id":2183,"name":"hashToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2157,"src":"18328:13:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2184,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18343:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18343:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":2182,"name":"ApproveHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1478,"src":"18316:11:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":2186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18316:38:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2187,"nodeType":"EmitStatement","src":"18311:43:7"}]},"documentation":{"id":2155,"nodeType":"StructuredDocumentation","src":"17735:393:7","text":" @notice Marks hash `hashToApprove` as approved.\n @dev This can be used with a pre-approved hash transaction signature.\n      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\n @param hashToApprove The hash to mark as approved for signatures that are verified by this contract."},"functionSelector":"d4d9bdcd","id":2189,"implemented":true,"kind":"function","modifiers":[],"name":"approveHash","nodeType":"FunctionDefinition","parameters":{"id":2158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2157,"mutability":"mutable","name":"hashToApprove","nodeType":"VariableDeclaration","scope":2189,"src":"18154:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2156,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18154:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"18153:23:7"},"returnParameters":{"id":2159,"nodeType":"ParameterList","parameters":[],"src":"18186:0:7"},"scope":2325,"src":"18133:228:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2201,"nodeType":"Block","src":"18574:159:7","statements":[{"assignments":[2196],"declarations":[{"constant":false,"id":2196,"mutability":"mutable","name":"id","nodeType":"VariableDeclaration","scope":2201,"src":"18584:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"18584:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2197,"nodeType":"VariableDeclarationStatement","src":"18584:10:7"},{"AST":{"nodeType":"YulBlock","src":"18669:39:7","statements":[{"nodeType":"YulAssignment","src":"18683:15:7","value":{"arguments":[],"functionName":{"name":"chainid","nodeType":"YulIdentifier","src":"18689:7:7"},"nodeType":"YulFunctionCall","src":"18689:9:7"},"variableNames":[{"name":"id","nodeType":"YulIdentifier","src":"18683:2:7"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2196,"isOffset":false,"isSlot":false,"src":"18683:2:7","valueSize":1}],"id":2198,"nodeType":"InlineAssembly","src":"18660:48:7"},{"expression":{"id":2199,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"18724:2:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2194,"id":2200,"nodeType":"Return","src":"18717:9:7"}]},"documentation":{"id":2190,"nodeType":"StructuredDocumentation","src":"18367:150:7","text":" @notice Returns the ID of the chain the contract is currently deployed on.\n @return The ID of the current chain as a uint256."},"functionSelector":"3408e470","id":2202,"implemented":true,"kind":"function","modifiers":[],"name":"getChainId","nodeType":"FunctionDefinition","parameters":{"id":2191,"nodeType":"ParameterList","parameters":[],"src":"18541:2:7"},"returnParameters":{"id":2194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2193,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":2202,"src":"18565:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2192,"name":"uint256","nodeType":"ElementaryTypeName","src":"18565:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18564:9:7"},"scope":2325,"src":"18522:211:7","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2218,"nodeType":"Block","src":"18958:92:7","statements":[{"expression":{"arguments":[{"arguments":[{"id":2211,"name":"DOMAIN_SEPARATOR_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1456,"src":"18996:25:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":2212,"name":"getChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2202,"src":"19023:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":2213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19023:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2214,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"19037:4:7","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}],"expression":{"id":2209,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"18985:3:7","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2210,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"18985:10:7","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18985:57:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2208,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"18975:9:7","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18975:68:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2207,"id":2217,"nodeType":"Return","src":"18968:75:7"}]},"documentation":{"id":2203,"nodeType":"StructuredDocumentation","src":"18739:157:7","text":" @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\n @return bytes32 The domain separator hash."},"functionSelector":"f698da25","id":2219,"implemented":true,"kind":"function","modifiers":[],"name":"domainSeparator","nodeType":"FunctionDefinition","parameters":{"id":2204,"nodeType":"ParameterList","parameters":[],"src":"18925:2:7"},"returnParameters":{"id":2207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2206,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":2219,"src":"18949:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2205,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18949:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"18948:9:7"},"scope":2325,"src":"18901:149:7","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2281,"nodeType":"Block","src":"20196:484:7","statements":[{"assignments":[2246],"declarations":[{"constant":false,"id":2246,"mutability":"mutable","name":"safeTxHash","nodeType":"VariableDeclaration","scope":2281,"src":"20206:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20206:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2265,"initialValue":{"arguments":[{"arguments":[{"id":2250,"name":"SAFE_TX_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1459,"src":"20278:16:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2251,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2222,"src":"20312:2:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2252,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2224,"src":"20332:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":2254,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2226,"src":"20365:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2253,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"20355:9:7","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20355:15:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2256,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2228,"src":"20388:9:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":2257,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2230,"src":"20415:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2258,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2232,"src":"20442:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2259,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2234,"src":"20467:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2260,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2236,"src":"20493:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2261,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2238,"src":"20519:14:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2262,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2240,"src":"20551:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2248,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"20250:3:7","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"20250:10:7","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20250:321:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2247,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"20227:9:7","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20227:354:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"20206:375:7"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30783139","id":2270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20622:4:7","typeDescriptions":{"typeIdentifier":"t_rational_25_by_1","typeString":"int_const 25"},"value":"0x19"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_25_by_1","typeString":"int_const 25"}],"id":2269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20615:6:7","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":2268,"name":"bytes1","nodeType":"ElementaryTypeName","src":"20615:6:7","typeDescriptions":{}}},"id":2271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20615:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"arguments":[{"hexValue":"30783031","id":2274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20636:4:7","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":2273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20629:6:7","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":2272,"name":"bytes1","nodeType":"ElementaryTypeName","src":"20629:6:7","typeDescriptions":{}}},"id":2275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20629:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"arguments":[],"expression":{"argumentTypes":[],"id":2276,"name":"domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"20643:15:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":2277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20643:17:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2278,"name":"safeTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2246,"src":"20662:10:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2266,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"20598:3:7","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2267,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"20598:16:7","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20598:75:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2244,"id":2280,"nodeType":"Return","src":"20591:82:7"}]},"documentation":{"id":2220,"nodeType":"StructuredDocumentation","src":"19056:797:7","text":" @notice Returns the pre-image of the transaction hash (see getTransactionHash).\n @param to Destination address.\n @param value Ether value.\n @param data Data payload.\n @param operation Operation type.\n @param safeTxGas Gas that should be used for the safe transaction.\n @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\n @param gasPrice Maximum gas price that should be used for this transaction.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param _nonce Transaction nonce.\n @return Transaction hash bytes."},"functionSelector":"e86637db","id":2282,"implemented":true,"kind":"function","modifiers":[],"name":"encodeTransactionData","nodeType":"FunctionDefinition","parameters":{"id":2241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2222,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2282,"src":"19898:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2221,"name":"address","nodeType":"ElementaryTypeName","src":"19898:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2224,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2282,"src":"19918:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2223,"name":"uint256","nodeType":"ElementaryTypeName","src":"19918:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2226,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2282,"src":"19941:19:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2225,"name":"bytes","nodeType":"ElementaryTypeName","src":"19941:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2228,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2282,"src":"19970:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2227,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"19970:14:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":2230,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":2282,"src":"20004:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2229,"name":"uint256","nodeType":"ElementaryTypeName","src":"20004:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2232,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":2282,"src":"20031:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2231,"name":"uint256","nodeType":"ElementaryTypeName","src":"20031:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2234,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":2282,"src":"20056:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2233,"name":"uint256","nodeType":"ElementaryTypeName","src":"20056:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2236,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":2282,"src":"20082:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2235,"name":"address","nodeType":"ElementaryTypeName","src":"20082:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2238,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":2282,"src":"20108:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2237,"name":"address","nodeType":"ElementaryTypeName","src":"20108:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2240,"mutability":"mutable","name":"_nonce","nodeType":"VariableDeclaration","scope":2282,"src":"20140:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2239,"name":"uint256","nodeType":"ElementaryTypeName","src":"20140:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19888:272:7"},"returnParameters":{"id":2244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2243,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":2282,"src":"20182:12:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2242,"name":"bytes","nodeType":"ElementaryTypeName","src":"20182:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20181:14:7"},"scope":2325,"src":"19858:822:7","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2323,"nodeType":"Block","src":"21715:148:7","statements":[{"expression":{"arguments":[{"arguments":[{"id":2310,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2285,"src":"21764:2:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2311,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2287,"src":"21768:5:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2312,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"21775:4:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2313,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2291,"src":"21781:9:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":2314,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2293,"src":"21792:9:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2315,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"21803:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2316,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2297,"src":"21812:8:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2317,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2299,"src":"21822:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2318,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"21832:14:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2319,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2303,"src":"21848:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2309,"name":"encodeTransactionData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2282,"src":"21742:21:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,uint256,bytes calldata,enum Enum.Operation,uint256,uint256,uint256,address,address,uint256) view returns (bytes memory)"}},"id":2320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21742:113:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2308,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"21732:9:7","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21732:124:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2307,"id":2322,"nodeType":"Return","src":"21725:131:7"}]},"documentation":{"id":2283,"nodeType":"StructuredDocumentation","src":"20686:694:7","text":" @notice Returns transaction hash to be signed by owners.\n @param to Destination address.\n @param value Ether value.\n @param data Data payload.\n @param operation Operation type.\n @param safeTxGas Fas that should be used for the safe transaction.\n @param baseGas Gas costs for data used to trigger the safe transaction.\n @param gasPrice Maximum gas price that should be used for this transaction.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param _nonce Transaction nonce.\n @return Transaction hash."},"functionSelector":"d8d11f78","id":2324,"implemented":true,"kind":"function","modifiers":[],"name":"getTransactionHash","nodeType":"FunctionDefinition","parameters":{"id":2304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2285,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2324,"src":"21422:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2284,"name":"address","nodeType":"ElementaryTypeName","src":"21422:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2287,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2324,"src":"21442:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2286,"name":"uint256","nodeType":"ElementaryTypeName","src":"21442:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2289,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2324,"src":"21465:19:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2288,"name":"bytes","nodeType":"ElementaryTypeName","src":"21465:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2291,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2324,"src":"21494:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2290,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"21494:14:7","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":2324,"src":"21528:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2292,"name":"uint256","nodeType":"ElementaryTypeName","src":"21528:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2295,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":2324,"src":"21555:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2294,"name":"uint256","nodeType":"ElementaryTypeName","src":"21555:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2297,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":2324,"src":"21580:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2296,"name":"uint256","nodeType":"ElementaryTypeName","src":"21580:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2299,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":2324,"src":"21606:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2298,"name":"address","nodeType":"ElementaryTypeName","src":"21606:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2301,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":2324,"src":"21632:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2300,"name":"address","nodeType":"ElementaryTypeName","src":"21632:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"_nonce","nodeType":"VariableDeclaration","scope":2324,"src":"21664:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2302,"name":"uint256","nodeType":"ElementaryTypeName","src":"21664:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21412:272:7"},"returnParameters":{"id":2307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2306,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":2324,"src":"21706:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2305,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21706:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"21705:9:7"},"scope":2325,"src":"21385:478:7","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":2326,"src":"1919:19946:7"}],"src":"42:21824:7"},"id":7},"contracts/SafeL2.sol":{"ast":{"absolutePath":"contracts/SafeL2.sol","exportedSymbols":{"BaseGuard":[2711],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OwnerManager":[3710],"Safe":[2325],"SafeL2":[2471],"SafeMath":[4501],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867]},"id":2472,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":2327,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:8"},{"absolutePath":"contracts/Safe.sol","file":"./Safe.sol","id":2328,"nodeType":"ImportDirective","scope":2472,"sourceUnit":2326,"src":"75:20:8","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2330,"name":"Safe","nodeType":"UserDefinedTypeName","referencedDeclaration":2325,"src":"432:4:8","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":2331,"nodeType":"InheritanceSpecifier","src":"432:4:8"}],"contractDependencies":[2325,2583,2645,2773,3197,3710,3739,3766,3792,3812,3818,3867,4998],"contractKind":"contract","documentation":{"id":2329,"nodeType":"StructuredDocumentation","src":"97:315:8","text":" @title SafeL2 - An implementation of the Safe contract that emits additional events on transaction executions.\n @notice For a more complete description of the Safe contract, please refer to the main Safe contract `Safe.sol`.\n @author Stefan George - @Georgi87\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":2471,"linearizedBaseContracts":[2471,2325,2773,3867,2645,4998,3766,3812,3710,3197,2583,3792,3739,3818],"name":"SafeL2","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":2355,"name":"SafeMultiSigTransaction","nodeType":"EventDefinition","parameters":{"id":2354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2333,"indexed":false,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2355,"src":"482:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2332,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2335,"indexed":false,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2355,"src":"502:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2334,"name":"uint256","nodeType":"ElementaryTypeName","src":"502:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2337,"indexed":false,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2355,"src":"525:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2336,"name":"bytes","nodeType":"ElementaryTypeName","src":"525:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2339,"indexed":false,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2355,"src":"545:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2338,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"545:14:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":2341,"indexed":false,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":2355,"src":"579:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2340,"name":"uint256","nodeType":"ElementaryTypeName","src":"579:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2343,"indexed":false,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":2355,"src":"606:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2342,"name":"uint256","nodeType":"ElementaryTypeName","src":"606:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2345,"indexed":false,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":2355,"src":"631:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2344,"name":"uint256","nodeType":"ElementaryTypeName","src":"631:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2347,"indexed":false,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":2355,"src":"657:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2346,"name":"address","nodeType":"ElementaryTypeName","src":"657:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2349,"indexed":false,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":2355,"src":"683:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2348,"name":"address","nodeType":"ElementaryTypeName","src":"683:15:8","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2351,"indexed":false,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":2355,"src":"723:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2350,"name":"bytes","nodeType":"ElementaryTypeName","src":"723:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2353,"indexed":false,"mutability":"mutable","name":"additionalInfo","nodeType":"VariableDeclaration","scope":2355,"src":"925:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2352,"name":"bytes","nodeType":"ElementaryTypeName","src":"925:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"472:479:8"},"src":"443:509:8"},{"anonymous":false,"id":2367,"name":"SafeModuleTransaction","nodeType":"EventDefinition","parameters":{"id":2366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2357,"indexed":false,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":2367,"src":"986:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2356,"name":"address","nodeType":"ElementaryTypeName","src":"986:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2359,"indexed":false,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2367,"src":"1002:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2358,"name":"address","nodeType":"ElementaryTypeName","src":"1002:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2361,"indexed":false,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2367,"src":"1014:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2360,"name":"uint256","nodeType":"ElementaryTypeName","src":"1014:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2363,"indexed":false,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2367,"src":"1029:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2362,"name":"bytes","nodeType":"ElementaryTypeName","src":"1029:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2365,"indexed":false,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2367,"src":"1041:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2364,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"1041:14:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"}],"src":"985:81:8"},"src":"958:109:8"},{"baseFunctions":[1789],"body":{"id":2435,"nodeType":"Block","src":"1450:561:8","statements":[{"assignments":[2394],"declarations":[{"constant":false,"id":2394,"mutability":"mutable","name":"additionalInfo","nodeType":"VariableDeclaration","scope":2435,"src":"1460:27:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2393,"name":"bytes","nodeType":"ElementaryTypeName","src":"1460:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2395,"nodeType":"VariableDeclarationStatement","src":"1460:27:8"},{"id":2406,"nodeType":"Block","src":"1497:82:8","statements":[{"expression":{"id":2404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2396,"name":"additionalInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2394,"src":"1511:14:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2399,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1496,"src":"1539:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":2400,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1546:3:8","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1546:10:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2402,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"1558:9:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2397,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1528:3:8","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1528:10:8","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1528:40:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"1511:57:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2405,"nodeType":"ExpressionStatement","src":"1511:57:8"}]},{"eventCall":{"arguments":[{"id":2408,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2369,"src":"1630:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2409,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2371,"src":"1646:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2410,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2373,"src":"1665:4:8","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2411,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2375,"src":"1683:9:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":2412,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2377,"src":"1706:9:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2413,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2379,"src":"1729:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2414,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2381,"src":"1750:8:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2415,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2383,"src":"1772:8:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2416,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2385,"src":"1794:14:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2417,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2387,"src":"1822:10:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2418,"name":"additionalInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2394,"src":"1846:14:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2407,"name":"SafeMultiSigTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2355,"src":"1593:23:8","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_payable_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address payable,bytes memory,bytes memory)"}},"id":2419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1593:277:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2420,"nodeType":"EmitStatement","src":"1588:282:8"},{"expression":{"arguments":[{"id":2423,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2369,"src":"1909:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2424,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2371,"src":"1913:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2425,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2373,"src":"1920:4:8","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2426,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2375,"src":"1926:9:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":2427,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2377,"src":"1937:9:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2428,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2379,"src":"1948:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2429,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2381,"src":"1957:8:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2430,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2383,"src":"1967:8:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2431,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2385,"src":"1977:14:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2432,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2387,"src":"1993:10:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2421,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1887:5:8","typeDescriptions":{"typeIdentifier":"t_super$_SafeL2_$2471","typeString":"contract super SafeL2"}},"id":2422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"execTransaction","nodeType":"MemberAccess","referencedDeclaration":1789,"src":"1887:21:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_payable_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes calldata,enum Enum.Operation,uint256,uint256,uint256,address,address payable,bytes memory) returns (bool)"}},"id":2433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1887:117:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2392,"id":2434,"nodeType":"Return","src":"1880:124:8"}]},"functionSelector":"6a761202","id":2436,"implemented":true,"kind":"function","modifiers":[],"name":"execTransaction","nodeType":"FunctionDefinition","overrides":{"id":2389,"nodeType":"OverrideSpecifier","overrides":[],"src":"1426:8:8"},"parameters":{"id":2388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2369,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2436,"src":"1131:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2368,"name":"address","nodeType":"ElementaryTypeName","src":"1131:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2371,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2436,"src":"1151:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2370,"name":"uint256","nodeType":"ElementaryTypeName","src":"1151:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2373,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2436,"src":"1174:19:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2372,"name":"bytes","nodeType":"ElementaryTypeName","src":"1174:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2375,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2436,"src":"1203:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2374,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"1203:14:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":2377,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":2436,"src":"1237:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2376,"name":"uint256","nodeType":"ElementaryTypeName","src":"1237:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2379,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":2436,"src":"1264:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2378,"name":"uint256","nodeType":"ElementaryTypeName","src":"1264:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2381,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":2436,"src":"1289:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1289:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2383,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":2436,"src":"1315:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2382,"name":"address","nodeType":"ElementaryTypeName","src":"1315:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2385,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":2436,"src":"1341:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2384,"name":"address","nodeType":"ElementaryTypeName","src":"1341:15:8","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2387,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":2436,"src":"1381:23:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2386,"name":"bytes","nodeType":"ElementaryTypeName","src":"1381:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1121:289:8"},"returnParameters":{"id":2392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2391,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":2436,"src":"1444:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2390,"name":"bool","nodeType":"ElementaryTypeName","src":"1444:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1443:6:8"},"scope":2471,"src":"1097:914:8","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[3035],"body":{"id":2469,"nodeType":"Block","src":"2225:162:8","statements":[{"eventCall":{"arguments":[{"expression":{"id":2451,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2262:3:8","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2262:10:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2453,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2438,"src":"2274:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2454,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"2278:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2455,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"2285:4:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2456,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2444,"src":"2291:9:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}],"id":2450,"name":"SafeModuleTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2367,"src":"2240:21:8","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$returns$__$","typeString":"function (address,address,uint256,bytes memory,enum Enum.Operation)"}},"id":2457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2240:61:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2458,"nodeType":"EmitStatement","src":"2235:66:8"},{"expression":{"id":2467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2459,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"2311:7:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2462,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2438,"src":"2353:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2463,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"2357:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2464,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"2364:4:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2465,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2444,"src":"2370:9:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}],"expression":{"id":2460,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2321:5:8","typeDescriptions":{"typeIdentifier":"t_super$_SafeL2_$2471","typeString":"contract super SafeL2"}},"id":2461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"execTransactionFromModule","nodeType":"MemberAccess","referencedDeclaration":3035,"src":"2321:31:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation) returns (bool)"}},"id":2466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2321:59:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2311:69:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2468,"nodeType":"ExpressionStatement","src":"2311:69:8"}]},"functionSelector":"468721a7","id":2470,"implemented":true,"kind":"function","modifiers":[],"name":"execTransactionFromModule","nodeType":"FunctionDefinition","overrides":{"id":2446,"nodeType":"OverrideSpecifier","overrides":[],"src":"2193:8:8"},"parameters":{"id":2445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2438,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2470,"src":"2085:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2437,"name":"address","nodeType":"ElementaryTypeName","src":"2085:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2440,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2470,"src":"2105:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2439,"name":"uint256","nodeType":"ElementaryTypeName","src":"2105:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2442,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2470,"src":"2128:17:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2441,"name":"bytes","nodeType":"ElementaryTypeName","src":"2128:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2444,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2470,"src":"2155:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2443,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"2155:14:8","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"}],"src":"2075:110:8"},"returnParameters":{"id":2449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2448,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":2470,"src":"2211:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2447,"name":"bool","nodeType":"ElementaryTypeName","src":"2211:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2210:14:8"},"scope":2471,"src":"2041:346:8","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":2472,"src":"413:1976:8"}],"src":"42:2348:8"},"id":8},"contracts/accessors/SimulateTxAccessor.sol":{"ast":{"absolutePath":"contracts/accessors/SimulateTxAccessor.sol","exportedSymbols":{"Enum":[3717],"Executor":[2583],"SimulateTxAccessor":[2551]},"id":2552,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":2473,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:9"},{"absolutePath":"contracts/base/Executor.sol","file":"../base/Executor.sol","id":2474,"nodeType":"ImportDirective","scope":2552,"sourceUnit":2584,"src":"75:30:9","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2476,"name":"Executor","nodeType":"UserDefinedTypeName","referencedDeclaration":2583,"src":"305:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_Executor_$2583","typeString":"contract Executor"}},"id":2477,"nodeType":"InheritanceSpecifier","src":"305:8:9"}],"contractDependencies":[2583],"contractKind":"contract","documentation":{"id":2475,"nodeType":"StructuredDocumentation","src":"107:166:9","text":" @title Simulate Transaction Accessor.\n @notice Can be used with StorageAccessible to simulate Safe transactions.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":2551,"linearizedBaseContracts":[2551,2583],"name":"SimulateTxAccessor","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2479,"mutability":"immutable","name":"accessorSingleton","nodeType":"VariableDeclaration","scope":2551,"src":"320:43:9","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2478,"name":"address","nodeType":"ElementaryTypeName","src":"320:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"body":{"id":2489,"nodeType":"Block","src":"384:50:9","statements":[{"expression":{"id":2487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2482,"name":"accessorSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2479,"src":"394:17:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2485,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"422:4:9","typeDescriptions":{"typeIdentifier":"t_contract$_SimulateTxAccessor_$2551","typeString":"contract SimulateTxAccessor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SimulateTxAccessor_$2551","typeString":"contract SimulateTxAccessor"}],"id":2484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"414:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2483,"name":"address","nodeType":"ElementaryTypeName","src":"414:7:9","typeDescriptions":{}}},"id":2486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"414:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"394:33:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2488,"nodeType":"ExpressionStatement","src":"394:33:9"}]},"id":2490,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2480,"nodeType":"ParameterList","parameters":[],"src":"381:2:9"},"returnParameters":{"id":2481,"nodeType":"ParameterList","parameters":[],"src":"384:0:9"},"scope":2551,"src":"370:64:9","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2504,"nodeType":"Block","src":"628:132:9","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2496,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"654:4:9","typeDescriptions":{"typeIdentifier":"t_contract$_SimulateTxAccessor_$2551","typeString":"contract SimulateTxAccessor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SimulateTxAccessor_$2551","typeString":"contract SimulateTxAccessor"}],"id":2495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"646:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2494,"name":"address","nodeType":"ElementaryTypeName","src":"646:7:9","typeDescriptions":{}}},"id":2497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"646:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2498,"name":"accessorSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2479,"src":"663:17:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"646:34:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53696d756c61746554784163636573736f722073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c","id":2500,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"682:59:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_7498ff62dc2b2d15f0dcc3ecf8e94831812d542404a74147f014771b2a3727a5","typeString":"literal_string \"SimulateTxAccessor should only be called via delegatecall\""},"value":"SimulateTxAccessor should only be called via delegatecall"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7498ff62dc2b2d15f0dcc3ecf8e94831812d542404a74147f014771b2a3727a5","typeString":"literal_string \"SimulateTxAccessor should only be called via delegatecall\""}],"id":2493,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"638:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"638:104:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2502,"nodeType":"ExpressionStatement","src":"638:104:9"},{"id":2503,"nodeType":"PlaceholderStatement","src":"752:1:9"}]},"documentation":{"id":2491,"nodeType":"StructuredDocumentation","src":"440:155:9","text":" @notice Modifier to make a function callable via delegatecall only.\n If the function is called via a regular call, it will revert."},"id":2505,"name":"onlyDelegateCall","nodeType":"ModifierDefinition","parameters":{"id":2492,"nodeType":"ParameterList","parameters":[],"src":"625:2:9"},"src":"600:160:9","virtual":false,"visibility":"internal"},{"body":{"id":2549,"nodeType":"Block","src":"1809:821:9","statements":[{"assignments":[2526],"declarations":[{"constant":false,"id":2526,"mutability":"mutable","name":"startGas","nodeType":"VariableDeclaration","scope":2549,"src":"1819:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2525,"name":"uint256","nodeType":"ElementaryTypeName","src":"1819:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2529,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":2527,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"1838:7:9","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1838:9:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1819:28:9"},{"expression":{"id":2539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2530,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"1857:7:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2532,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"1875:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2533,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2510,"src":"1879:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2534,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"1886:4:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2535,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2514,"src":"1892:9:9","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"arguments":[],"expression":{"argumentTypes":[],"id":2536,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"1903:7:9","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":2537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1903:9:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2531,"name":"execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2582,"src":"1867:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)"}},"id":2538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1867:46:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1857:56:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2540,"nodeType":"ExpressionStatement","src":"1857:56:9"},{"expression":{"id":2546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2541,"name":"estimate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"1923:8:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2542,"name":"startGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2526,"src":"1934:8:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2543,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"1945:7:9","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":2544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1945:9:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1934:20:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1923:31:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2547,"nodeType":"ExpressionStatement","src":"1923:31:9"},{"AST":{"nodeType":"YulBlock","src":"2029:595:9","statements":[{"nodeType":"YulVariableDeclaration","src":"2084:22:9","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2101:4:9","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2095:5:9"},"nodeType":"YulFunctionCall","src":"2095:11:9"},"variables":[{"name":"ptr","nodeType":"YulTypedName","src":"2088:3:9","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2306:4:9","type":"","value":"0x40"},{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"2316:3:9"},{"arguments":[{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2325:14:9"},"nodeType":"YulFunctionCall","src":"2325:16:9"},{"kind":"number","nodeType":"YulLiteral","src":"2343:4:9","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2321:3:9"},"nodeType":"YulFunctionCall","src":"2321:27:9"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2312:3:9"},"nodeType":"YulFunctionCall","src":"2312:37:9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2299:6:9"},"nodeType":"YulFunctionCall","src":"2299:51:9"},"nodeType":"YulExpressionStatement","src":"2299:51:9"},{"expression":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"2400:3:9"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2405:14:9"},"nodeType":"YulFunctionCall","src":"2405:16:9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2393:6:9"},"nodeType":"YulFunctionCall","src":"2393:29:9"},"nodeType":"YulExpressionStatement","src":"2393:29:9"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"2484:3:9"},{"kind":"number","nodeType":"YulLiteral","src":"2489:4:9","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2480:3:9"},"nodeType":"YulFunctionCall","src":"2480:14:9"},{"kind":"number","nodeType":"YulLiteral","src":"2496:1:9","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2499:14:9"},"nodeType":"YulFunctionCall","src":"2499:16:9"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"2465:14:9"},"nodeType":"YulFunctionCall","src":"2465:51:9"},"nodeType":"YulExpressionStatement","src":"2465:51:9"},{"nodeType":"YulAssignment","src":"2597:17:9","value":{"name":"ptr","nodeType":"YulIdentifier","src":"2611:3:9"},"variableNames":[{"name":"returnData","nodeType":"YulIdentifier","src":"2597:10:9"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2523,"isOffset":false,"isSlot":false,"src":"2597:10:9","valueSize":1}],"id":2548,"nodeType":"InlineAssembly","src":"2020:604:9"}]},"documentation":{"id":2506,"nodeType":"StructuredDocumentation","src":"766:816:9","text":" @notice Simulates a Safe transaction and returns the used gas, success boolean and the return data.\n @dev Executes the specified operation {Call, DelegateCall} and returns operation-specific data.\n      Has to be called via delegatecall.\n      This returns the data equal to `abi.encode(uint256(etimate), bool(success), bytes(returnData))`.\n      Specifically, the returndata will be:\n      `estimate:uint256 || success:bool || returnData.length:uint256 || returnData:bytes`.\n @param to Destination address .\n @param value Native token value.\n @param data Data payload.\n @param operation Operation type {Call, DelegateCall}.\n @return estimate Gas used.\n @return success Success boolean value.\n @return returnData Return data."},"functionSelector":"1c5fb211","id":2550,"implemented":true,"kind":"function","modifiers":[{"id":2517,"modifierName":{"id":2516,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2505,"src":"1726:16:9","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"1726:16:9"}],"name":"simulate","nodeType":"FunctionDefinition","parameters":{"id":2515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2508,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2550,"src":"1614:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2507,"name":"address","nodeType":"ElementaryTypeName","src":"1614:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2510,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2550,"src":"1634:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2509,"name":"uint256","nodeType":"ElementaryTypeName","src":"1634:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2512,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2550,"src":"1657:19:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2511,"name":"bytes","nodeType":"ElementaryTypeName","src":"1657:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2514,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2550,"src":"1686:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2513,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"1686:14:9","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"}],"src":"1604:112:9"},"returnParameters":{"id":2524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2519,"mutability":"mutable","name":"estimate","nodeType":"VariableDeclaration","scope":2550,"src":"1752:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1752:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2521,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":2550,"src":"1770:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2520,"name":"bool","nodeType":"ElementaryTypeName","src":"1770:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2523,"mutability":"mutable","name":"returnData","nodeType":"VariableDeclaration","scope":2550,"src":"1784:23:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2522,"name":"bytes","nodeType":"ElementaryTypeName","src":"1784:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1751:57:9"},"scope":2551,"src":"1587:1043:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2552,"src":"274:2358:9"}],"src":"42:2591:9"},"id":9},"contracts/base/Executor.sol":{"ast":{"absolutePath":"contracts/base/Executor.sol","exportedSymbols":{"Enum":[3717],"Executor":[2583]},"id":2584,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":2553,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:10"},{"absolutePath":"contracts/common/Enum.sol","file":"../common/Enum.sol","id":2554,"nodeType":"ImportDirective","scope":2584,"sourceUnit":3718,"src":"74:28:10","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":2555,"nodeType":"StructuredDocumentation","src":"104:110:10","text":" @title Executor - A contract that can execute transactions\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":2583,"linearizedBaseContracts":[2583],"name":"Executor","nodeType":"ContractDefinition","nodes":[{"body":{"id":2581,"nodeType":"Block","src":"965:457:10","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"id":2575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2571,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2564,"src":"979:9:10","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":2572,"name":"Enum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"992:4:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Enum_$3717_$","typeString":"type(contract Enum)"}},"id":2573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"Operation","nodeType":"MemberAccess","referencedDeclaration":3716,"src":"992:14:10","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Operation_$3716_$","typeString":"type(enum Enum.Operation)"}},"id":2574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"DelegateCall","nodeType":"MemberAccess","src":"992:27:10","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"src":"979:40:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2579,"nodeType":"Block","src":"1222:194:10","statements":[{"AST":{"nodeType":"YulBlock","src":"1305:101:10","statements":[{"nodeType":"YulAssignment","src":"1323:69:10","value":{"arguments":[{"name":"txGas","nodeType":"YulIdentifier","src":"1339:5:10"},{"name":"to","nodeType":"YulIdentifier","src":"1346:2:10"},{"name":"value","nodeType":"YulIdentifier","src":"1350:5:10"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1361:4:10"},{"kind":"number","nodeType":"YulLiteral","src":"1367:4:10","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1357:3:10"},"nodeType":"YulFunctionCall","src":"1357:15:10"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1380:4:10"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1374:5:10"},"nodeType":"YulFunctionCall","src":"1374:11:10"},{"kind":"number","nodeType":"YulLiteral","src":"1387:1:10","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1390:1:10","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"1334:4:10"},"nodeType":"YulFunctionCall","src":"1334:58:10"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"1323:7:10"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2562,"isOffset":false,"isSlot":false,"src":"1361:4:10","valueSize":1},{"declaration":2562,"isOffset":false,"isSlot":false,"src":"1380:4:10","valueSize":1},{"declaration":2569,"isOffset":false,"isSlot":false,"src":"1323:7:10","valueSize":1},{"declaration":2558,"isOffset":false,"isSlot":false,"src":"1346:2:10","valueSize":1},{"declaration":2566,"isOffset":false,"isSlot":false,"src":"1339:5:10","valueSize":1},{"declaration":2560,"isOffset":false,"isSlot":false,"src":"1350:5:10","valueSize":1}],"id":2578,"nodeType":"InlineAssembly","src":"1296:110:10"}]},"id":2580,"nodeType":"IfStatement","src":"975:441:10","trueBody":{"id":2577,"nodeType":"Block","src":"1021:195:10","statements":[{"AST":{"nodeType":"YulBlock","src":"1104:102:10","statements":[{"nodeType":"YulAssignment","src":"1122:70:10","value":{"arguments":[{"name":"txGas","nodeType":"YulIdentifier","src":"1146:5:10"},{"name":"to","nodeType":"YulIdentifier","src":"1153:2:10"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1161:4:10"},{"kind":"number","nodeType":"YulLiteral","src":"1167:4:10","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1157:3:10"},"nodeType":"YulFunctionCall","src":"1157:15:10"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1180:4:10"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1174:5:10"},"nodeType":"YulFunctionCall","src":"1174:11:10"},{"kind":"number","nodeType":"YulLiteral","src":"1187:1:10","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1190:1:10","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"1133:12:10"},"nodeType":"YulFunctionCall","src":"1133:59:10"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"1122:7:10"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2562,"isOffset":false,"isSlot":false,"src":"1161:4:10","valueSize":1},{"declaration":2562,"isOffset":false,"isSlot":false,"src":"1180:4:10","valueSize":1},{"declaration":2569,"isOffset":false,"isSlot":false,"src":"1122:7:10","valueSize":1},{"declaration":2558,"isOffset":false,"isSlot":false,"src":"1153:2:10","valueSize":1},{"declaration":2566,"isOffset":false,"isSlot":false,"src":"1146:5:10","valueSize":1}],"id":2576,"nodeType":"InlineAssembly","src":"1095:111:10"}]}}]},"documentation":{"id":2556,"nodeType":"StructuredDocumentation","src":"248:530:10","text":" @notice Executes either a delegatecall or a call with provided parameters.\n @dev This method doesn't perform any sanity check of the transaction, such as:\n      - if the contract at `to` address has code or not\n      It is the responsibility of the caller to perform such checks.\n @param to Destination address.\n @param value Ether value.\n @param data Data payload.\n @param operation Operation type.\n @return success boolean flag indicating if the call succeeded."},"id":2582,"implemented":true,"kind":"function","modifiers":[],"name":"execute","nodeType":"FunctionDefinition","parameters":{"id":2567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2558,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2582,"src":"809:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2557,"name":"address","nodeType":"ElementaryTypeName","src":"809:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2560,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2582,"src":"829:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2559,"name":"uint256","nodeType":"ElementaryTypeName","src":"829:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2562,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2582,"src":"852:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2561,"name":"bytes","nodeType":"ElementaryTypeName","src":"852:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2564,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2582,"src":"879:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2563,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"879:14:10","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":2566,"mutability":"mutable","name":"txGas","nodeType":"VariableDeclaration","scope":2582,"src":"913:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2565,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"799:133:10"},"returnParameters":{"id":2570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2569,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":2582,"src":"951:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2568,"name":"bool","nodeType":"ElementaryTypeName","src":"951:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"950:14:10"},"scope":2583,"src":"783:639:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2584,"src":"215:1209:10"}],"src":"42:1383:10"},"id":10},"contracts/base/FallbackManager.sol":{"ast":{"absolutePath":"contracts/base/FallbackManager.sol","exportedSymbols":{"FallbackManager":[2645],"SelfAuthorized":[3792]},"id":2646,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":2585,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:11"},{"absolutePath":"contracts/common/SelfAuthorized.sol","file":"../common/SelfAuthorized.sol","id":2586,"nodeType":"ImportDirective","scope":2646,"sourceUnit":3793,"src":"75:38:11","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2588,"name":"SelfAuthorized","nodeType":"UserDefinedTypeName","referencedDeclaration":3792,"src":"287:14:11","typeDescriptions":{"typeIdentifier":"t_contract$_SelfAuthorized_$3792","typeString":"contract SelfAuthorized"}},"id":2589,"nodeType":"InheritanceSpecifier","src":"287:14:11"}],"contractDependencies":[3792],"contractKind":"contract","documentation":{"id":2587,"nodeType":"StructuredDocumentation","src":"115:134:11","text":" @title Fallback Manager - A contract managing fallback calls made to this contract\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":2645,"linearizedBaseContracts":[2645,3792],"name":"FallbackManager","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":2593,"name":"ChangedFallbackHandler","nodeType":"EventDefinition","parameters":{"id":2592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2591,"indexed":true,"mutability":"mutable","name":"handler","nodeType":"VariableDeclaration","scope":2593,"src":"337:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2590,"name":"address","nodeType":"ElementaryTypeName","src":"337:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"336:25:11"},"src":"308:54:11"},{"constant":true,"id":2596,"mutability":"constant","name":"FALLBACK_HANDLER_STORAGE_SLOT","nodeType":"VariableDeclaration","scope":2645,"src":"421:124:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2594,"name":"bytes32","nodeType":"ElementaryTypeName","src":"421:7:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307836633961366334613339323834653337656431636635336433333735373764313432313261343837306662393736613433363663363933623933393931386435","id":2595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"479:66:11","typeDescriptions":{"typeIdentifier":"t_rational_49122629484629529244014240937346711770925847994644146912111677022347558721749_by_1","typeString":"int_const 4912...(69 digits omitted)...1749"},"value":"0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5"},"visibility":"internal"},{"body":{"id":2617,"nodeType":"Block","src":"751:1361:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2603,"name":"handler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2599,"src":"1897:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":2606,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1916:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_FallbackManager_$2645","typeString":"contract FallbackManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FallbackManager_$2645","typeString":"contract FallbackManager"}],"id":2605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1908:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2604,"name":"address","nodeType":"ElementaryTypeName","src":"1908:7:11","typeDescriptions":{}}},"id":2607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1908:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1897:24:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753343030","id":2609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1923:7:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_f31aea2d758c1bc976ea4b6db8005af34a1f6d8fd0cba0d31e0228d78d6a5ae2","typeString":"literal_string \"GS400\""},"value":"GS400"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f31aea2d758c1bc976ea4b6db8005af34a1f6d8fd0cba0d31e0228d78d6a5ae2","typeString":"literal_string \"GS400\""}],"id":2602,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1889:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1889:42:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2611,"nodeType":"ExpressionStatement","src":"1889:42:11"},{"assignments":[2613],"declarations":[{"constant":false,"id":2613,"mutability":"mutable","name":"slot","nodeType":"VariableDeclaration","scope":2617,"src":"1942:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2612,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1942:7:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2615,"initialValue":{"id":2614,"name":"FALLBACK_HANDLER_STORAGE_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2596,"src":"1957:29:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1942:44:11"},{"AST":{"nodeType":"YulBlock","src":"2061:45:11","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"2082:4:11"},{"name":"handler","nodeType":"YulIdentifier","src":"2088:7:11"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2075:6:11"},"nodeType":"YulFunctionCall","src":"2075:21:11"},"nodeType":"YulExpressionStatement","src":"2075:21:11"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2599,"isOffset":false,"isSlot":false,"src":"2088:7:11","valueSize":1},{"declaration":2613,"isOffset":false,"isSlot":false,"src":"2082:4:11","valueSize":1}],"id":2616,"nodeType":"InlineAssembly","src":"2052:54:11"}]},"documentation":{"id":2597,"nodeType":"StructuredDocumentation","src":"552:132:11","text":"  @notice Internal function to set the fallback handler.\n  @param handler contract to handle fallback calls."},"id":2618,"implemented":true,"kind":"function","modifiers":[],"name":"internalSetFallbackHandler","nodeType":"FunctionDefinition","parameters":{"id":2600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2599,"mutability":"mutable","name":"handler","nodeType":"VariableDeclaration","scope":2618,"src":"725:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2598,"name":"address","nodeType":"ElementaryTypeName","src":"725:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"724:17:11"},"returnParameters":{"id":2601,"nodeType":"ParameterList","parameters":[],"src":"751:0:11"},"scope":2645,"src":"689:1423:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2634,"nodeType":"Block","src":"2500:98:11","statements":[{"expression":{"arguments":[{"id":2627,"name":"handler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2621,"src":"2537:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2626,"name":"internalSetFallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2618,"src":"2510:26:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2510:35:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2629,"nodeType":"ExpressionStatement","src":"2510:35:11"},{"eventCall":{"arguments":[{"id":2631,"name":"handler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2621,"src":"2583:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2630,"name":"ChangedFallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2593,"src":"2560:22:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2560:31:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2633,"nodeType":"EmitStatement","src":"2555:36:11"}]},"documentation":{"id":2619,"nodeType":"StructuredDocumentation","src":"2118:314:11","text":" @notice Set Fallback Handler to `handler` for the Safe.\n @dev Only fallback calls without value and with data will be forwarded.\n      This can only be done via a Safe transaction.\n      Cannot be set to the Safe itself.\n @param handler contract to handle fallback calls."},"functionSelector":"f08a0323","id":2635,"implemented":true,"kind":"function","modifiers":[{"id":2624,"modifierName":{"id":2623,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"2489:10:11","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2489:10:11"}],"name":"setFallbackHandler","nodeType":"FunctionDefinition","parameters":{"id":2622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2621,"mutability":"mutable","name":"handler","nodeType":"VariableDeclaration","scope":2635,"src":"2465:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2620,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2464:17:11"},"returnParameters":{"id":2625,"nodeType":"ParameterList","parameters":[],"src":"2500:0:11"},"scope":2645,"src":"2437:161:11","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2643,"nodeType":"Block","src":"3183:872:11","statements":[{"assignments":[2639],"declarations":[{"constant":false,"id":2639,"mutability":"mutable","name":"slot","nodeType":"VariableDeclaration","scope":2643,"src":"3193:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2638,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3193:7:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2641,"initialValue":{"id":2640,"name":"FALLBACK_HANDLER_STORAGE_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2596,"src":"3208:29:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3193:44:11"},{"AST":{"nodeType":"YulBlock","src":"3312:737:11","statements":[{"nodeType":"YulVariableDeclaration","src":"3326:26:11","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3347:4:11"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"3341:5:11"},"nodeType":"YulFunctionCall","src":"3341:11:11"},"variables":[{"name":"handler","nodeType":"YulTypedName","src":"3330:7:11","type":""}]},{"body":{"nodeType":"YulBlock","src":"3384:44:11","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3409:1:11","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3412:1:11","type":"","value":"0"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"3402:6:11"},"nodeType":"YulFunctionCall","src":"3402:12:11"},"nodeType":"YulExpressionStatement","src":"3402:12:11"}]},"condition":{"arguments":[{"name":"handler","nodeType":"YulIdentifier","src":"3375:7:11"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3368:6:11"},"nodeType":"YulFunctionCall","src":"3368:15:11"},"nodeType":"YulIf","src":"3365:2:11"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3454:1:11","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3457:1:11","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"3460:12:11"},"nodeType":"YulFunctionCall","src":"3460:14:11"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3441:12:11"},"nodeType":"YulFunctionCall","src":"3441:34:11"},"nodeType":"YulExpressionStatement","src":"3441:34:11"},{"expression":{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"3673:12:11"},"nodeType":"YulFunctionCall","src":"3673:14:11"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:2:11","type":"","value":"96"},{"arguments":[],"functionName":{"name":"caller","nodeType":"YulIdentifier","src":"3697:6:11"},"nodeType":"YulFunctionCall","src":"3697:8:11"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3689:3:11"},"nodeType":"YulFunctionCall","src":"3689:17:11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3666:6:11"},"nodeType":"YulFunctionCall","src":"3666:41:11"},"nodeType":"YulExpressionStatement","src":"3666:41:11"},{"nodeType":"YulVariableDeclaration","src":"3785:72:11","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"3805:3:11"},"nodeType":"YulFunctionCall","src":"3805:5:11"},{"name":"handler","nodeType":"YulIdentifier","src":"3812:7:11"},{"kind":"number","nodeType":"YulLiteral","src":"3821:1:11","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3824:1:11","type":"","value":"0"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"3831:12:11"},"nodeType":"YulFunctionCall","src":"3831:14:11"},{"kind":"number","nodeType":"YulLiteral","src":"3847:2:11","type":"","value":"20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3827:3:11"},"nodeType":"YulFunctionCall","src":"3827:23:11"},{"kind":"number","nodeType":"YulLiteral","src":"3852:1:11","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3855:1:11","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"3800:4:11"},"nodeType":"YulFunctionCall","src":"3800:57:11"},"variables":[{"name":"success","nodeType":"YulTypedName","src":"3789:7:11","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3885:1:11","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3888:1:11","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"3891:14:11"},"nodeType":"YulFunctionCall","src":"3891:16:11"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"3870:14:11"},"nodeType":"YulFunctionCall","src":"3870:38:11"},"nodeType":"YulExpressionStatement","src":"3870:38:11"},{"body":{"nodeType":"YulBlock","src":"3940:59:11","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3965:1:11","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"3968:14:11"},"nodeType":"YulFunctionCall","src":"3968:16:11"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3958:6:11"},"nodeType":"YulFunctionCall","src":"3958:27:11"},"nodeType":"YulExpressionStatement","src":"3958:27:11"}]},"condition":{"arguments":[{"name":"success","nodeType":"YulIdentifier","src":"3931:7:11"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3924:6:11"},"nodeType":"YulFunctionCall","src":"3924:15:11"},"nodeType":"YulIf","src":"3921:2:11"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4019:1:11","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4022:14:11"},"nodeType":"YulFunctionCall","src":"4022:16:11"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"4012:6:11"},"nodeType":"YulFunctionCall","src":"4012:27:11"},"nodeType":"YulExpressionStatement","src":"4012:27:11"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2639,"isOffset":false,"isSlot":false,"src":"3347:4:11","valueSize":1}],"id":2642,"nodeType":"InlineAssembly","src":"3303:746:11"}]},"id":2644,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2636,"nodeType":"ParameterList","parameters":[],"src":"3171:2:11"},"returnParameters":{"id":2637,"nodeType":"ParameterList","parameters":[],"src":"3183:0:11"},"scope":2645,"src":"3163:892:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2646,"src":"250:3807:11"}],"src":"42:4016:11"},"id":11},"contracts/base/GuardManager.sol":{"ast":{"absolutePath":"contracts/base/GuardManager.sol","exportedSymbols":{"BaseGuard":[2711],"Enum":[3717],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"SelfAuthorized":[3792]},"id":2774,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":2647,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:12"},{"absolutePath":"contracts/common/Enum.sol","file":"../common/Enum.sol","id":2648,"nodeType":"ImportDirective","scope":2774,"sourceUnit":3718,"src":"75:28:12","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/common/SelfAuthorized.sol","file":"../common/SelfAuthorized.sol","id":2649,"nodeType":"ImportDirective","scope":2774,"sourceUnit":3793,"src":"104:38:12","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/interfaces/IERC165.sol","file":"../interfaces/IERC165.sol","id":2650,"nodeType":"ImportDirective","scope":2774,"sourceUnit":4993,"src":"143:35:12","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2651,"name":"IERC165","nodeType":"UserDefinedTypeName","referencedDeclaration":4992,"src":"199:7:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC165_$4992","typeString":"contract IERC165"}},"id":2652,"nodeType":"InheritanceSpecifier","src":"199:7:12"}],"contractDependencies":[4992],"contractKind":"interface","fullyImplemented":false,"id":2685,"linearizedBaseContracts":[2685,4992],"name":"Guard","nodeType":"ContractDefinition","nodes":[{"functionSelector":"75f0bb52","id":2677,"implemented":false,"kind":"function","modifiers":[],"name":"checkTransaction","nodeType":"FunctionDefinition","parameters":{"id":2675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2654,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2677,"src":"248:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2653,"name":"address","nodeType":"ElementaryTypeName","src":"248:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2656,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2677,"src":"268:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2655,"name":"uint256","nodeType":"ElementaryTypeName","src":"268:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2658,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2677,"src":"291:17:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2657,"name":"bytes","nodeType":"ElementaryTypeName","src":"291:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2660,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":2677,"src":"318:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2659,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"318:14:12","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":2662,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":2677,"src":"352:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2661,"name":"uint256","nodeType":"ElementaryTypeName","src":"352:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2664,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":2677,"src":"379:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2663,"name":"uint256","nodeType":"ElementaryTypeName","src":"379:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2666,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":2677,"src":"404:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2665,"name":"uint256","nodeType":"ElementaryTypeName","src":"404:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2668,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":2677,"src":"430:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2667,"name":"address","nodeType":"ElementaryTypeName","src":"430:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2670,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":2677,"src":"456:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2669,"name":"address","nodeType":"ElementaryTypeName","src":"456:15:12","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2672,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":2677,"src":"496:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2671,"name":"bytes","nodeType":"ElementaryTypeName","src":"496:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2674,"mutability":"mutable","name":"msgSender","nodeType":"VariableDeclaration","scope":2677,"src":"529:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2673,"name":"address","nodeType":"ElementaryTypeName","src":"529:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"238:314:12"},"returnParameters":{"id":2676,"nodeType":"ParameterList","parameters":[],"src":"561:0:12"},"scope":2685,"src":"213:349:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"93271368","id":2684,"implemented":false,"kind":"function","modifiers":[],"name":"checkAfterExecution","nodeType":"FunctionDefinition","parameters":{"id":2682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2679,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":2684,"src":"597:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2678,"name":"bytes32","nodeType":"ElementaryTypeName","src":"597:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2681,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":2684,"src":"613:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2680,"name":"bool","nodeType":"ElementaryTypeName","src":"613:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"596:30:12"},"returnParameters":{"id":2683,"nodeType":"ParameterList","parameters":[],"src":"635:0:12"},"scope":2685,"src":"568:68:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2774,"src":"180:458:12"},{"abstract":true,"baseContracts":[{"baseName":{"id":2686,"name":"Guard","nodeType":"UserDefinedTypeName","referencedDeclaration":2685,"src":"671:5:12","typeDescriptions":{"typeIdentifier":"t_contract$_Guard_$2685","typeString":"contract Guard"}},"id":2687,"nodeType":"InheritanceSpecifier","src":"671:5:12"}],"contractDependencies":[2685,4992],"contractKind":"contract","fullyImplemented":false,"id":2711,"linearizedBaseContracts":[2711,2685,4992],"name":"BaseGuard","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[4991],"body":{"id":2709,"nodeType":"Block","src":"776:158:12","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":2700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2695,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2689,"src":"805:11:12","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":2697,"name":"Guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"825:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Guard_$2685_$","typeString":"type(contract Guard)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_Guard_$2685_$","typeString":"type(contract Guard)"}],"id":2696,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"820:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"820:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_Guard_$2685","typeString":"type(contract Guard)"}},"id":2699,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"820:23:12","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"805:38:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2701,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2689,"src":"873:11:12","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":2703,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"893:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$4992_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$4992_$","typeString":"type(contract IERC165)"}],"id":2702,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"888:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"888:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$4992","typeString":"type(contract IERC165)"}},"id":2705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"888:25:12","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"873:40:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"805:108:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2694,"id":2708,"nodeType":"Return","src":"786:127:12"}]},"functionSelector":"01ffc9a7","id":2710,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nodeType":"FunctionDefinition","overrides":{"id":2691,"nodeType":"OverrideSpecifier","overrides":[],"src":"752:8:12"},"parameters":{"id":2690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2689,"mutability":"mutable","name":"interfaceId","nodeType":"VariableDeclaration","scope":2710,"src":"710:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2688,"name":"bytes4","nodeType":"ElementaryTypeName","src":"710:6:12","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"709:20:12"},"returnParameters":{"id":2694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2693,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":2710,"src":"770:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2692,"name":"bool","nodeType":"ElementaryTypeName","src":"770:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"769:6:12"},"scope":2711,"src":"683:251:12","stateMutability":"view","virtual":true,"visibility":"external"}],"scope":2774,"src":"640:296:12"},{"abstract":true,"baseContracts":[{"baseName":{"id":2713,"name":"SelfAuthorized","nodeType":"UserDefinedTypeName","referencedDeclaration":3792,"src":"1142:14:12","typeDescriptions":{"typeIdentifier":"t_contract$_SelfAuthorized_$3792","typeString":"contract SelfAuthorized"}},"id":2714,"nodeType":"InheritanceSpecifier","src":"1142:14:12"}],"contractDependencies":[3792],"contractKind":"contract","documentation":{"id":2712,"nodeType":"StructuredDocumentation","src":"938:169:12","text":" @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":2773,"linearizedBaseContracts":[2773,3792],"name":"GuardManager","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":2718,"name":"ChangedGuard","nodeType":"EventDefinition","parameters":{"id":2717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2716,"indexed":true,"mutability":"mutable","name":"guard","nodeType":"VariableDeclaration","scope":2718,"src":"1182:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2715,"name":"address","nodeType":"ElementaryTypeName","src":"1182:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1181:23:12"},"src":"1163:42:12"},{"constant":true,"id":2721,"mutability":"constant","name":"GUARD_STORAGE_SLOT","nodeType":"VariableDeclaration","scope":2773,"src":"1259:113:12","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2719,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1259:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307834613230346636323063386335636364636133666435346430303362616464383562613530303433366134333166306362646134663535386339336333346338","id":2720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1306:66:12","typeDescriptions":{"typeIdentifier":"t_rational_33528237782592280163068556224972516439282563014722366175641814928123294921928_by_1","typeString":"int_const 3352...(69 digits omitted)...1928"},"value":"0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8"},"visibility":"internal"},{"body":{"id":2759,"nodeType":"Block","src":"2015:333:12","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2729,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2724,"src":"2029:5:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2046: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":2731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2038:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2730,"name":"address","nodeType":"ElementaryTypeName","src":"2038:7:12","typeDescriptions":{}}},"id":2733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2038:10:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2029:19:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2749,"nodeType":"IfStatement","src":"2025:123:12","trueBody":{"id":2748,"nodeType":"Block","src":"2050:98:12","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"arguments":[{"id":2741,"name":"Guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"2108:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Guard_$2685_$","typeString":"type(contract Guard)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_Guard_$2685_$","typeString":"type(contract Guard)"}],"id":2740,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2103:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2103:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_Guard_$2685","typeString":"type(contract Guard)"}},"id":2743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"2103:23:12","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"id":2737,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2724,"src":"2078:5:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2736,"name":"Guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"2072:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Guard_$2685_$","typeString":"type(contract Guard)"}},"id":2738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2072:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Guard_$2685","typeString":"contract Guard"}},"id":2739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":4991,"src":"2072:30:12","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view external returns (bool)"}},"id":2744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2072:55:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753333030","id":2745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2129:7:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c2a4c0da6073a4ef35f113e24388fa780c351ad02fefd784ffba62884174edf0","typeString":"literal_string \"GS300\""},"value":"GS300"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c2a4c0da6073a4ef35f113e24388fa780c351ad02fefd784ffba62884174edf0","typeString":"literal_string \"GS300\""}],"id":2735,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2064:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2064:73:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2747,"nodeType":"ExpressionStatement","src":"2064:73:12"}]}},{"assignments":[2751],"declarations":[{"constant":false,"id":2751,"mutability":"mutable","name":"slot","nodeType":"VariableDeclaration","scope":2759,"src":"2157:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2750,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2157:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2753,"initialValue":{"id":2752,"name":"GUARD_STORAGE_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2721,"src":"2172:18:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2157:33:12"},{"AST":{"nodeType":"YulBlock","src":"2265:43:12","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"2286:4:12"},{"name":"guard","nodeType":"YulIdentifier","src":"2292:5:12"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2279:6:12"},"nodeType":"YulFunctionCall","src":"2279:19:12"},"nodeType":"YulExpressionStatement","src":"2279:19:12"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2724,"isOffset":false,"isSlot":false,"src":"2292:5:12","valueSize":1},{"declaration":2751,"isOffset":false,"isSlot":false,"src":"2286:4:12","valueSize":1}],"id":2754,"nodeType":"InlineAssembly","src":"2256:52:12"},{"eventCall":{"arguments":[{"id":2756,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2724,"src":"2335:5:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2755,"name":"ChangedGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2718,"src":"2322:12:12","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2322:19:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2758,"nodeType":"EmitStatement","src":"2317:24:12"}]},"documentation":{"id":2722,"nodeType":"StructuredDocumentation","src":"1379:578:12","text":" @dev Set a guard that checks transactions before execution\n      This can only be done via a Safe transaction.\n      ⚠️ IMPORTANT: Since a guard has full power to block Safe transaction execution,\n        a broken guard can cause a denial of service for the Safe. Make sure to carefully\n        audit the guard code and design recovery mechanisms.\n @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\n @param guard The address of the guard to be used or the 0 address to disable the guard"},"functionSelector":"e19a9dd9","id":2760,"implemented":true,"kind":"function","modifiers":[{"id":2727,"modifierName":{"id":2726,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"2004:10:12","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2004:10:12"}],"name":"setGuard","nodeType":"FunctionDefinition","parameters":{"id":2725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2724,"mutability":"mutable","name":"guard","nodeType":"VariableDeclaration","scope":2760,"src":"1980:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2723,"name":"address","nodeType":"ElementaryTypeName","src":"1980:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1979:15:12"},"returnParameters":{"id":2728,"nodeType":"ParameterList","parameters":[],"src":"2015:0:12"},"scope":2773,"src":"1962:386:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2771,"nodeType":"Block","src":"2770:168:12","statements":[{"assignments":[2767],"declarations":[{"constant":false,"id":2767,"mutability":"mutable","name":"slot","nodeType":"VariableDeclaration","scope":2771,"src":"2780:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2766,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2780:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2769,"initialValue":{"id":2768,"name":"GUARD_STORAGE_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2721,"src":"2795:18:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2780:33:12"},{"AST":{"nodeType":"YulBlock","src":"2888:44:12","statements":[{"nodeType":"YulAssignment","src":"2902:20:12","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"2917:4:12"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"2911:5:12"},"nodeType":"YulFunctionCall","src":"2911:11:12"},"variableNames":[{"name":"guard","nodeType":"YulIdentifier","src":"2902:5:12"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":2764,"isOffset":false,"isSlot":false,"src":"2902:5:12","valueSize":1},{"declaration":2767,"isOffset":false,"isSlot":false,"src":"2917:4:12","valueSize":1}],"id":2770,"nodeType":"InlineAssembly","src":"2879:53:12"}]},"documentation":{"id":2761,"nodeType":"StructuredDocumentation","src":"2354:353:12","text":" @dev Internal method to retrieve the current guard\n      We do not have a public method because we're short on bytecode size limit,\n      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\n      with the slot `GUARD_STORAGE_SLOT`\n @return guard The address of the guard"},"id":2772,"implemented":true,"kind":"function","modifiers":[],"name":"getGuard","nodeType":"FunctionDefinition","parameters":{"id":2762,"nodeType":"ParameterList","parameters":[],"src":"2729:2:12"},"returnParameters":{"id":2765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2764,"mutability":"mutable","name":"guard","nodeType":"VariableDeclaration","scope":2772,"src":"2755:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2763,"name":"address","nodeType":"ElementaryTypeName","src":"2755:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2754:15:12"},"scope":2773,"src":"2712:226:12","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2774,"src":"1108:1832:12"}],"src":"42:2899:12"},"id":12},"contracts/base/ModuleManager.sol":{"ast":{"absolutePath":"contracts/base/ModuleManager.sol","exportedSymbols":{"Enum":[3717],"Executor":[2583],"ModuleManager":[3197],"SelfAuthorized":[3792]},"id":3198,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":2775,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:13"},{"absolutePath":"contracts/common/Enum.sol","file":"../common/Enum.sol","id":2776,"nodeType":"ImportDirective","scope":3198,"sourceUnit":3718,"src":"74:28:13","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/common/SelfAuthorized.sol","file":"../common/SelfAuthorized.sol","id":2777,"nodeType":"ImportDirective","scope":3198,"sourceUnit":3793,"src":"103:38:13","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/Executor.sol","file":"./Executor.sol","id":2778,"nodeType":"ImportDirective","scope":3198,"sourceUnit":2584,"src":"142:24:13","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2780,"name":"SelfAuthorized","nodeType":"UserDefinedTypeName","referencedDeclaration":3792,"src":"697:14:13","typeDescriptions":{"typeIdentifier":"t_contract$_SelfAuthorized_$3792","typeString":"contract SelfAuthorized"}},"id":2781,"nodeType":"InheritanceSpecifier","src":"697:14:13"},{"baseName":{"id":2782,"name":"Executor","nodeType":"UserDefinedTypeName","referencedDeclaration":2583,"src":"713:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_Executor_$2583","typeString":"contract Executor"}},"id":2783,"nodeType":"InheritanceSpecifier","src":"713:8:13"}],"contractDependencies":[2583,3792],"contractKind":"contract","documentation":{"id":2779,"nodeType":"StructuredDocumentation","src":"168:493:13","text":" @title Module Manager - A contract managing Safe modules\n @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\n⚠️ WARNING: Modules are a security risk since they can execute arbitrary transactions, \nso only trusted and audited modules should be added to a Safe. A malicious module can\ncompletely takeover a Safe.\n @author Stefan George - @Georgi87\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3197,"linearizedBaseContracts":[3197,2583,3792],"name":"ModuleManager","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":2787,"name":"EnabledModule","nodeType":"EventDefinition","parameters":{"id":2786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2785,"indexed":true,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":2787,"src":"748:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2784,"name":"address","nodeType":"ElementaryTypeName","src":"748:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"747:24:13"},"src":"728:44:13"},{"anonymous":false,"id":2791,"name":"DisabledModule","nodeType":"EventDefinition","parameters":{"id":2790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2789,"indexed":true,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":2791,"src":"798:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2788,"name":"address","nodeType":"ElementaryTypeName","src":"798:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"797:24:13"},"src":"777:45:13"},{"anonymous":false,"id":2795,"name":"ExecutionFromModuleSuccess","nodeType":"EventDefinition","parameters":{"id":2794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2793,"indexed":true,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":2795,"src":"860:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2792,"name":"address","nodeType":"ElementaryTypeName","src":"860:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"859:24:13"},"src":"827:57:13"},{"anonymous":false,"id":2799,"name":"ExecutionFromModuleFailure","nodeType":"EventDefinition","parameters":{"id":2798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2797,"indexed":true,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":2799,"src":"922:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2796,"name":"address","nodeType":"ElementaryTypeName","src":"922:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"921:24:13"},"src":"889:57:13"},{"constant":true,"id":2805,"mutability":"constant","name":"SENTINEL_MODULES","nodeType":"VariableDeclaration","scope":3197,"src":"952:57:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2800,"name":"address","nodeType":"ElementaryTypeName","src":"952:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"307831","id":2803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1005:3:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":2802,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"997:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2801,"name":"address","nodeType":"ElementaryTypeName","src":"997:7:13","typeDescriptions":{}}},"id":2804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"997:12:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2809,"mutability":"mutable","name":"modules","nodeType":"VariableDeclaration","scope":3197,"src":"1016:44:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"typeName":{"id":2808,"keyType":{"id":2806,"name":"address","nodeType":"ElementaryTypeName","src":"1024:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1016:27:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"valueType":{"id":2807,"name":"address","nodeType":"ElementaryTypeName","src":"1035:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"body":{"id":2867,"nodeType":"Block","src":"1429:388:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2818,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"1447:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2820,"indexExpression":{"id":2819,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"1455:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1447:25:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1484:1:13","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":2822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1476:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2821,"name":"address","nodeType":"ElementaryTypeName","src":"1476:7:13","typeDescriptions":{}}},"id":2824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1476:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1447:39:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313030","id":2826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1488:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_8c9c6f726a0896ef73f47c5bcc7192641db350a8b0b2e1f61e0f0c694ec59426","typeString":"literal_string \"GS100\""},"value":"GS100"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8c9c6f726a0896ef73f47c5bcc7192641db350a8b0b2e1f61e0f0c694ec59426","typeString":"literal_string \"GS100\""}],"id":2817,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1439:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1439:57:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2828,"nodeType":"ExpressionStatement","src":"1439:57:13"},{"expression":{"id":2833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2829,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"1506:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2831,"indexExpression":{"id":2830,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"1514:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1506:25:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2832,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"1534:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1506:44:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2834,"nodeType":"ExpressionStatement","src":"1506:44:13"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2835,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2812,"src":"1564:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1578:1:13","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":2837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1570:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2836,"name":"address","nodeType":"ElementaryTypeName","src":"1570:7:13","typeDescriptions":{}}},"id":2839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1570:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1564:16:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2866,"nodeType":"IfStatement","src":"1560:251:13","trueBody":{"id":2865,"nodeType":"Block","src":"1582:229:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2843,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2812,"src":"1615:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2842,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"1604:10:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1604:14:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303032","id":2845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1620:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_6815e8af672f0836acc6449b9d3a4cb88965a5b47ac95c5e5335f73ab586c8d0","typeString":"literal_string \"GS002\""},"value":"GS002"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6815e8af672f0836acc6449b9d3a4cb88965a5b47ac95c5e5335f73ab586c8d0","typeString":"literal_string \"GS002\""}],"id":2841,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1596:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1596:32:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2847,"nodeType":"ExpressionStatement","src":"1596:32:13"},{"expression":{"arguments":[{"arguments":[{"id":2850,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2812,"src":"1730:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1734:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2852,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"1737:4:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"expression":{"id":2853,"name":"Enum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"1743:4:13","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Enum_$3717_$","typeString":"type(contract Enum)"}},"id":2854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"Operation","nodeType":"MemberAccess","referencedDeclaration":3716,"src":"1743:14:13","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Operation_$3716_$","typeString":"type(enum Enum.Operation)"}},"id":2855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"DelegateCall","nodeType":"MemberAccess","src":"1743:27:13","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"expression":{"arguments":[{"id":2858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1777:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2857,"name":"uint256","nodeType":"ElementaryTypeName","src":"1777:7:13","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":2856,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1772:4:13","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1772:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":2860,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1772:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2849,"name":"execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2582,"src":"1722:7:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)"}},"id":2861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1722:68:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303030","id":2862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1792:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_3fdb21530a98d914fa570cd548d7a3608c11195b5a11ec44ecd149309d9dcced","typeString":"literal_string \"GS000\""},"value":"GS000"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3fdb21530a98d914fa570cd548d7a3608c11195b5a11ec44ecd149309d9dcced","typeString":"literal_string \"GS000\""}],"id":2848,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1714:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1714:86:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2864,"nodeType":"ExpressionStatement","src":"1714:86:13"}]}}]},"documentation":{"id":2810,"nodeType":"StructuredDocumentation","src":"1067:295:13","text":" @notice Setup function sets the initial storage of the contract.\n         Optionally executes a delegate call to another contract to setup the modules.\n @param to Optional destination address of call to execute.\n @param data Optional data of call to execute."},"id":2868,"implemented":true,"kind":"function","modifiers":[],"name":"setupModules","nodeType":"FunctionDefinition","parameters":{"id":2815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2812,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":2868,"src":"1389:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2811,"name":"address","nodeType":"ElementaryTypeName","src":"1389:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2814,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2868,"src":"1401:17:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2813,"name":"bytes","nodeType":"ElementaryTypeName","src":"1401:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1388:31:13"},"returnParameters":{"id":2816,"nodeType":"ParameterList","parameters":[],"src":"1429:0:13"},"scope":3197,"src":"1367:450:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2920,"nodeType":"Block","src":"2057:370:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2877,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2129:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2147:1:13","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":2879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2139:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2878,"name":"address","nodeType":"ElementaryTypeName","src":"2139:7:13","typeDescriptions":{}}},"id":2881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2139:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2129:20:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2883,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2153:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2884,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"2163:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2153:26:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2129:50:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313031","id":2887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2181:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_eab5e6af6960e6bb32b59bfd1d877c9c1728e4c18fa7a83eb40baa1c0f05f61f","typeString":"literal_string \"GS101\""},"value":"GS101"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eab5e6af6960e6bb32b59bfd1d877c9c1728e4c18fa7a83eb40baa1c0f05f61f","typeString":"literal_string \"GS101\""}],"id":2876,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2121:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2121:68:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2889,"nodeType":"ExpressionStatement","src":"2121:68:13"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2891,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"2248:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2893,"indexExpression":{"id":2892,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2256:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2248:15:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2275:1:13","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":2895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2267:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2894,"name":"address","nodeType":"ElementaryTypeName","src":"2267:7:13","typeDescriptions":{}}},"id":2897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2267:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2248:29:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313032","id":2899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2279:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12","typeString":"literal_string \"GS102\""},"value":"GS102"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12","typeString":"literal_string \"GS102\""}],"id":2890,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2240:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2240:47:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2901,"nodeType":"ExpressionStatement","src":"2240:47:13"},{"expression":{"id":2908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2902,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"2297:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2904,"indexExpression":{"id":2903,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2305:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2297:15:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2905,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"2315:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2907,"indexExpression":{"id":2906,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"2323:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2315:25:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2297:43:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2909,"nodeType":"ExpressionStatement","src":"2297:43:13"},{"expression":{"id":2914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2910,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"2350:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2912,"indexExpression":{"id":2911,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"2358:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2350:25:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2913,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2378:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2350:34:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2915,"nodeType":"ExpressionStatement","src":"2350:34:13"},{"eventCall":{"arguments":[{"id":2917,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2413:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2916,"name":"EnabledModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2787,"src":"2399:13:13","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2399:21:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2919,"nodeType":"EmitStatement","src":"2394:26:13"}]},"documentation":{"id":2869,"nodeType":"StructuredDocumentation","src":"1823:173:13","text":" @notice Enables the module `module` for the Safe.\n @dev This can only be done via a Safe transaction.\n @param module Module to be whitelisted."},"functionSelector":"610b5925","id":2921,"implemented":true,"kind":"function","modifiers":[{"id":2874,"modifierName":{"id":2873,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"2046:10:13","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2046:10:13"}],"name":"enableModule","nodeType":"FunctionDefinition","parameters":{"id":2872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2871,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":2921,"src":"2023:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2870,"name":"address","nodeType":"ElementaryTypeName","src":"2023:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2022:16:13"},"returnParameters":{"id":2875,"nodeType":"ParameterList","parameters":[],"src":"2057:0:13"},"scope":3197,"src":"2001:426:13","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2975,"nodeType":"Block","src":"2754:346:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2932,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2926,"src":"2854:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2872:1:13","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":2934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2864:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2933,"name":"address","nodeType":"ElementaryTypeName","src":"2864:7:13","typeDescriptions":{}}},"id":2936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2864:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2854:20:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2938,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2926,"src":"2878:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2939,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"2888:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2878:26:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2854:50:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313031","id":2942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2906:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_eab5e6af6960e6bb32b59bfd1d877c9c1728e4c18fa7a83eb40baa1c0f05f61f","typeString":"literal_string \"GS101\""},"value":"GS101"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eab5e6af6960e6bb32b59bfd1d877c9c1728e4c18fa7a83eb40baa1c0f05f61f","typeString":"literal_string \"GS101\""}],"id":2931,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2846:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2846:68:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2944,"nodeType":"ExpressionStatement","src":"2846:68:13"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2946,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"2932:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2948,"indexExpression":{"id":2947,"name":"prevModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2924,"src":"2940:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2932:19:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2949,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2926,"src":"2955:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2932:29:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313033","id":2951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2963:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_7295c339622429fbd8194417b44c0a2c972675caa6bf424cf588d99024c608be","typeString":"literal_string \"GS103\""},"value":"GS103"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7295c339622429fbd8194417b44c0a2c972675caa6bf424cf588d99024c608be","typeString":"literal_string \"GS103\""}],"id":2945,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2924:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2924:47:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2953,"nodeType":"ExpressionStatement","src":"2924:47:13"},{"expression":{"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2954,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"2981:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2956,"indexExpression":{"id":2955,"name":"prevModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2924,"src":"2989:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2981:19:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2957,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"3003:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2959,"indexExpression":{"id":2958,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2926,"src":"3011:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3003:15:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2981:37:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2961,"nodeType":"ExpressionStatement","src":"2981:37:13"},{"expression":{"id":2969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2962,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"3028:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2964,"indexExpression":{"id":2963,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2926,"src":"3036:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3028:15:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":2967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3054:1:13","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":2966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3046:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2965,"name":"address","nodeType":"ElementaryTypeName","src":"3046:7:13","typeDescriptions":{}}},"id":2968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3046:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3028:28:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2970,"nodeType":"ExpressionStatement","src":"3028:28:13"},{"eventCall":{"arguments":[{"id":2972,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2926,"src":"3086:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2971,"name":"DisabledModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2791,"src":"3071:14:13","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3071:22:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2974,"nodeType":"EmitStatement","src":"3066:27:13"}]},"documentation":{"id":2922,"nodeType":"StructuredDocumentation","src":"2433:239:13","text":" @notice Disables the module `module` for the Safe.\n @dev This can only be done via a Safe transaction.\n @param prevModule Previous module in the modules linked list.\n @param module Module to be removed."},"functionSelector":"e009cfde","id":2976,"implemented":true,"kind":"function","modifiers":[{"id":2929,"modifierName":{"id":2928,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"2743:10:13","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2743:10:13"}],"name":"disableModule","nodeType":"FunctionDefinition","parameters":{"id":2927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2924,"mutability":"mutable","name":"prevModule","nodeType":"VariableDeclaration","scope":2976,"src":"2700:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2923,"name":"address","nodeType":"ElementaryTypeName","src":"2700:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2926,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":2976,"src":"2720:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2925,"name":"address","nodeType":"ElementaryTypeName","src":"2720:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2699:36:13"},"returnParameters":{"id":2930,"nodeType":"ParameterList","parameters":[],"src":"2754:0:13"},"scope":3197,"src":"2677:423:13","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3034,"nodeType":"Block","src":"3805:411:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2991,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3872:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3872:10:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2993,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"3886:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3872:30:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2995,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"3906:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":2998,"indexExpression":{"expression":{"id":2996,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3914:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3914:10:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3906:19:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3937:1:13","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":3000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3929:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2999,"name":"address","nodeType":"ElementaryTypeName","src":"3929:7:13","typeDescriptions":{}}},"id":3002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3929:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3906:33:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3872:67:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313034","id":3005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3941:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_b44c13dad2cf265cdd10f957c112238232519dfdaff7245a6824a63db294cf23","typeString":"literal_string \"GS104\""},"value":"GS104"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b44c13dad2cf265cdd10f957c112238232519dfdaff7245a6824a63db294cf23","typeString":"literal_string \"GS104\""}],"id":2990,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3864:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3864:85:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3007,"nodeType":"ExpressionStatement","src":"3864:85:13"},{"expression":{"id":3020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3008,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2988,"src":"4021:7:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3010,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2979,"src":"4039:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3011,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2981,"src":"4043:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3012,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2983,"src":"4050:4:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3013,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2985,"src":"4056:9:13","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"expression":{"arguments":[{"id":3016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4072:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3015,"name":"uint256","nodeType":"ElementaryTypeName","src":"4072:7:13","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":3014,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4067:4:13","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4067:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":3018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"4067:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3009,"name":"execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2582,"src":"4031:7:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)"}},"id":3019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4031:54:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4021:64:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3021,"nodeType":"ExpressionStatement","src":"4021:64:13"},{"condition":{"id":3022,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2988,"src":"4099:7:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"eventCall":{"arguments":[{"expression":{"id":3029,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4198:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4198:10:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3028,"name":"ExecutionFromModuleFailure","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2799,"src":"4171:26:13","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4171:38:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3032,"nodeType":"EmitStatement","src":"4166:43:13"},"id":3033,"nodeType":"IfStatement","src":"4095:114:13","trueBody":{"eventCall":{"arguments":[{"expression":{"id":3024,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4140:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4140:10:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3023,"name":"ExecutionFromModuleSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"4113:26:13","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4113:38:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3027,"nodeType":"EmitStatement","src":"4108:43:13"}}]},"documentation":{"id":2977,"nodeType":"StructuredDocumentation","src":"3106:511:13","text":" @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\n @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\n @param to Destination address of module transaction.\n @param value Ether value of module transaction.\n @param data Data payload of module transaction.\n @param operation Operation type of module transaction.\n @return success Boolean flag indicating if the call succeeded."},"functionSelector":"468721a7","id":3035,"implemented":true,"kind":"function","modifiers":[],"name":"execTransactionFromModule","nodeType":"FunctionDefinition","parameters":{"id":2986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2979,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":3035,"src":"3666:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2978,"name":"address","nodeType":"ElementaryTypeName","src":"3666:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2981,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":3035,"src":"3686:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2980,"name":"uint256","nodeType":"ElementaryTypeName","src":"3686:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2983,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":3035,"src":"3709:17:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2982,"name":"bytes","nodeType":"ElementaryTypeName","src":"3709:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2985,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":3035,"src":"3736:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":2984,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"3736:14:13","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"}],"src":"3656:110:13"},"returnParameters":{"id":2989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2988,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":3035,"src":"3791:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2987,"name":"bool","nodeType":"ElementaryTypeName","src":"3791:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3790:14:13"},"scope":3197,"src":"3622:594:13","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":3061,"nodeType":"Block","src":"4917:749:13","statements":[{"expression":{"id":3058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3051,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3047,"src":"4927:7:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3053,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3038,"src":"4963:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3054,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3040,"src":"4967:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3055,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"4974:4:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3056,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3044,"src":"4980:9:13","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}],"id":3052,"name":"execTransactionFromModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3035,"src":"4937:25:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation) returns (bool)"}},"id":3057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4937:53:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4927:63:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3059,"nodeType":"ExpressionStatement","src":"4927:63:13"},{"AST":{"nodeType":"YulBlock","src":"5065:595:13","statements":[{"nodeType":"YulVariableDeclaration","src":"5120:22:13","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5137:4:13","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5131:5:13"},"nodeType":"YulFunctionCall","src":"5131:11:13"},"variables":[{"name":"ptr","nodeType":"YulTypedName","src":"5124:3:13","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5342:4:13","type":"","value":"0x40"},{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"5352:3:13"},{"arguments":[{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"5361:14:13"},"nodeType":"YulFunctionCall","src":"5361:16:13"},{"kind":"number","nodeType":"YulLiteral","src":"5379:4:13","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5357:3:13"},"nodeType":"YulFunctionCall","src":"5357:27:13"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5348:3:13"},"nodeType":"YulFunctionCall","src":"5348:37:13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5335:6:13"},"nodeType":"YulFunctionCall","src":"5335:51:13"},"nodeType":"YulExpressionStatement","src":"5335:51:13"},{"expression":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"5436:3:13"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"5441:14:13"},"nodeType":"YulFunctionCall","src":"5441:16:13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5429:6:13"},"nodeType":"YulFunctionCall","src":"5429:29:13"},"nodeType":"YulExpressionStatement","src":"5429:29:13"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"5520:3:13"},{"kind":"number","nodeType":"YulLiteral","src":"5525:4:13","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5516:3:13"},"nodeType":"YulFunctionCall","src":"5516:14:13"},{"kind":"number","nodeType":"YulLiteral","src":"5532:1:13","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"5535:14:13"},"nodeType":"YulFunctionCall","src":"5535:16:13"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"5501:14:13"},"nodeType":"YulFunctionCall","src":"5501:51:13"},"nodeType":"YulExpressionStatement","src":"5501:51:13"},{"nodeType":"YulAssignment","src":"5633:17:13","value":{"name":"ptr","nodeType":"YulIdentifier","src":"5647:3:13"},"variableNames":[{"name":"returnData","nodeType":"YulIdentifier","src":"5633:10:13"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":3049,"isOffset":false,"isSlot":false,"src":"5633:10:13","valueSize":1}],"id":3060,"nodeType":"InlineAssembly","src":"5056:604:13"}]},"documentation":{"id":3036,"nodeType":"StructuredDocumentation","src":"4222:480:13","text":" @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\n @param to Destination address of module transaction.\n @param value Ether value of module transaction.\n @param data Data payload of module transaction.\n @param operation Operation type of module transaction.\n @return success Boolean flag indicating if the call succeeded.\n @return returnData Data returned by the call."},"functionSelector":"5229073f","id":3062,"implemented":true,"kind":"function","modifiers":[],"name":"execTransactionFromModuleReturnData","nodeType":"FunctionDefinition","parameters":{"id":3045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3038,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":3062,"src":"4761:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3037,"name":"address","nodeType":"ElementaryTypeName","src":"4761:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3040,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":3062,"src":"4781:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3039,"name":"uint256","nodeType":"ElementaryTypeName","src":"4781:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3042,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":3062,"src":"4804:17:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3041,"name":"bytes","nodeType":"ElementaryTypeName","src":"4804:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3044,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":3062,"src":"4831:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":3043,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"4831:14:13","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"}],"src":"4751:110:13"},"returnParameters":{"id":3050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3047,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":3062,"src":"4878:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3046,"name":"bool","nodeType":"ElementaryTypeName","src":"4878:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3049,"mutability":"mutable","name":"returnData","nodeType":"VariableDeclaration","scope":3062,"src":"4892:23:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3048,"name":"bytes","nodeType":"ElementaryTypeName","src":"4892:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4877:39:13"},"scope":3197,"src":"4707:959:13","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3083,"nodeType":"Block","src":"5848:83:13","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3070,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"5865:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3071,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"5885:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5865:26:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3073,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"5895:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3075,"indexExpression":{"id":3074,"name":"module","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"5903:6:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5895:15:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5922:1:13","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":3077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5914:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3076,"name":"address","nodeType":"ElementaryTypeName","src":"5914:7:13","typeDescriptions":{}}},"id":3079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5914:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"5895:29:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5865:59:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3069,"id":3082,"nodeType":"Return","src":"5858:66:13"}]},"documentation":{"id":3063,"nodeType":"StructuredDocumentation","src":"5672:103:13","text":" @notice Returns if an module is enabled\n @return True if the module is enabled"},"functionSelector":"2d9ad53d","id":3084,"implemented":true,"kind":"function","modifiers":[],"name":"isModuleEnabled","nodeType":"FunctionDefinition","parameters":{"id":3066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3065,"mutability":"mutable","name":"module","nodeType":"VariableDeclaration","scope":3084,"src":"5805:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3064,"name":"address","nodeType":"ElementaryTypeName","src":"5805:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5804:16:13"},"returnParameters":{"id":3069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3068,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3084,"src":"5842:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3067,"name":"bool","nodeType":"ElementaryTypeName","src":"5842:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5841:6:13"},"scope":3197,"src":"5780:151:13","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3178,"nodeType":"Block","src":"6560:1412:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3098,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3087,"src":"6578:5:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3099,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"6587:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6578:25:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":3102,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3087,"src":"6623:5:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3101,"name":"isModuleEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3084,"src":"6607:15:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":3103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6607:22:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6578:51:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313035","id":3105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6631:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_21e9127eafd366d4171d9c7f3375ca996507e4dd231bd2c13b243a626f992d4c","typeString":"literal_string \"GS105\""},"value":"GS105"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_21e9127eafd366d4171d9c7f3375ca996507e4dd231bd2c13b243a626f992d4c","typeString":"literal_string \"GS105\""}],"id":3097,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6570:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6570:69:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3107,"nodeType":"ExpressionStatement","src":"6570:69:13"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3109,"name":"pageSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3089,"src":"6657:8:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6668:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6657:12:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313036","id":3112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6671:7:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_3be12fd8170783d77e95b898996a64d9da524b4d1491db467a4cf43987cf214d","typeString":"literal_string \"GS106\""},"value":"GS106"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3be12fd8170783d77e95b898996a64d9da524b4d1491db467a4cf43987cf214d","typeString":"literal_string \"GS106\""}],"id":3108,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6649:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6649:30:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3114,"nodeType":"ExpressionStatement","src":"6649:30:13"},{"expression":{"id":3121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3115,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3093,"src":"6730:5:13","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3119,"name":"pageSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3089,"src":"6752:8:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6738:13:13","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":3116,"name":"address","nodeType":"ElementaryTypeName","src":"6742:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3117,"nodeType":"ArrayTypeName","src":"6742:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":3120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6738:23:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"6730:31:13","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3122,"nodeType":"ExpressionStatement","src":"6730:31:13"},{"assignments":[3124],"declarations":[{"constant":false,"id":3124,"mutability":"mutable","name":"moduleCount","nodeType":"VariableDeclaration","scope":3178,"src":"6805:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3123,"name":"uint256","nodeType":"ElementaryTypeName","src":"6805:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3126,"initialValue":{"hexValue":"30","id":3125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6827:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6805:23:13"},{"expression":{"id":3131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3127,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"6838:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3128,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"6845:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3130,"indexExpression":{"id":3129,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3087,"src":"6853:5:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6845:14:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6838:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3132,"nodeType":"ExpressionStatement","src":"6838:21:13"},{"body":{"id":3162,"nodeType":"Block","src":"6950:111:13","statements":[{"expression":{"id":3151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3147,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3093,"src":"6964:5:13","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3149,"indexExpression":{"id":3148,"name":"moduleCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3124,"src":"6970:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6964:18:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3150,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"6985:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6964:25:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3152,"nodeType":"ExpressionStatement","src":"6964:25:13"},{"expression":{"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3153,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7003:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3154,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"7010:7:13","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3156,"indexExpression":{"id":3155,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7018:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7010:13:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7003:20:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3158,"nodeType":"ExpressionStatement","src":"7003:20:13"},{"expression":{"id":3160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7037:13:13","subExpression":{"id":3159,"name":"moduleCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3124,"src":"7037:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3161,"nodeType":"ExpressionStatement","src":"7037:13:13"}]},"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3133,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"6876:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6892:1:13","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":3135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6884:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3134,"name":"address","nodeType":"ElementaryTypeName","src":"6884:7:13","typeDescriptions":{}}},"id":3137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6884:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"6876:18:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3139,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"6898:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3140,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"6906:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6898:24:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6876:46:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3143,"name":"moduleCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3124,"src":"6926:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3144,"name":"pageSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3089,"src":"6940:8:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6926:22:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6876:72:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3163,"nodeType":"WhileStatement","src":"6869:192:13"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3164,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7716:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3165,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"7724:16:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7716:24:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3176,"nodeType":"IfStatement","src":"7712:84:13","trueBody":{"id":3175,"nodeType":"Block","src":"7742:54:13","statements":[{"expression":{"id":3173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3167,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7756:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3168,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3093,"src":"7763:5:13","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3172,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3169,"name":"moduleCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3124,"src":"7769:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7783:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7769:15:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7763:22:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7756:29:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3174,"nodeType":"ExpressionStatement","src":"7756:29:13"}]}},{"AST":{"nodeType":"YulBlock","src":"7916:50:13","statements":[{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"7937:5:13"},{"name":"moduleCount","nodeType":"YulIdentifier","src":"7944:11:13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7930:6:13"},"nodeType":"YulFunctionCall","src":"7930:26:13"},"nodeType":"YulExpressionStatement","src":"7930:26:13"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":3093,"isOffset":false,"isSlot":false,"src":"7937:5:13","valueSize":1},{"declaration":3124,"isOffset":false,"isSlot":false,"src":"7944:11:13","valueSize":1}],"id":3177,"nodeType":"InlineAssembly","src":"7907:59:13"}]},"documentation":{"id":3085,"nodeType":"StructuredDocumentation","src":"5937:495:13","text":" @notice Returns an array of modules.\n         If all entries fit into a single page, the next pointer will be 0x1.\n         If another page is present, next will be the last element of the returned array.\n @param start Start of the page. Has to be a module or start pointer (0x1 address)\n @param pageSize Maximum number of modules that should be returned. Has to be > 0\n @return array Array of modules.\n @return next Start of the next page."},"functionSelector":"cc2f8452","id":3179,"implemented":true,"kind":"function","modifiers":[],"name":"getModulesPaginated","nodeType":"FunctionDefinition","parameters":{"id":3090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3087,"mutability":"mutable","name":"start","nodeType":"VariableDeclaration","scope":3179,"src":"6466:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3086,"name":"address","nodeType":"ElementaryTypeName","src":"6466:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3089,"mutability":"mutable","name":"pageSize","nodeType":"VariableDeclaration","scope":3179,"src":"6481:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3088,"name":"uint256","nodeType":"ElementaryTypeName","src":"6481:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6465:33:13"},"returnParameters":{"id":3096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3093,"mutability":"mutable","name":"array","nodeType":"VariableDeclaration","scope":3179,"src":"6522:22:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3091,"name":"address","nodeType":"ElementaryTypeName","src":"6522:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3092,"nodeType":"ArrayTypeName","src":"6522:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3095,"mutability":"mutable","name":"next","nodeType":"VariableDeclaration","scope":3179,"src":"6546:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3094,"name":"address","nodeType":"ElementaryTypeName","src":"6546:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6521:38:13"},"scope":3197,"src":"6437:1535:13","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3195,"nodeType":"Block","src":"8343:180:13","statements":[{"assignments":[3188],"declarations":[{"constant":false,"id":3188,"mutability":"mutable","name":"size","nodeType":"VariableDeclaration","scope":3195,"src":"8353:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3187,"name":"uint256","nodeType":"ElementaryTypeName","src":"8353:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3189,"nodeType":"VariableDeclarationStatement","src":"8353:12:13"},{"AST":{"nodeType":"YulBlock","src":"8440:52:13","statements":[{"nodeType":"YulAssignment","src":"8454:28:13","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"8474:7:13"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"8462:11:13"},"nodeType":"YulFunctionCall","src":"8462:20:13"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"8454:4:13"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":3182,"isOffset":false,"isSlot":false,"src":"8474:7:13","valueSize":1},{"declaration":3188,"isOffset":false,"isSlot":false,"src":"8454:4:13","valueSize":1}],"id":3190,"nodeType":"InlineAssembly","src":"8431:61:13"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3191,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3188,"src":"8508:4:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8515:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8508:8:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3186,"id":3194,"nodeType":"Return","src":"8501:15:13"}]},"documentation":{"id":3180,"nodeType":"StructuredDocumentation","src":"7978:294:13","text":" @notice Returns true if `account` is a contract.\n @dev This function will return false if invoked during the constructor of a contract,\n      as the code is not actually created until after the constructor finishes.\n @param account The address being queried"},"id":3196,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nodeType":"FunctionDefinition","parameters":{"id":3183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3182,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":3196,"src":"8297:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3181,"name":"address","nodeType":"ElementaryTypeName","src":"8297:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8296:17:13"},"returnParameters":{"id":3186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3185,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3196,"src":"8337:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3184,"name":"bool","nodeType":"ElementaryTypeName","src":"8337:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8336:6:13"},"scope":3197,"src":"8277:246:13","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3198,"src":"662:7863:13"}],"src":"42:8484:13"},"id":13},"contracts/base/OwnerManager.sol":{"ast":{"absolutePath":"contracts/base/OwnerManager.sol","exportedSymbols":{"OwnerManager":[3710],"SelfAuthorized":[3792]},"id":3711,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3199,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:14"},{"absolutePath":"contracts/common/SelfAuthorized.sol","file":"../common/SelfAuthorized.sol","id":3200,"nodeType":"ImportDirective","scope":3711,"sourceUnit":3793,"src":"74:38:14","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3202,"name":"SelfAuthorized","nodeType":"UserDefinedTypeName","referencedDeclaration":3792,"src":"474:14:14","typeDescriptions":{"typeIdentifier":"t_contract$_SelfAuthorized_$3792","typeString":"contract SelfAuthorized"}},"id":3203,"nodeType":"InheritanceSpecifier","src":"474:14:14"}],"contractDependencies":[3792],"contractKind":"contract","documentation":{"id":3201,"nodeType":"StructuredDocumentation","src":"114:325:14","text":" @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\n @dev Uses a linked list to store the owners because the code generate by the solidity compiler\n      is more efficient than using a dynamic array.\n @author Stefan George - @Georgi87\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3710,"linearizedBaseContracts":[3710,3792],"name":"OwnerManager","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":3207,"name":"AddedOwner","nodeType":"EventDefinition","parameters":{"id":3206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3205,"indexed":true,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":3207,"src":"512:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3204,"name":"address","nodeType":"ElementaryTypeName","src":"512:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"511:23:14"},"src":"495:40:14"},{"anonymous":false,"id":3211,"name":"RemovedOwner","nodeType":"EventDefinition","parameters":{"id":3210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3209,"indexed":true,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":3211,"src":"559:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3208,"name":"address","nodeType":"ElementaryTypeName","src":"559:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"558:23:14"},"src":"540:42:14"},{"anonymous":false,"id":3215,"name":"ChangedThreshold","nodeType":"EventDefinition","parameters":{"id":3214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3213,"indexed":false,"mutability":"mutable","name":"threshold","nodeType":"VariableDeclaration","scope":3215,"src":"610:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3212,"name":"uint256","nodeType":"ElementaryTypeName","src":"610:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"609:19:14"},"src":"587:42:14"},{"constant":true,"id":3221,"mutability":"constant","name":"SENTINEL_OWNERS","nodeType":"VariableDeclaration","scope":3710,"src":"635:56:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3216,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"307831","id":3219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"687:3:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":3218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"679:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3217,"name":"address","nodeType":"ElementaryTypeName","src":"679:7:14","typeDescriptions":{}}},"id":3220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"679:12:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3225,"mutability":"mutable","name":"owners","nodeType":"VariableDeclaration","scope":3710,"src":"698:43:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"typeName":{"id":3224,"keyType":{"id":3222,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"698:27:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"valueType":{"id":3223,"name":"address","nodeType":"ElementaryTypeName","src":"717:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":3227,"mutability":"mutable","name":"ownerCount","nodeType":"VariableDeclaration","scope":3710,"src":"747:27:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3226,"name":"uint256","nodeType":"ElementaryTypeName","src":"747:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3229,"mutability":"mutable","name":"threshold","nodeType":"VariableDeclaration","scope":3710,"src":"780:26:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3228,"name":"uint256","nodeType":"ElementaryTypeName","src":"780:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":3345,"nodeType":"Block","src":"1087:1060:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3239,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"1229:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1242:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1229:14:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323030","id":3242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1245:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_3a328c389014707497c45ecba7527a678d30fabfd6868fe8bade352062f7774b","typeString":"literal_string \"GS200\""},"value":"GS200"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3a328c389014707497c45ecba7527a678d30fabfd6868fe8bade352062f7774b","typeString":"literal_string \"GS200\""}],"id":3238,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1221:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1221:32:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3244,"nodeType":"ExpressionStatement","src":"1221:32:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3246,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"1346:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":3247,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3233,"src":"1360:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1360:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1346:28:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323031","id":3250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1376:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ed3cfd606bc0ca63de16ac40539251d9539eb77db0a0d075dd487d4cf1c74c7","typeString":"literal_string \"GS201\""},"value":"GS201"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2ed3cfd606bc0ca63de16ac40539251d9539eb77db0a0d075dd487d4cf1c74c7","typeString":"literal_string \"GS201\""}],"id":3245,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1338:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1338:46:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3252,"nodeType":"ExpressionStatement","src":"1338:46:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3254,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"1454:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":3255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1468:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1454:15:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323032","id":3257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1471:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_a5f8340ff5526fa73c9197322cd5a1c742b87b5fdfeb41a9c278b80dab01159b","typeString":"literal_string \"GS202\""},"value":"GS202"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a5f8340ff5526fa73c9197322cd5a1c742b87b5fdfeb41a9c278b80dab01159b","typeString":"literal_string \"GS202\""}],"id":3253,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1446:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1446:33:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3259,"nodeType":"ExpressionStatement","src":"1446:33:14"},{"assignments":[3261],"declarations":[{"constant":false,"id":3261,"mutability":"mutable","name":"currentOwner","nodeType":"VariableDeclaration","scope":3345,"src":"1526:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3260,"name":"address","nodeType":"ElementaryTypeName","src":"1526:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3263,"initialValue":{"id":3262,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"1549:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1526:38:14"},{"body":{"id":3328,"nodeType":"Block","src":"1619:405:14","statements":[{"assignments":[3276],"declarations":[{"constant":false,"id":3276,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":3328,"src":"1678:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3275,"name":"address","nodeType":"ElementaryTypeName","src":"1678:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3280,"initialValue":{"baseExpression":{"id":3277,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3233,"src":"1694:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3279,"indexExpression":{"id":3278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3265,"src":"1702:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1694:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1678:26:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3282,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"1726:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1743: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":3284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1735:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3283,"name":"address","nodeType":"ElementaryTypeName","src":"1735:7:14","typeDescriptions":{}}},"id":3286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1735:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1726:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3288,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"1749:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3289,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"1758:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1749:24:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1726:47:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3292,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"1777:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":3295,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1794:4:14","typeDescriptions":{"typeIdentifier":"t_contract$_OwnerManager_$3710","typeString":"contract OwnerManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnerManager_$3710","typeString":"contract OwnerManager"}],"id":3294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1786:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3293,"name":"address","nodeType":"ElementaryTypeName","src":"1786:7:14","typeDescriptions":{}}},"id":3296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1786:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1777:22:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1726:73:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3299,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3261,"src":"1803:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3300,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"1819:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1803:21:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1726:98:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323033","id":3303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1826:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""},"value":"GS203"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""}],"id":3281,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1718:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1718:116:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3305,"nodeType":"ExpressionStatement","src":"1718:116:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3307,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"1900:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3309,"indexExpression":{"id":3308,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"1907:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1900:13:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1925: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":3311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1917:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3310,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:14","typeDescriptions":{}}},"id":3313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1917:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1900:27:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323034","id":3315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1929:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_bd322b68614692ef7b503763b6ccedf066a7ae3f91196a908df3c549d078f597","typeString":"literal_string \"GS204\""},"value":"GS204"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bd322b68614692ef7b503763b6ccedf066a7ae3f91196a908df3c549d078f597","typeString":"literal_string \"GS204\""}],"id":3306,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1892:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1892:45:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3317,"nodeType":"ExpressionStatement","src":"1892:45:14"},{"expression":{"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3318,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"1951:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3320,"indexExpression":{"id":3319,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3261,"src":"1958:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1951:20:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3321,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"1974:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1951:28:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3323,"nodeType":"ExpressionStatement","src":"1951:28:14"},{"expression":{"id":3326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3324,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3261,"src":"1993:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3325,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"2008:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1993:20:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3327,"nodeType":"ExpressionStatement","src":"1993:20:14"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3268,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3265,"src":"1594:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3269,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3233,"src":"1598:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1598:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1594:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3329,"initializationExpression":{"assignments":[3265],"declarations":[{"constant":false,"id":3265,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":3329,"src":"1579:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3264,"name":"uint256","nodeType":"ElementaryTypeName","src":"1579:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3267,"initialValue":{"hexValue":"30","id":3266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1591:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1579:13:14"},"loopExpression":{"expression":{"id":3273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1614:3:14","subExpression":{"id":3272,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3265,"src":"1614:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3274,"nodeType":"ExpressionStatement","src":"1614:3:14"},"nodeType":"ForStatement","src":"1574:450:14"},{"expression":{"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3330,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"2033:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3332,"indexExpression":{"id":3331,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3261,"src":"2040:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2033:20:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3333,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"2056:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2033:38:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3335,"nodeType":"ExpressionStatement","src":"2033:38:14"},{"expression":{"id":3339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3336,"name":"ownerCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"2081:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3337,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3233,"src":"2094:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2094:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2081:27:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3340,"nodeType":"ExpressionStatement","src":"2081:27:14"},{"expression":{"id":3343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3341,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"2118:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3342,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"2130:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2118:22:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3344,"nodeType":"ExpressionStatement","src":"2118:22:14"}]},"documentation":{"id":3230,"nodeType":"StructuredDocumentation","src":"813:193:14","text":" @notice Sets the initial storage of the contract.\n @param _owners List of Safe owners.\n @param _threshold Number of required confirmations for a Safe transaction."},"id":3346,"implemented":true,"kind":"function","modifiers":[],"name":"setupOwners","nodeType":"FunctionDefinition","parameters":{"id":3236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3233,"mutability":"mutable","name":"_owners","nodeType":"VariableDeclaration","scope":3346,"src":"1032:24:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3231,"name":"address","nodeType":"ElementaryTypeName","src":"1032:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3232,"nodeType":"ArrayTypeName","src":"1032:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3235,"mutability":"mutable","name":"_threshold","nodeType":"VariableDeclaration","scope":3346,"src":"1058:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3234,"name":"uint256","nodeType":"ElementaryTypeName","src":"1058:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1031:46:14"},"returnParameters":{"id":3237,"nodeType":"ParameterList","parameters":[],"src":"1087:0:14"},"scope":3710,"src":"1011:1136:14","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3418,"nodeType":"Block","src":"2483:541:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3357,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"2575:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2592: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":3359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2584:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3358,"name":"address","nodeType":"ElementaryTypeName","src":"2584:7:14","typeDescriptions":{}}},"id":3361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2584:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2575:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3363,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"2598:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3364,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"2607:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2598:24:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2575:47:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3367,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"2626:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":3370,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2643:4:14","typeDescriptions":{"typeIdentifier":"t_contract$_OwnerManager_$3710","typeString":"contract OwnerManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnerManager_$3710","typeString":"contract OwnerManager"}],"id":3369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2635:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3368,"name":"address","nodeType":"ElementaryTypeName","src":"2635:7:14","typeDescriptions":{}}},"id":3371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2635:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2626:22:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2575:73:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323033","id":3374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2650:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""},"value":"GS203"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""}],"id":3356,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2567:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2567:91:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3376,"nodeType":"ExpressionStatement","src":"2567:91:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3378,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"2716:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3380,"indexExpression":{"id":3379,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"2723:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2716:13:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2741: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":3382,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2733:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3381,"name":"address","nodeType":"ElementaryTypeName","src":"2733:7:14","typeDescriptions":{}}},"id":3384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2733:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2716:27:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323034","id":3386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2745:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_bd322b68614692ef7b503763b6ccedf066a7ae3f91196a908df3c549d078f597","typeString":"literal_string \"GS204\""},"value":"GS204"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bd322b68614692ef7b503763b6ccedf066a7ae3f91196a908df3c549d078f597","typeString":"literal_string \"GS204\""}],"id":3377,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2708:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2708:45:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3388,"nodeType":"ExpressionStatement","src":"2708:45:14"},{"expression":{"id":3395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3389,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"2763:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3391,"indexExpression":{"id":3390,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"2770:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2763:13:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3392,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"2779:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3394,"indexExpression":{"id":3393,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"2786:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2779:23:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2763:39:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3396,"nodeType":"ExpressionStatement","src":"2763:39:14"},{"expression":{"id":3401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3397,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"2812:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3399,"indexExpression":{"id":3398,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"2819:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2812:23:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3400,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"2838:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2812:31:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3402,"nodeType":"ExpressionStatement","src":"2812:31:14"},{"expression":{"id":3404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2853:12:14","subExpression":{"id":3403,"name":"ownerCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"2853:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3405,"nodeType":"ExpressionStatement","src":"2853:12:14"},{"eventCall":{"arguments":[{"id":3407,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"2891:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3406,"name":"AddedOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"2880:10:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2880:17:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3409,"nodeType":"EmitStatement","src":"2875:22:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3410,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"2965:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3411,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3351,"src":"2978:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2965:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3417,"nodeType":"IfStatement","src":"2961:56:14","trueBody":{"expression":{"arguments":[{"id":3414,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3351,"src":"3006:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3413,"name":"changeThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3627,"src":"2990:15:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2990:27:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3416,"nodeType":"ExpressionStatement","src":"2990:27:14"}}]},"documentation":{"id":3347,"nodeType":"StructuredDocumentation","src":"2153:241:14","text":" @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\n @dev This can only be done via a Safe transaction.\n @param owner New owner address.\n @param _threshold New threshold."},"functionSelector":"0d582f13","id":3419,"implemented":true,"kind":"function","modifiers":[{"id":3354,"modifierName":{"id":3353,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"2472:10:14","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2472:10:14"}],"name":"addOwnerWithThreshold","nodeType":"FunctionDefinition","parameters":{"id":3352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3349,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":3419,"src":"2430:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3348,"name":"address","nodeType":"ElementaryTypeName","src":"2430:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3351,"mutability":"mutable","name":"_threshold","nodeType":"VariableDeclaration","scope":3419,"src":"2445:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3350,"name":"uint256","nodeType":"ElementaryTypeName","src":"2445:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2429:35:14"},"returnParameters":{"id":3355,"nodeType":"ParameterList","parameters":[],"src":"2483:0:14"},"scope":3710,"src":"2399:625:14","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3495,"nodeType":"Block","src":"3473:604:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3432,"name":"ownerCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"3568:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3581:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3568:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3435,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3426,"src":"3586:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3568:28:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323031","id":3437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3598:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ed3cfd606bc0ca63de16ac40539251d9539eb77db0a0d075dd487d4cf1c74c7","typeString":"literal_string \"GS201\""},"value":"GS201"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2ed3cfd606bc0ca63de16ac40539251d9539eb77db0a0d075dd487d4cf1c74c7","typeString":"literal_string \"GS201\""}],"id":3431,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3560:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3560:46:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3439,"nodeType":"ExpressionStatement","src":"3560:46:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3441,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"3704:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3721: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":3443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3713:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3442,"name":"address","nodeType":"ElementaryTypeName","src":"3713:7:14","typeDescriptions":{}}},"id":3445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3713:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3704:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3447,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"3727:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3448,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"3736:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3727:24:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3704:47:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323033","id":3451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3753:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""},"value":"GS203"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""}],"id":3440,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3696:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3696:65:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3453,"nodeType":"ExpressionStatement","src":"3696:65:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3455,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"3779:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3457,"indexExpression":{"id":3456,"name":"prevOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3422,"src":"3786:9:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3779:17:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3458,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"3800:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3779:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323035","id":3460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3807:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_f86d3c4b40d399421f213105cf28bb5b688028c0e3d9bd9eb6f879f0bebe6c39","typeString":"literal_string \"GS205\""},"value":"GS205"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f86d3c4b40d399421f213105cf28bb5b688028c0e3d9bd9eb6f879f0bebe6c39","typeString":"literal_string \"GS205\""}],"id":3454,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3771:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3771:44:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3462,"nodeType":"ExpressionStatement","src":"3771:44:14"},{"expression":{"id":3469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3463,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"3825:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3465,"indexExpression":{"id":3464,"name":"prevOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3422,"src":"3832:9:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3825:17:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3466,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"3845:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3468,"indexExpression":{"id":3467,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"3852:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3845:13:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3825:33:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3470,"nodeType":"ExpressionStatement","src":"3825:33:14"},{"expression":{"id":3478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3471,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"3868:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3473,"indexExpression":{"id":3472,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"3875:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3868:13:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":3476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3892: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":3475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3884:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3474,"name":"address","nodeType":"ElementaryTypeName","src":"3884:7:14","typeDescriptions":{}}},"id":3477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3884:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3868:26:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3479,"nodeType":"ExpressionStatement","src":"3868:26:14"},{"expression":{"id":3481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"3904:12:14","subExpression":{"id":3480,"name":"ownerCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"3904:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3482,"nodeType":"ExpressionStatement","src":"3904:12:14"},{"eventCall":{"arguments":[{"id":3484,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"3944:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3483,"name":"RemovedOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3211,"src":"3931:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3931:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3486,"nodeType":"EmitStatement","src":"3926:24:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3487,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"4018:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3488,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3426,"src":"4031:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4018:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3494,"nodeType":"IfStatement","src":"4014:56:14","trueBody":{"expression":{"arguments":[{"id":3491,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3426,"src":"4059:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3490,"name":"changeThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3627,"src":"4043:15:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4043:27:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3493,"nodeType":"ExpressionStatement","src":"4043:27:14"}}]},"documentation":{"id":3420,"nodeType":"StructuredDocumentation","src":"3030:345:14","text":" @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\n @dev This can only be done via a Safe transaction.\n @param prevOwner Owner that pointed to the owner to be removed in the linked list\n @param owner Owner address to be removed.\n @param _threshold New threshold."},"functionSelector":"f8dc5dd9","id":3496,"implemented":true,"kind":"function","modifiers":[{"id":3429,"modifierName":{"id":3428,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"3462:10:14","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3462:10:14"}],"name":"removeOwner","nodeType":"FunctionDefinition","parameters":{"id":3427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3422,"mutability":"mutable","name":"prevOwner","nodeType":"VariableDeclaration","scope":3496,"src":"3401:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3421,"name":"address","nodeType":"ElementaryTypeName","src":"3401:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3424,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":3496,"src":"3420:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3423,"name":"address","nodeType":"ElementaryTypeName","src":"3420:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3426,"mutability":"mutable","name":"_threshold","nodeType":"VariableDeclaration","scope":3496,"src":"3435:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3425,"name":"uint256","nodeType":"ElementaryTypeName","src":"3435:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3400:54:14"},"returnParameters":{"id":3430,"nodeType":"ParameterList","parameters":[],"src":"3473:0:14"},"scope":3710,"src":"3380:697:14","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3595,"nodeType":"Block","src":"4508:704:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3509,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"4600:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4620: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":3511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4612:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3510,"name":"address","nodeType":"ElementaryTypeName","src":"4612:7:14","typeDescriptions":{}}},"id":3513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4612:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4600:22:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3515,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"4626:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3516,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"4638:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4626:27:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4600:53:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3519,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"4657:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":3522,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4677:4:14","typeDescriptions":{"typeIdentifier":"t_contract$_OwnerManager_$3710","typeString":"contract OwnerManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnerManager_$3710","typeString":"contract OwnerManager"}],"id":3521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4669:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3520,"name":"address","nodeType":"ElementaryTypeName","src":"4669:7:14","typeDescriptions":{}}},"id":3523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4669:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4657:25:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4600:82:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323033","id":3526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4684:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""},"value":"GS203"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""}],"id":3508,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4592:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4592:100:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3528,"nodeType":"ExpressionStatement","src":"4592:100:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3530,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"4750:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3532,"indexExpression":{"id":3531,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"4757:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4750:16:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4778: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":3534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4770:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3533,"name":"address","nodeType":"ElementaryTypeName","src":"4770:7:14","typeDescriptions":{}}},"id":3536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4770:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4750:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323034","id":3538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4782:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_bd322b68614692ef7b503763b6ccedf066a7ae3f91196a908df3c549d078f597","typeString":"literal_string \"GS204\""},"value":"GS204"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bd322b68614692ef7b503763b6ccedf066a7ae3f91196a908df3c549d078f597","typeString":"literal_string \"GS204\""}],"id":3529,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4742:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4742:48:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3540,"nodeType":"ExpressionStatement","src":"4742:48:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3542,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"4891:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4911: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":3544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4903:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3543,"name":"address","nodeType":"ElementaryTypeName","src":"4903:7:14","typeDescriptions":{}}},"id":3546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4903:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4891:22:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3548,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"4917:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3549,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"4929:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4917:27:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4891:53:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323033","id":3552,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4946:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""},"value":"GS203"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3d415fb64f163720f719509288c33af2675ad2c80f86a95800d94f19c802a300","typeString":"literal_string \"GS203\""}],"id":3541,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4883:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4883:71:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3554,"nodeType":"ExpressionStatement","src":"4883:71:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3556,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"4972:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3558,"indexExpression":{"id":3557,"name":"prevOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"4979:9:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4972:17:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3559,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"4993:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4972:29:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323035","id":3561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5003:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_f86d3c4b40d399421f213105cf28bb5b688028c0e3d9bd9eb6f879f0bebe6c39","typeString":"literal_string \"GS205\""},"value":"GS205"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f86d3c4b40d399421f213105cf28bb5b688028c0e3d9bd9eb6f879f0bebe6c39","typeString":"literal_string \"GS205\""}],"id":3555,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4964:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4964:47:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3563,"nodeType":"ExpressionStatement","src":"4964:47:14"},{"expression":{"id":3570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3564,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"5021:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3566,"indexExpression":{"id":3565,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"5028:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5021:16:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3567,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"5040:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3569,"indexExpression":{"id":3568,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"5047:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5040:16:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5021:35:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3571,"nodeType":"ExpressionStatement","src":"5021:35:14"},{"expression":{"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3572,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"5066:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3574,"indexExpression":{"id":3573,"name":"prevOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"5073:9:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5066:17:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3575,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"5086:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5066:28:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3577,"nodeType":"ExpressionStatement","src":"5066:28:14"},{"expression":{"id":3585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3578,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"5104:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3580,"indexExpression":{"id":3579,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"5111:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5104:16:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":3583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5131: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":3582,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5123:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3581,"name":"address","nodeType":"ElementaryTypeName","src":"5123:7:14","typeDescriptions":{}}},"id":3584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5123:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"5104:29:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3586,"nodeType":"ExpressionStatement","src":"5104:29:14"},{"eventCall":{"arguments":[{"id":3588,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"5161:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3587,"name":"RemovedOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3211,"src":"5148:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5148:22:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3590,"nodeType":"EmitStatement","src":"5143:27:14"},{"eventCall":{"arguments":[{"id":3592,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"5196:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3591,"name":"AddedOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"5185:10:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5185:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3594,"nodeType":"EmitStatement","src":"5180:25:14"}]},"documentation":{"id":3497,"nodeType":"StructuredDocumentation","src":"4083:328:14","text":" @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\n @dev This can only be done via a Safe transaction.\n @param prevOwner Owner that pointed to the owner to be replaced in the linked list\n @param oldOwner Owner address to be replaced.\n @param newOwner New owner address."},"functionSelector":"e318b52b","id":3596,"implemented":true,"kind":"function","modifiers":[{"id":3506,"modifierName":{"id":3505,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"4497:10:14","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"4497:10:14"}],"name":"swapOwner","nodeType":"FunctionDefinition","parameters":{"id":3504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3499,"mutability":"mutable","name":"prevOwner","nodeType":"VariableDeclaration","scope":3596,"src":"4435:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3498,"name":"address","nodeType":"ElementaryTypeName","src":"4435:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3501,"mutability":"mutable","name":"oldOwner","nodeType":"VariableDeclaration","scope":3596,"src":"4454:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3500,"name":"address","nodeType":"ElementaryTypeName","src":"4454:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3503,"mutability":"mutable","name":"newOwner","nodeType":"VariableDeclaration","scope":3596,"src":"4472:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3502,"name":"address","nodeType":"ElementaryTypeName","src":"4472:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4434:55:14"},"returnParameters":{"id":3507,"nodeType":"ParameterList","parameters":[],"src":"4508:0:14"},"scope":3710,"src":"4416:796:14","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3626,"nodeType":"Block","src":"5461:297:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3605,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3599,"src":"5548:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3606,"name":"ownerCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"5562:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5548:24:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323031","id":3608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5574:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ed3cfd606bc0ca63de16ac40539251d9539eb77db0a0d075dd487d4cf1c74c7","typeString":"literal_string \"GS201\""},"value":"GS201"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2ed3cfd606bc0ca63de16ac40539251d9539eb77db0a0d075dd487d4cf1c74c7","typeString":"literal_string \"GS201\""}],"id":3604,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5540:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5540:42:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3610,"nodeType":"ExpressionStatement","src":"5540:42:14"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3612,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3599,"src":"5652:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":3613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5666:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5652:15:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753323032","id":3615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5669:7:14","typeDescriptions":{"typeIdentifier":"t_stringliteral_a5f8340ff5526fa73c9197322cd5a1c742b87b5fdfeb41a9c278b80dab01159b","typeString":"literal_string \"GS202\""},"value":"GS202"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a5f8340ff5526fa73c9197322cd5a1c742b87b5fdfeb41a9c278b80dab01159b","typeString":"literal_string \"GS202\""}],"id":3611,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5644:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5644:33:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3617,"nodeType":"ExpressionStatement","src":"5644:33:14"},{"expression":{"id":3620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3618,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"5687:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3619,"name":"_threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3599,"src":"5699:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5687:22:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3621,"nodeType":"ExpressionStatement","src":"5687:22:14"},{"eventCall":{"arguments":[{"id":3623,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"5741:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3622,"name":"ChangedThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3215,"src":"5724:16:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5724:27:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3625,"nodeType":"EmitStatement","src":"5719:32:14"}]},"documentation":{"id":3597,"nodeType":"StructuredDocumentation","src":"5218:175:14","text":" @notice Changes the threshold of the Safe to `_threshold`.\n @dev This can only be done via a Safe transaction.\n @param _threshold New threshold."},"functionSelector":"694e80c3","id":3627,"implemented":true,"kind":"function","modifiers":[{"id":3602,"modifierName":{"id":3601,"name":"authorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3791,"src":"5450:10:14","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"5450:10:14"}],"name":"changeThreshold","nodeType":"FunctionDefinition","parameters":{"id":3600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3599,"mutability":"mutable","name":"_threshold","nodeType":"VariableDeclaration","scope":3627,"src":"5423:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3598,"name":"uint256","nodeType":"ElementaryTypeName","src":"5423:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5422:20:14"},"returnParameters":{"id":3603,"nodeType":"ParameterList","parameters":[],"src":"5461:0:14"},"scope":3710,"src":"5398:360:14","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3635,"nodeType":"Block","src":"5969:33:14","statements":[{"expression":{"id":3633,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"5986:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3632,"id":3634,"nodeType":"Return","src":"5979:16:14"}]},"documentation":{"id":3628,"nodeType":"StructuredDocumentation","src":"5764:146:14","text":" @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\n @return Threshold number."},"functionSelector":"e75235b8","id":3636,"implemented":true,"kind":"function","modifiers":[],"name":"getThreshold","nodeType":"FunctionDefinition","parameters":{"id":3629,"nodeType":"ParameterList","parameters":[],"src":"5936:2:14"},"returnParameters":{"id":3632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3631,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3636,"src":"5960:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3630,"name":"uint256","nodeType":"ElementaryTypeName","src":"5960:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5959:9:14"},"scope":3710,"src":"5915:87:14","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3657,"nodeType":"Block","src":"6199:79:14","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3644,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3639,"src":"6216:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3645,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"6225:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6216:24:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3647,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"6244:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3649,"indexExpression":{"id":3648,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3639,"src":"6251:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6244:13:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6269: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":3651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6261:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3650,"name":"address","nodeType":"ElementaryTypeName","src":"6261:7:14","typeDescriptions":{}}},"id":3653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6261:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"6244:27:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6216:55:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3643,"id":3656,"nodeType":"Return","src":"6209:62:14"}]},"documentation":{"id":3637,"nodeType":"StructuredDocumentation","src":"6008:127:14","text":" @notice Returns if `owner` is an owner of the Safe.\n @return Boolean if owner is an owner of the Safe."},"functionSelector":"2f54bf6e","id":3658,"implemented":true,"kind":"function","modifiers":[],"name":"isOwner","nodeType":"FunctionDefinition","parameters":{"id":3640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3639,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":3658,"src":"6157:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3638,"name":"address","nodeType":"ElementaryTypeName","src":"6157:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6156:15:14"},"returnParameters":{"id":3643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3642,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3658,"src":"6193:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3641,"name":"bool","nodeType":"ElementaryTypeName","src":"6193:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6192:6:14"},"scope":3710,"src":"6140:138:14","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3708,"nodeType":"Block","src":"6443:377:14","statements":[{"assignments":[3669],"declarations":[{"constant":false,"id":3669,"mutability":"mutable","name":"array","nodeType":"VariableDeclaration","scope":3708,"src":"6453:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3667,"name":"address","nodeType":"ElementaryTypeName","src":"6453:7:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3668,"nodeType":"ArrayTypeName","src":"6453:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":3675,"initialValue":{"arguments":[{"id":3673,"name":"ownerCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"6492:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6478:13:14","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":3670,"name":"address","nodeType":"ElementaryTypeName","src":"6482:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3671,"nodeType":"ArrayTypeName","src":"6482:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":3674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6478:25:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6453:50:14"},{"assignments":[3677],"declarations":[{"constant":false,"id":3677,"mutability":"mutable","name":"index","nodeType":"VariableDeclaration","scope":3708,"src":"6547:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3676,"name":"uint256","nodeType":"ElementaryTypeName","src":"6547:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3679,"initialValue":{"hexValue":"30","id":3678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6563:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6547:17:14"},{"assignments":[3681],"declarations":[{"constant":false,"id":3681,"mutability":"mutable","name":"currentOwner","nodeType":"VariableDeclaration","scope":3708,"src":"6574:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3680,"name":"address","nodeType":"ElementaryTypeName","src":"6574:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3685,"initialValue":{"baseExpression":{"id":3682,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"6597:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3684,"indexExpression":{"id":3683,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"6604:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6597:23:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6574:46:14"},{"body":{"id":3704,"nodeType":"Block","src":"6670:122:14","statements":[{"expression":{"id":3693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3689,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3669,"src":"6684:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3691,"indexExpression":{"id":3690,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3677,"src":"6690:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6684:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3692,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"6699:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6684:27:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3694,"nodeType":"ExpressionStatement","src":"6684:27:14"},{"expression":{"id":3699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3695,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"6725:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3696,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"6740:6:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":3698,"indexExpression":{"id":3697,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"6747:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6740:20:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6725:35:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3700,"nodeType":"ExpressionStatement","src":"6725:35:14"},{"expression":{"id":3702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6774:7:14","subExpression":{"id":3701,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3677,"src":"6774:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3703,"nodeType":"ExpressionStatement","src":"6774:7:14"}]},"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3686,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"6637:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3687,"name":"SENTINEL_OWNERS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"6653:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6637:31:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3705,"nodeType":"WhileStatement","src":"6630:162:14"},{"expression":{"id":3706,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3669,"src":"6808:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":3664,"id":3707,"nodeType":"Return","src":"6801:12:14"}]},"documentation":{"id":3659,"nodeType":"StructuredDocumentation","src":"6284:94:14","text":" @notice Returns a list of Safe owners.\n @return Array of Safe owners."},"functionSelector":"a0e67e2b","id":3709,"implemented":true,"kind":"function","modifiers":[],"name":"getOwners","nodeType":"FunctionDefinition","parameters":{"id":3660,"nodeType":"ParameterList","parameters":[],"src":"6401:2:14"},"returnParameters":{"id":3664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3663,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3709,"src":"6425:16:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3661,"name":"address","nodeType":"ElementaryTypeName","src":"6425:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3662,"nodeType":"ArrayTypeName","src":"6425:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6424:18:14"},"scope":3710,"src":"6383:437:14","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":3711,"src":"440:6382:14"}],"src":"42:6781:14"},"id":14},"contracts/common/Enum.sol":{"ast":{"absolutePath":"contracts/common/Enum.sol","exportedSymbols":{"Enum":[3717]},"id":3718,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3712,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:15"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3713,"nodeType":"StructuredDocumentation","src":"75:109:15","text":" @title Enum - Collection of enums used in Safe contracts.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3717,"linearizedBaseContracts":[3717],"name":"Enum","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Enum.Operation","id":3716,"members":[{"id":3714,"name":"Call","nodeType":"EnumValue","src":"239:4:15"},{"id":3715,"name":"DelegateCall","nodeType":"EnumValue","src":"253:12:15"}],"name":"Operation","nodeType":"EnumDefinition","src":"214:57:15"}],"scope":3718,"src":"185:88:15"}],"src":"42:232:15"},"id":15},"contracts/common/NativeCurrencyPaymentFallback.sol":{"ast":{"absolutePath":"contracts/common/NativeCurrencyPaymentFallback.sol","exportedSymbols":{"NativeCurrencyPaymentFallback":[3739]},"id":3740,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3719,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:16"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3720,"nodeType":"StructuredDocumentation","src":"75:157:16","text":" @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3739,"linearizedBaseContracts":[3739],"name":"NativeCurrencyPaymentFallback","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":3726,"name":"SafeReceived","nodeType":"EventDefinition","parameters":{"id":3725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3722,"indexed":true,"mutability":"mutable","name":"sender","nodeType":"VariableDeclaration","scope":3726,"src":"306:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3721,"name":"address","nodeType":"ElementaryTypeName","src":"306:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3724,"indexed":false,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":3726,"src":"330:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3723,"name":"uint256","nodeType":"ElementaryTypeName","src":"330:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"305:39:16"},"src":"287:58:16"},{"body":{"id":3737,"nodeType":"Block","src":"523:57:16","statements":[{"eventCall":{"arguments":[{"expression":{"id":3731,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"551:3:16","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"551:10:16","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":3733,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"563:3:16","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"563:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3730,"name":"SafeReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3726,"src":"538:12:16","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"538:35:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3736,"nodeType":"EmitStatement","src":"533:40:16"}]},"documentation":{"id":3727,"nodeType":"StructuredDocumentation","src":"351:140:16","text":" @notice Receive function accepts native currency transactions.\n @dev Emits an event with sender and received value."},"id":3738,"implemented":true,"kind":"receive","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3728,"nodeType":"ParameterList","parameters":[],"src":"503:2:16"},"returnParameters":{"id":3729,"nodeType":"ParameterList","parameters":[],"src":"523:0:16"},"scope":3739,"src":"496:84:16","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":3740,"src":"233:349:16"}],"src":"42:541:16"},"id":16},"contracts/common/SecuredTokenTransfer.sol":{"ast":{"absolutePath":"contracts/common/SecuredTokenTransfer.sol","exportedSymbols":{"SecuredTokenTransfer":[3766]},"id":3767,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3741,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:17"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3742,"nodeType":"StructuredDocumentation","src":"75:104:17","text":" @title SecuredTokenTransfer - Secure token transfer.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3766,"linearizedBaseContracts":[3766],"name":"SecuredTokenTransfer","nodeType":"ContractDefinition","nodes":[{"body":{"id":3764,"nodeType":"Block","src":"871:796:17","statements":[{"assignments":[3755],"declarations":[{"constant":false,"id":3755,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":3764,"src":"942:17:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3754,"name":"bytes","nodeType":"ElementaryTypeName","src":"942:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3762,"initialValue":{"arguments":[{"hexValue":"30786139303539636262","id":3758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"985:10:17","typeDescriptions":{"typeIdentifier":"t_rational_2835717307_by_1","typeString":"int_const 2835717307"},"value":"0xa9059cbb"},{"id":3759,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3747,"src":"997:8:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3760,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3749,"src":"1007:6:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2835717307_by_1","typeString":"int_const 2835717307"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3756,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"962:3:17","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"962:22:17","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":3761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"962:52:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"942:72:17"},{"AST":{"nodeType":"YulBlock","src":"1089:572:17","statements":[{"nodeType":"YulVariableDeclaration","src":"1270:87:17","value":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1294:3:17"},"nodeType":"YulFunctionCall","src":"1294:5:17"},{"kind":"number","nodeType":"YulLiteral","src":"1301:5:17","type":"","value":"10000"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1290:3:17"},"nodeType":"YulFunctionCall","src":"1290:17:17"},{"name":"token","nodeType":"YulIdentifier","src":"1309:5:17"},{"kind":"number","nodeType":"YulLiteral","src":"1316:1:17","type":"","value":"0"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1323:4:17"},{"kind":"number","nodeType":"YulLiteral","src":"1329:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1319:3:17"},"nodeType":"YulFunctionCall","src":"1319:15:17"},{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1342:4:17"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1336:5:17"},"nodeType":"YulFunctionCall","src":"1336:11:17"},{"kind":"number","nodeType":"YulLiteral","src":"1349:1:17","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1352:4:17","type":"","value":"0x20"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"1285:4:17"},"nodeType":"YulFunctionCall","src":"1285:72:17"},"variables":[{"name":"success","nodeType":"YulTypedName","src":"1274:7:17","type":""}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"1413:54:17","statements":[{"nodeType":"YulAssignment","src":"1431:22:17","value":{"name":"success","nodeType":"YulIdentifier","src":"1446:7:17"},"variableNames":[{"name":"transferred","nodeType":"YulIdentifier","src":"1431:11:17"}]}]},"nodeType":"YulCase","src":"1406:61:17","value":{"kind":"number","nodeType":"YulLiteral","src":"1411:1:17","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"1490:92:17","statements":[{"nodeType":"YulAssignment","src":"1508:60:17","value":{"arguments":[{"arguments":[{"arguments":[{"name":"success","nodeType":"YulIdentifier","src":"1540:7:17"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1533:6:17"},"nodeType":"YulFunctionCall","src":"1533:15:17"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1563:1:17","type":"","value":"0"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1557:5:17"},"nodeType":"YulFunctionCall","src":"1557:8:17"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1550:6:17"},"nodeType":"YulFunctionCall","src":"1550:16:17"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1530:2:17"},"nodeType":"YulFunctionCall","src":"1530:37:17"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1523:6:17"},"nodeType":"YulFunctionCall","src":"1523:45:17"},"variableNames":[{"name":"transferred","nodeType":"YulIdentifier","src":"1508:11:17"}]}]},"nodeType":"YulCase","src":"1480:102:17","value":{"kind":"number","nodeType":"YulLiteral","src":"1485:4:17","type":"","value":"0x20"}},{"body":{"nodeType":"YulBlock","src":"1603:48:17","statements":[{"nodeType":"YulAssignment","src":"1621:16:17","value":{"kind":"number","nodeType":"YulLiteral","src":"1636:1:17","type":"","value":"0"},"variableNames":[{"name":"transferred","nodeType":"YulIdentifier","src":"1621:11:17"}]}]},"nodeType":"YulCase","src":"1595:56:17","value":"default"}],"expression":{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1377:14:17"},"nodeType":"YulFunctionCall","src":"1377:16:17"},"nodeType":"YulSwitch","src":"1370:281:17"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":3755,"isOffset":false,"isSlot":false,"src":"1323:4:17","valueSize":1},{"declaration":3755,"isOffset":false,"isSlot":false,"src":"1342:4:17","valueSize":1},{"declaration":3745,"isOffset":false,"isSlot":false,"src":"1309:5:17","valueSize":1},{"declaration":3752,"isOffset":false,"isSlot":false,"src":"1431:11:17","valueSize":1},{"declaration":3752,"isOffset":false,"isSlot":false,"src":"1508:11:17","valueSize":1},{"declaration":3752,"isOffset":false,"isSlot":false,"src":"1621:11:17","valueSize":1}],"id":3763,"nodeType":"InlineAssembly","src":"1080:581:17"}]},"documentation":{"id":3743,"nodeType":"StructuredDocumentation","src":"225:533:17","text":" @notice Transfers a token and returns a boolean if it was a success\n @dev It checks the return data of the transfer call and returns true if the transfer was successful.\n      It doesn't check if the `token` address is a contract or not.\n @param token Token that should be transferred\n @param receiver Receiver to whom the token should be transferred\n @param amount The amount of tokens that should be transferred\n @return transferred Returns true if the transfer was successful"},"id":3765,"implemented":true,"kind":"function","modifiers":[],"name":"transferToken","nodeType":"FunctionDefinition","parameters":{"id":3750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3745,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":3765,"src":"786:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3744,"name":"address","nodeType":"ElementaryTypeName","src":"786:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3747,"mutability":"mutable","name":"receiver","nodeType":"VariableDeclaration","scope":3765,"src":"801:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3746,"name":"address","nodeType":"ElementaryTypeName","src":"801:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3749,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":3765,"src":"819:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3748,"name":"uint256","nodeType":"ElementaryTypeName","src":"819:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"785:49:17"},"returnParameters":{"id":3753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3752,"mutability":"mutable","name":"transferred","nodeType":"VariableDeclaration","scope":3765,"src":"853:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3751,"name":"bool","nodeType":"ElementaryTypeName","src":"853:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"852:18:17"},"scope":3766,"src":"763:904:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3767,"src":"180:1489:17"}],"src":"42:1628:17"},"id":17},"contracts/common/SelfAuthorized.sol":{"ast":{"absolutePath":"contracts/common/SelfAuthorized.sol","exportedSymbols":{"SelfAuthorized":[3792]},"id":3793,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3768,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:18"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3769,"nodeType":"StructuredDocumentation","src":"75:133:18","text":" @title SelfAuthorized - Authorizes current contract to perform actions to itself.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3792,"linearizedBaseContracts":[3792],"name":"SelfAuthorized","nodeType":"ContractDefinition","nodes":[{"body":{"id":3783,"nodeType":"Block","src":"288:62:18","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3773,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"306:3:18","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"306:10:18","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3777,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"328:4:18","typeDescriptions":{"typeIdentifier":"t_contract$_SelfAuthorized_$3792","typeString":"contract SelfAuthorized"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SelfAuthorized_$3792","typeString":"contract SelfAuthorized"}],"id":3776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"320:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3775,"name":"address","nodeType":"ElementaryTypeName","src":"320:7:18","typeDescriptions":{}}},"id":3778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"320:13:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"306:27:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753303331","id":3780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"335:7:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_b7248be3e8887f14d79f63d350787adcdb5e12b47898ebd6ef2aacf660fc9f17","typeString":"literal_string \"GS031\""},"value":"GS031"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b7248be3e8887f14d79f63d350787adcdb5e12b47898ebd6ef2aacf660fc9f17","typeString":"literal_string \"GS031\""}],"id":3772,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"298:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"298:45:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3782,"nodeType":"ExpressionStatement","src":"298:45:18"}]},"id":3784,"implemented":true,"kind":"function","modifiers":[],"name":"requireSelfCall","nodeType":"FunctionDefinition","parameters":{"id":3770,"nodeType":"ParameterList","parameters":[],"src":"272:2:18"},"returnParameters":{"id":3771,"nodeType":"ParameterList","parameters":[],"src":"288:0:18"},"scope":3792,"src":"248:102:18","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":3790,"nodeType":"Block","src":"378:162:18","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3786,"name":"requireSelfCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"505:15:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":3787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"505:17:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3788,"nodeType":"ExpressionStatement","src":"505:17:18"},{"id":3789,"nodeType":"PlaceholderStatement","src":"532:1:18"}]},"id":3791,"name":"authorized","nodeType":"ModifierDefinition","parameters":{"id":3785,"nodeType":"ParameterList","parameters":[],"src":"375:2:18"},"src":"356:184:18","virtual":false,"visibility":"internal"}],"scope":3793,"src":"209:333:18"}],"src":"42:501:18"},"id":18},"contracts/common/SignatureDecoder.sol":{"ast":{"absolutePath":"contracts/common/SignatureDecoder.sol","exportedSymbols":{"SignatureDecoder":[3812]},"id":3813,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3794,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:19"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3795,"nodeType":"StructuredDocumentation","src":"75:113:19","text":" @title SignatureDecoder - Decodes signatures encoded as bytes\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3812,"linearizedBaseContracts":[3812],"name":"SignatureDecoder","nodeType":"ContractDefinition","nodes":[{"body":{"id":3810,"nodeType":"Block","src":"1063:628:19","statements":[{"AST":{"nodeType":"YulBlock","src":"1138:547:19","statements":[{"nodeType":"YulVariableDeclaration","src":"1152:34:19","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1176:4:19","type":"","value":"0x41"},{"name":"pos","nodeType":"YulIdentifier","src":"1182:3:19"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1172:3:19"},"nodeType":"YulFunctionCall","src":"1172:14:19"},"variables":[{"name":"signaturePos","nodeType":"YulTypedName","src":"1156:12:19","type":""}]},{"nodeType":"YulAssignment","src":"1199:52:19","value":{"arguments":[{"arguments":[{"name":"signatures","nodeType":"YulIdentifier","src":"1214:10:19"},{"arguments":[{"name":"signaturePos","nodeType":"YulIdentifier","src":"1230:12:19"},{"kind":"number","nodeType":"YulLiteral","src":"1244:4:19","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1226:3:19"},"nodeType":"YulFunctionCall","src":"1226:23:19"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1210:3:19"},"nodeType":"YulFunctionCall","src":"1210:40:19"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1204:5:19"},"nodeType":"YulFunctionCall","src":"1204:47:19"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"1199:1:19"}]},{"nodeType":"YulAssignment","src":"1264:52:19","value":{"arguments":[{"arguments":[{"name":"signatures","nodeType":"YulIdentifier","src":"1279:10:19"},{"arguments":[{"name":"signaturePos","nodeType":"YulIdentifier","src":"1295:12:19"},{"kind":"number","nodeType":"YulLiteral","src":"1309:4:19","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1291:3:19"},"nodeType":"YulFunctionCall","src":"1291:23:19"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1275:3:19"},"nodeType":"YulFunctionCall","src":"1275:40:19"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1269:5:19"},"nodeType":"YulFunctionCall","src":"1269:47:19"},"variableNames":[{"name":"s","nodeType":"YulIdentifier","src":"1264:1:19"}]},{"nodeType":"YulAssignment","src":"1612:63:19","value":{"arguments":[{"arguments":[{"arguments":[{"name":"signatures","nodeType":"YulIdentifier","src":"1631:10:19"},{"arguments":[{"name":"signaturePos","nodeType":"YulIdentifier","src":"1647:12:19"},{"kind":"number","nodeType":"YulLiteral","src":"1661:4:19","type":"","value":"0x41"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1643:3:19"},"nodeType":"YulFunctionCall","src":"1643:23:19"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1627:3:19"},"nodeType":"YulFunctionCall","src":"1627:40:19"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1621:5:19"},"nodeType":"YulFunctionCall","src":"1621:47:19"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:19","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1617:3:19"},"nodeType":"YulFunctionCall","src":"1617:58:19"},"variableNames":[{"name":"v","nodeType":"YulIdentifier","src":"1612:1:19"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":3800,"isOffset":false,"isSlot":false,"src":"1182:3:19","valueSize":1},{"declaration":3805,"isOffset":false,"isSlot":false,"src":"1199:1:19","valueSize":1},{"declaration":3807,"isOffset":false,"isSlot":false,"src":"1264:1:19","valueSize":1},{"declaration":3798,"isOffset":false,"isSlot":false,"src":"1214:10:19","valueSize":1},{"declaration":3798,"isOffset":false,"isSlot":false,"src":"1279:10:19","valueSize":1},{"declaration":3798,"isOffset":false,"isSlot":false,"src":"1631:10:19","valueSize":1},{"declaration":3803,"isOffset":false,"isSlot":false,"src":"1612:1:19","valueSize":1}],"id":3809,"nodeType":"InlineAssembly","src":"1129:556:19"}]},"documentation":{"id":3796,"nodeType":"StructuredDocumentation","src":"230:712:19","text":" @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\n @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\n      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\n      Compact means uint8 is not padded to 32 bytes.\n @param pos Which signature to read.\n            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\n @param signatures Concatenated {r, s, v} signatures.\n @return v Recovery ID or Safe signature type.\n @return r Output value r of the signature.\n @return s Output value s of the signature."},"id":3811,"implemented":true,"kind":"function","modifiers":[],"name":"signatureSplit","nodeType":"FunctionDefinition","parameters":{"id":3801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3798,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":3811,"src":"971:23:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3797,"name":"bytes","nodeType":"ElementaryTypeName","src":"971:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3800,"mutability":"mutable","name":"pos","nodeType":"VariableDeclaration","scope":3811,"src":"996:11:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3799,"name":"uint256","nodeType":"ElementaryTypeName","src":"996:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:38:19"},"returnParameters":{"id":3808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3803,"mutability":"mutable","name":"v","nodeType":"VariableDeclaration","scope":3811,"src":"1032:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3802,"name":"uint8","nodeType":"ElementaryTypeName","src":"1032:5:19","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3805,"mutability":"mutable","name":"r","nodeType":"VariableDeclaration","scope":3811,"src":"1041:9:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3804,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1041:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3807,"mutability":"mutable","name":"s","nodeType":"VariableDeclaration","scope":3811,"src":"1052:9:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3806,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1052:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1031:31:19"},"scope":3812,"src":"947:744:19","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3813,"src":"189:1504:19"}],"src":"42:1652:19"},"id":19},"contracts/common/Singleton.sol":{"ast":{"absolutePath":"contracts/common/Singleton.sol","exportedSymbols":{"Singleton":[3818]},"id":3819,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3814,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:20"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3815,"nodeType":"StructuredDocumentation","src":"75:238:20","text":" @title Singleton - Base for singleton contracts (should always be the first super contract)\n        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":3818,"linearizedBaseContracts":[3818],"name":"Singleton","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":3817,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":3818,"src":"551:25:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3816,"name":"address","nodeType":"ElementaryTypeName","src":"551:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"}],"scope":3819,"src":"314:265:20"}],"src":"42:538:20"},"id":20},"contracts/common/StorageAccessible.sol":{"ast":{"absolutePath":"contracts/common/StorageAccessible.sol","exportedSymbols":{"StorageAccessible":[3867]},"id":3868,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3820,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:21"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3821,"nodeType":"StructuredDocumentation","src":"75:369:21","text":" @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\n @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\n         It removes a method from the original contract not needed for the Safe contracts.\n @author Gnosis Developers"},"fullyImplemented":true,"id":3867,"linearizedBaseContracts":[3867],"name":"StorageAccessible","nodeType":"ContractDefinition","nodes":[{"body":{"id":3855,"nodeType":"Block","src":"874:375:21","statements":[{"assignments":[3832],"declarations":[{"constant":false,"id":3832,"mutability":"mutable","name":"result","nodeType":"VariableDeclaration","scope":3855,"src":"884:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3831,"name":"bytes","nodeType":"ElementaryTypeName","src":"884:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3839,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3835,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"916:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":3836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"925:2:21","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"916:11:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3834,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"906:9:21","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":3833,"name":"bytes","nodeType":"ElementaryTypeName","src":"910:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":3838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"906:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"884:44:21"},{"body":{"id":3851,"nodeType":"Block","src":"987:233:21","statements":[{"AST":{"nodeType":"YulBlock","src":"1070:140:21","statements":[{"nodeType":"YulVariableDeclaration","src":"1088:37:21","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1110:6:21"},{"name":"index","nodeType":"YulIdentifier","src":"1118:5:21"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1106:3:21"},"nodeType":"YulFunctionCall","src":"1106:18:21"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"1100:5:21"},"nodeType":"YulFunctionCall","src":"1100:25:21"},"variables":[{"name":"word","nodeType":"YulTypedName","src":"1092:4:21","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"1157:6:21"},{"kind":"number","nodeType":"YulLiteral","src":"1165:4:21","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1153:3:21"},"nodeType":"YulFunctionCall","src":"1153:17:21"},{"arguments":[{"name":"index","nodeType":"YulIdentifier","src":"1176:5:21"},{"kind":"number","nodeType":"YulLiteral","src":"1183:4:21","type":"","value":"0x20"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1172:3:21"},"nodeType":"YulFunctionCall","src":"1172:16:21"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1149:3:21"},"nodeType":"YulFunctionCall","src":"1149:40:21"},{"name":"word","nodeType":"YulIdentifier","src":"1191:4:21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1142:6:21"},"nodeType":"YulFunctionCall","src":"1142:54:21"},"nodeType":"YulExpressionStatement","src":"1142:54:21"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":3841,"isOffset":false,"isSlot":false,"src":"1118:5:21","valueSize":1},{"declaration":3841,"isOffset":false,"isSlot":false,"src":"1176:5:21","valueSize":1},{"declaration":3824,"isOffset":false,"isSlot":false,"src":"1110:6:21","valueSize":1},{"declaration":3832,"isOffset":false,"isSlot":false,"src":"1157:6:21","valueSize":1}],"id":3850,"nodeType":"InlineAssembly","src":"1061:149:21"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3844,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3841,"src":"962:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3845,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"970:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"962:14:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3852,"initializationExpression":{"assignments":[3841],"declarations":[{"constant":false,"id":3841,"mutability":"mutable","name":"index","nodeType":"VariableDeclaration","scope":3852,"src":"943:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3840,"name":"uint256","nodeType":"ElementaryTypeName","src":"943:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3843,"initialValue":{"hexValue":"30","id":3842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"959:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"943:17:21"},"loopExpression":{"expression":{"id":3848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"978:7:21","subExpression":{"id":3847,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3841,"src":"978:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3849,"nodeType":"ExpressionStatement","src":"978:7:21"},"nodeType":"ForStatement","src":"938:282:21"},{"expression":{"id":3853,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3832,"src":"1236:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3830,"id":3854,"nodeType":"Return","src":"1229:13:21"}]},"documentation":{"id":3822,"nodeType":"StructuredDocumentation","src":"487:293:21","text":" @notice Reads `length` bytes of storage in the currents contract\n @param offset - the offset in the current contract's storage in words to start reading from\n @param length - the number of words (32 bytes) of data to read\n @return the bytes that were read."},"functionSelector":"5624b25b","id":3856,"implemented":true,"kind":"function","modifiers":[],"name":"getStorageAt","nodeType":"FunctionDefinition","parameters":{"id":3827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3824,"mutability":"mutable","name":"offset","nodeType":"VariableDeclaration","scope":3856,"src":"807:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3823,"name":"uint256","nodeType":"ElementaryTypeName","src":"807:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3826,"mutability":"mutable","name":"length","nodeType":"VariableDeclaration","scope":3856,"src":"823:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3825,"name":"uint256","nodeType":"ElementaryTypeName","src":"823:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"806:32:21"},"returnParameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3856,"src":"860:12:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3828,"name":"bytes","nodeType":"ElementaryTypeName","src":"860:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"859:14:21"},"scope":3867,"src":"785:464:21","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3865,"nodeType":"Block","src":"1972:396:21","statements":[{"AST":{"nodeType":"YulBlock","src":"2047:315:21","statements":[{"nodeType":"YulVariableDeclaration","src":"2061:108:21","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"2089:3:21"},"nodeType":"YulFunctionCall","src":"2089:5:21"},{"name":"targetContract","nodeType":"YulIdentifier","src":"2096:14:21"},{"arguments":[{"name":"calldataPayload","nodeType":"YulIdentifier","src":"2116:15:21"},{"kind":"number","nodeType":"YulLiteral","src":"2133:4:21","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2112:3:21"},"nodeType":"YulFunctionCall","src":"2112:26:21"},{"arguments":[{"name":"calldataPayload","nodeType":"YulIdentifier","src":"2146:15:21"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2140:5:21"},"nodeType":"YulFunctionCall","src":"2140:22:21"},{"kind":"number","nodeType":"YulLiteral","src":"2164:1:21","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2167:1:21","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"2076:12:21"},"nodeType":"YulFunctionCall","src":"2076:93:21"},"variables":[{"name":"success","nodeType":"YulTypedName","src":"2065:7:21","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2190:4:21","type":"","value":"0x00"},{"name":"success","nodeType":"YulIdentifier","src":"2196:7:21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2183:6:21"},"nodeType":"YulFunctionCall","src":"2183:21:21"},"nodeType":"YulExpressionStatement","src":"2183:21:21"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2224:4:21","type":"","value":"0x20"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2230:14:21"},"nodeType":"YulFunctionCall","src":"2230:16:21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2217:6:21"},"nodeType":"YulFunctionCall","src":"2217:30:21"},"nodeType":"YulExpressionStatement","src":"2217:30:21"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2275:4:21","type":"","value":"0x40"},{"kind":"number","nodeType":"YulLiteral","src":"2281:1:21","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2284:14:21"},"nodeType":"YulFunctionCall","src":"2284:16:21"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"2260:14:21"},"nodeType":"YulFunctionCall","src":"2260:41:21"},"nodeType":"YulExpressionStatement","src":"2260:41:21"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2321:1:21","type":"","value":"0"},{"arguments":[{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2328:14:21"},"nodeType":"YulFunctionCall","src":"2328:16:21"},{"kind":"number","nodeType":"YulLiteral","src":"2346:4:21","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2324:3:21"},"nodeType":"YulFunctionCall","src":"2324:27:21"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2314:6:21"},"nodeType":"YulFunctionCall","src":"2314:38:21"},"nodeType":"YulExpressionStatement","src":"2314:38:21"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":3861,"isOffset":false,"isSlot":false,"src":"2116:15:21","valueSize":1},{"declaration":3861,"isOffset":false,"isSlot":false,"src":"2146:15:21","valueSize":1},{"declaration":3859,"isOffset":false,"isSlot":false,"src":"2096:14:21","valueSize":1}],"id":3864,"nodeType":"InlineAssembly","src":"2038:324:21"}]},"documentation":{"id":3857,"nodeType":"StructuredDocumentation","src":"1255:622:21","text":" @dev Performs a delegatecall on a targetContract in the context of self.\n Internally reverts execution to avoid side effects (making it static).\n This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\n Specifically, the `returndata` after a call to this method will be:\n `success:bool || response.length:uint256 || response:bytes`.\n @param targetContract Address of the contract containing the code to execute.\n @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments)."},"functionSelector":"b4faba09","id":3866,"implemented":true,"kind":"function","modifiers":[],"name":"simulateAndRevert","nodeType":"FunctionDefinition","parameters":{"id":3862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3859,"mutability":"mutable","name":"targetContract","nodeType":"VariableDeclaration","scope":3866,"src":"1909:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3858,"name":"address","nodeType":"ElementaryTypeName","src":"1909:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3861,"mutability":"mutable","name":"calldataPayload","nodeType":"VariableDeclaration","scope":3866,"src":"1933:28:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3860,"name":"bytes","nodeType":"ElementaryTypeName","src":"1933:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1908:54:21"},"returnParameters":{"id":3863,"nodeType":"ParameterList","parameters":[],"src":"1972:0:21"},"scope":3867,"src":"1882:486:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3868,"src":"445:1925:21"}],"src":"42:2329:21"},"id":21},"contracts/examples/guards/DebugTransactionGuard.sol":{"ast":{"absolutePath":"contracts/examples/guards/DebugTransactionGuard.sol","exportedSymbols":{"BaseGuard":[2711],"DebugTransactionGuard":[4047],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OwnerManager":[3710],"Safe":[2325],"SafeMath":[4501],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867]},"id":4048,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":3869,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:22"},{"absolutePath":"contracts/common/Enum.sol","file":"../../common/Enum.sol","id":3870,"nodeType":"ImportDirective","scope":4048,"sourceUnit":3718,"src":"75:31:22","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/GuardManager.sol","file":"../../base/GuardManager.sol","id":3871,"nodeType":"ImportDirective","scope":4048,"sourceUnit":2774,"src":"107:37:22","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Safe.sol","file":"../../Safe.sol","id":3872,"nodeType":"ImportDirective","scope":4048,"sourceUnit":2326,"src":"145:24:22","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3874,"name":"BaseGuard","nodeType":"UserDefinedTypeName","referencedDeclaration":2711,"src":"409:9:22","typeDescriptions":{"typeIdentifier":"t_contract$_BaseGuard_$2711","typeString":"contract BaseGuard"}},"id":3875,"nodeType":"InheritanceSpecifier","src":"409:9:22"}],"contractDependencies":[2685,2711,4992],"contractKind":"contract","documentation":{"id":3873,"nodeType":"StructuredDocumentation","src":"171:203:22","text":" @title Debug Transaction Guard - Emits transaction events with extended information.\n @dev This guard is only meant as a development tool and example\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4047,"linearizedBaseContracts":[4047,2711,2685,4992],"name":"DebugTransactionGuard","nodeType":"ContractDefinition","nodes":[{"body":{"id":3878,"nodeType":"Block","src":"495:178:22","statements":[]},"id":3879,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3876,"nodeType":"ParameterList","parameters":[],"src":"483:2:22"},"returnParameters":{"id":3877,"nodeType":"ParameterList","parameters":[],"src":"495:0:22"},"scope":4047,"src":"475:198:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"id":3903,"name":"TransactionDetails","nodeType":"EventDefinition","parameters":{"id":3902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3881,"indexed":true,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":3903,"src":"713:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3880,"name":"address","nodeType":"ElementaryTypeName","src":"713:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3883,"indexed":true,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":3903,"src":"743:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3882,"name":"bytes32","nodeType":"ElementaryTypeName","src":"743:7:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3885,"indexed":false,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":3903,"src":"775:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3884,"name":"address","nodeType":"ElementaryTypeName","src":"775:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3887,"indexed":false,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":3903,"src":"795:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3886,"name":"uint256","nodeType":"ElementaryTypeName","src":"795:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3889,"indexed":false,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":3903,"src":"818:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3888,"name":"bytes","nodeType":"ElementaryTypeName","src":"818:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3891,"indexed":false,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":3903,"src":"838:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":3890,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"838:14:22","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":3893,"indexed":false,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":3903,"src":"872:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3892,"name":"uint256","nodeType":"ElementaryTypeName","src":"872:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3895,"indexed":false,"mutability":"mutable","name":"usesRefund","nodeType":"VariableDeclaration","scope":3903,"src":"899:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3894,"name":"bool","nodeType":"ElementaryTypeName","src":"899:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3897,"indexed":false,"mutability":"mutable","name":"nonce","nodeType":"VariableDeclaration","scope":3903,"src":"924:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3896,"name":"uint256","nodeType":"ElementaryTypeName","src":"924:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3899,"indexed":false,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":3903,"src":"947:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3898,"name":"bytes","nodeType":"ElementaryTypeName","src":"947:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3901,"indexed":false,"mutability":"mutable","name":"executor","nodeType":"VariableDeclaration","scope":3903,"src":"973:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3900,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"703:292:22"},"src":"679:317:22"},{"anonymous":false,"id":3913,"name":"GasUsage","nodeType":"EventDefinition","parameters":{"id":3912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3905,"indexed":true,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":3913,"src":"1017:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3904,"name":"address","nodeType":"ElementaryTypeName","src":"1017:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3907,"indexed":true,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":3913,"src":"1039:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3906,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1039:7:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3909,"indexed":true,"mutability":"mutable","name":"nonce","nodeType":"VariableDeclaration","scope":3913,"src":"1063:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3908,"name":"uint256","nodeType":"ElementaryTypeName","src":"1063:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3911,"indexed":false,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":3913,"src":"1086:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3910,"name":"bool","nodeType":"ElementaryTypeName","src":"1086:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1016:83:22"},"src":"1002:98:22"},{"constant":false,"functionSelector":"ddbdba63","id":3917,"mutability":"mutable","name":"txNonces","nodeType":"VariableDeclaration","scope":4047,"src":"1106:43:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":3916,"keyType":{"id":3914,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1114:7:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1106:27:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":3915,"name":"uint256","nodeType":"ElementaryTypeName","src":"1125:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"baseFunctions":[2677],"body":{"id":4008,"nodeType":"Block","src":"2590:469:22","statements":[{"assignments":[3945],"declarations":[{"constant":false,"id":3945,"mutability":"mutable","name":"nonce","nodeType":"VariableDeclaration","scope":4008,"src":"2600:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3944,"name":"uint256","nodeType":"ElementaryTypeName","src":"2600:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3946,"nodeType":"VariableDeclarationStatement","src":"2600:13:22"},{"assignments":[3948],"declarations":[{"constant":false,"id":3948,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":4008,"src":"2623:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3947,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2623:7:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3949,"nodeType":"VariableDeclarationStatement","src":"2623:14:22"},{"id":3984,"nodeType":"Block","src":"2647:237:22","statements":[{"assignments":[3951],"declarations":[{"constant":false,"id":3951,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":3984,"src":"2661:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},"typeName":{"id":3950,"name":"Safe","nodeType":"UserDefinedTypeName","referencedDeclaration":2325,"src":"2661:4:22","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"visibility":"internal"}],"id":3959,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":3955,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2686:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2686:10:22","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2678:8:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":3953,"name":"address","nodeType":"ElementaryTypeName","src":"2678:8:22","stateMutability":"payable","typeDescriptions":{}}},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2678:19:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3952,"name":"Safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2325,"src":"2673:4:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Safe_$2325_$","typeString":"type(contract Safe)"}},"id":3958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2673:25:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"nodeType":"VariableDeclarationStatement","src":"2661:37:22"},{"expression":{"id":3966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3960,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3945,"src":"2712:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3961,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3951,"src":"2720:4:22","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":3962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":1496,"src":"2720:10:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":3963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2720:12:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2735:1:22","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2720:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2712:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3967,"nodeType":"ExpressionStatement","src":"2712:24:22"},{"expression":{"id":3982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3968,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3948,"src":"2750:6:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3971,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3920,"src":"2783:2:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3972,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3922,"src":"2787:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3973,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3924,"src":"2794:4:22","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3974,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3926,"src":"2800:9:22","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":3975,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3928,"src":"2811:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3976,"name":"baseGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3930,"src":"2822:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3977,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3932,"src":"2831:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3978,"name":"gasToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3934,"src":"2841:8:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3979,"name":"refundReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3936,"src":"2851:14:22","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":3980,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3945,"src":"2867:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3969,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3951,"src":"2759:4:22","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":3970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getTransactionHash","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"2759:23:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address,uint256) view external returns (bytes32)"}},"id":3981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2759:114:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2750:123:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3983,"nodeType":"ExpressionStatement","src":"2750:123:22"}]},{"eventCall":{"arguments":[{"expression":{"id":3986,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2917:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2917:10:22","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":3988,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3948,"src":"2929:6:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3989,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3920,"src":"2937:2:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3990,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3922,"src":"2941:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3991,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3924,"src":"2948:4:22","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3992,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3926,"src":"2954:9:22","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"id":3993,"name":"safeTxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3928,"src":"2965:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3994,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3932,"src":"2976:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2987:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2976:12:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":3997,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3945,"src":"2990:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3998,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3938,"src":"2997:10:22","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3999,"name":"executor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"3009:8:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3985,"name":"TransactionDetails","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"2898:18:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_bool_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (address,bytes32,address,uint256,bytes memory,enum Enum.Operation,uint256,bool,uint256,bytes memory,address)"}},"id":4000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2898:120:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4001,"nodeType":"EmitStatement","src":"2893:125:22"},{"expression":{"id":4006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4002,"name":"txNonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3917,"src":"3028:8:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":4004,"indexExpression":{"id":4003,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3948,"src":"3037:6:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3028:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4005,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3945,"src":"3047:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3028:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4007,"nodeType":"ExpressionStatement","src":"3028:24:22"}]},"documentation":{"id":3918,"nodeType":"StructuredDocumentation","src":"1156:1020:22","text":" @notice Called by the Safe contract before a transaction is executed.\n @param to Destination address of Safe transaction.\n @param value Ether value of Safe transaction.\n @param data Data payload of Safe transaction.\n @param operation Operation type of Safe transaction.\n @param safeTxGas Gas that should be used for the Safe transaction.\n @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund)\n @param gasPrice Gas price that should be used for the payment calculation.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param signatures Signature data that should be verified. Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\n @param executor Account executing the transaction."},"functionSelector":"75f0bb52","id":4009,"implemented":true,"kind":"function","modifiers":[],"name":"checkTransaction","nodeType":"FunctionDefinition","overrides":{"id":3942,"nodeType":"OverrideSpecifier","overrides":[],"src":"2581:8:22"},"parameters":{"id":3941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3920,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":4009,"src":"2216:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3919,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3922,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":4009,"src":"2236:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3921,"name":"uint256","nodeType":"ElementaryTypeName","src":"2236:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3924,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":4009,"src":"2259:17:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3923,"name":"bytes","nodeType":"ElementaryTypeName","src":"2259:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3926,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":4009,"src":"2286:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":3925,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"2286:14:22","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":3928,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":4009,"src":"2320:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3927,"name":"uint256","nodeType":"ElementaryTypeName","src":"2320:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3930,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":4009,"src":"2347:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3929,"name":"uint256","nodeType":"ElementaryTypeName","src":"2347:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3932,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":4009,"src":"2372:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3931,"name":"uint256","nodeType":"ElementaryTypeName","src":"2372:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3934,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":4009,"src":"2398:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3933,"name":"address","nodeType":"ElementaryTypeName","src":"2398:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3936,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":4009,"src":"2476:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3935,"name":"address","nodeType":"ElementaryTypeName","src":"2476:15:22","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3938,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":4009,"src":"2516:23:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3937,"name":"bytes","nodeType":"ElementaryTypeName","src":"2516:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3940,"mutability":"mutable","name":"executor","nodeType":"VariableDeclaration","scope":4009,"src":"2549:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3939,"name":"address","nodeType":"ElementaryTypeName","src":"2549:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2206:365:22"},"returnParameters":{"id":3943,"nodeType":"ParameterList","parameters":[],"src":"2590:0:22"},"scope":4047,"src":"2181:878:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2684],"body":{"id":4045,"nodeType":"Block","src":"3351:190:22","statements":[{"assignments":[4019],"declarations":[{"constant":false,"id":4019,"mutability":"mutable","name":"nonce","nodeType":"VariableDeclaration","scope":4045,"src":"3361:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4018,"name":"uint256","nodeType":"ElementaryTypeName","src":"3361:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4023,"initialValue":{"baseExpression":{"id":4020,"name":"txNonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3917,"src":"3377:8:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":4022,"indexExpression":{"id":4021,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4012,"src":"3386:6:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3377:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3361:32:22"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4025,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4019,"src":"3411:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3420:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3411:10:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f756c64206e6f7420676574206e6f6e6365","id":4028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3423:21:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_4465555eb326d80dfbea9df4f78d5b38cf118b91fac359478b4073ba30ef3f2d","typeString":"literal_string \"Could not get nonce\""},"value":"Could not get nonce"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4465555eb326d80dfbea9df4f78d5b38cf118b91fac359478b4073ba30ef3f2d","typeString":"literal_string \"Could not get nonce\""}],"id":4024,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3403:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3403:42:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4030,"nodeType":"ExpressionStatement","src":"3403:42:22"},{"expression":{"id":4035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4031,"name":"txNonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3917,"src":"3455:8:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":4033,"indexExpression":{"id":4032,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4012,"src":"3464:6:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3455:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":4034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3474:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3455:20:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4036,"nodeType":"ExpressionStatement","src":"3455:20:22"},{"eventCall":{"arguments":[{"expression":{"id":4038,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3499:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3499:10:22","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":4040,"name":"txHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4012,"src":"3511:6:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4041,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4019,"src":"3519:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4042,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4014,"src":"3526:7:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4037,"name":"GasUsage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3913,"src":"3490:8:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,bytes32,uint256,bool)"}},"id":4043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3490:44:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4044,"nodeType":"EmitStatement","src":"3485:49:22"}]},"documentation":{"id":4010,"nodeType":"StructuredDocumentation","src":"3065:204:22","text":" @notice Called by the Safe contract after a transaction is executed.\n @param txHash Hash of the executed transaction.\n @param success True if the transaction was successful."},"functionSelector":"93271368","id":4046,"implemented":true,"kind":"function","modifiers":[],"name":"checkAfterExecution","nodeType":"FunctionDefinition","overrides":{"id":4016,"nodeType":"OverrideSpecifier","overrides":[],"src":"3342:8:22"},"parameters":{"id":4015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4012,"mutability":"mutable","name":"txHash","nodeType":"VariableDeclaration","scope":4046,"src":"3303:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4011,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3303:7:22","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4014,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":4046,"src":"3319:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4013,"name":"bool","nodeType":"ElementaryTypeName","src":"3319:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3302:30:22"},"returnParameters":{"id":4017,"nodeType":"ParameterList","parameters":[],"src":"3351:0:22"},"scope":4047,"src":"3274:267:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4048,"src":"375:3168:22"}],"src":"42:3502:22"},"id":22},"contracts/examples/guards/DelegateCallTransactionGuard.sol":{"ast":{"absolutePath":"contracts/examples/guards/DelegateCallTransactionGuard.sol","exportedSymbols":{"BaseGuard":[2711],"DelegateCallTransactionGuard":[4122],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OwnerManager":[3710],"Safe":[2325],"SafeMath":[4501],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867]},"id":4123,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4049,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:23"},{"absolutePath":"contracts/common/Enum.sol","file":"../../common/Enum.sol","id":4050,"nodeType":"ImportDirective","scope":4123,"sourceUnit":3718,"src":"75:31:23","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/GuardManager.sol","file":"../../base/GuardManager.sol","id":4051,"nodeType":"ImportDirective","scope":4123,"sourceUnit":2774,"src":"107:37:23","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Safe.sol","file":"../../Safe.sol","id":4052,"nodeType":"ImportDirective","scope":4123,"sourceUnit":2326,"src":"145:24:23","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4054,"name":"BaseGuard","nodeType":"UserDefinedTypeName","referencedDeclaration":2711,"src":"346:9:23","typeDescriptions":{"typeIdentifier":"t_contract$_BaseGuard_$2711","typeString":"contract BaseGuard"}},"id":4055,"nodeType":"InheritanceSpecifier","src":"346:9:23"}],"contractDependencies":[2685,2711,4992],"contractKind":"contract","documentation":{"id":4053,"nodeType":"StructuredDocumentation","src":"171:133:23","text":" @title DelegateCallTransactionGuard - Limits delegate calls to a specific target.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4122,"linearizedBaseContracts":[4122,2711,2685,4992],"name":"DelegateCallTransactionGuard","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"73a8c682","id":4057,"mutability":"immutable","name":"allowedTarget","nodeType":"VariableDeclaration","scope":4122,"src":"362:38:23","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4056,"name":"address","nodeType":"ElementaryTypeName","src":"362:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":4066,"nodeType":"Block","src":"435:39:23","statements":[{"expression":{"id":4064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4062,"name":"allowedTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4057,"src":"445:13:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4063,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4059,"src":"461:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"445:22:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4065,"nodeType":"ExpressionStatement","src":"445:22:23"}]},"id":4067,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4059,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":4067,"src":"419:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4058,"name":"address","nodeType":"ElementaryTypeName","src":"419:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"418:16:23"},"returnParameters":{"id":4061,"nodeType":"ParameterList","parameters":[],"src":"435:0:23"},"scope":4122,"src":"407:67:23","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":4070,"nodeType":"Block","src":"550:178:23","statements":[]},"id":4071,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4068,"nodeType":"ParameterList","parameters":[],"src":"538:2:23"},"returnParameters":{"id":4069,"nodeType":"ParameterList","parameters":[],"src":"550:0:23"},"scope":4122,"src":"530:198:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2677],"body":{"id":4111,"nodeType":"Block","src":"1376:116:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"id":4103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4099,"name":"operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4080,"src":"1394:9:23","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":4100,"name":"Enum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"1407:4:23","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Enum_$3717_$","typeString":"type(contract Enum)"}},"id":4101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"Operation","nodeType":"MemberAccess","referencedDeclaration":3716,"src":"1407:14:23","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Operation_$3716_$","typeString":"type(enum Enum.Operation)"}},"id":4102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"DelegateCall","nodeType":"MemberAccess","src":"1407:27:23","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"src":"1394:40:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4104,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4074,"src":"1438:2:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4105,"name":"allowedTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4057,"src":"1444:13:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1438:19:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1394:63:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546869732063616c6c2069732072657374726963746564","id":4108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1459:25:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_9b64f407a05e4a43de8b61938039b12fe0d8874fbf2d7e5d6e6149ee1426140b","typeString":"literal_string \"This call is restricted\""},"value":"This call is restricted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9b64f407a05e4a43de8b61938039b12fe0d8874fbf2d7e5d6e6149ee1426140b","typeString":"literal_string \"This call is restricted\""}],"id":4098,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1386:7:23","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1386:99:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4110,"nodeType":"ExpressionStatement","src":"1386:99:23"}]},"documentation":{"id":4072,"nodeType":"StructuredDocumentation","src":"734:305:23","text":" @notice Called by the Safe contract before a transaction is executed.\n @dev  Reverts if the transaction is a delegate call to contract other than the allowed one.\n @param to Destination address of Safe transaction.\n @param operation Operation type of Safe transaction."},"functionSelector":"75f0bb52","id":4112,"implemented":true,"kind":"function","modifiers":[],"name":"checkTransaction","nodeType":"FunctionDefinition","overrides":{"id":4096,"nodeType":"OverrideSpecifier","overrides":[],"src":"1367:8:23"},"parameters":{"id":4095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4074,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":4112,"src":"1079:10:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4073,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4076,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1099:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4075,"name":"uint256","nodeType":"ElementaryTypeName","src":"1099:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4078,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1116:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4077,"name":"bytes","nodeType":"ElementaryTypeName","src":"1116:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4080,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":4112,"src":"1138:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":4079,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"1138:14:23","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":4082,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1172:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1172:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4084,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1189:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4083,"name":"uint256","nodeType":"ElementaryTypeName","src":"1189:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4086,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1206:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1206:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4088,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1223:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4087,"name":"address","nodeType":"ElementaryTypeName","src":"1223:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4090,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1292:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4089,"name":"address","nodeType":"ElementaryTypeName","src":"1292:15:23","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4092,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1317:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4091,"name":"bytes","nodeType":"ElementaryTypeName","src":"1317:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4094,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4112,"src":"1339:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4093,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1069:283:23"},"returnParameters":{"id":4097,"nodeType":"ParameterList","parameters":[],"src":"1376:0:23"},"scope":4122,"src":"1044:448:23","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2684],"body":{"id":4120,"nodeType":"Block","src":"1565:2:23","statements":[]},"functionSelector":"93271368","id":4121,"implemented":true,"kind":"function","modifiers":[],"name":"checkAfterExecution","nodeType":"FunctionDefinition","overrides":{"id":4118,"nodeType":"OverrideSpecifier","overrides":[],"src":"1556:8:23"},"parameters":{"id":4117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4114,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4121,"src":"1527:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4113,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1527:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4116,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4121,"src":"1536:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4115,"name":"bool","nodeType":"ElementaryTypeName","src":"1536:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1526:15:23"},"returnParameters":{"id":4119,"nodeType":"ParameterList","parameters":[],"src":"1565:0:23"},"scope":4122,"src":"1498:69:23","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4123,"src":"305:1264:23"}],"src":"42:1528:23"},"id":23},"contracts/examples/guards/OnlyOwnersGuard.sol":{"ast":{"absolutePath":"contracts/examples/guards/OnlyOwnersGuard.sol","exportedSymbols":{"BaseGuard":[2711],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISafe":[4134],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OnlyOwnersGuard":[4222],"OwnerManager":[3710],"Safe":[2325],"SafeMath":[4501],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867]},"id":4223,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4124,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:24"},{"absolutePath":"contracts/common/Enum.sol","file":"../../common/Enum.sol","id":4125,"nodeType":"ImportDirective","scope":4223,"sourceUnit":3718,"src":"75:31:24","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/GuardManager.sol","file":"../../base/GuardManager.sol","id":4126,"nodeType":"ImportDirective","scope":4223,"sourceUnit":2774,"src":"107:37:24","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Safe.sol","file":"../../Safe.sol","id":4127,"nodeType":"ImportDirective","scope":4223,"sourceUnit":2326,"src":"145:24:24","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":4134,"linearizedBaseContracts":[4134],"name":"ISafe","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a0e67e2b","id":4133,"implemented":false,"kind":"function","modifiers":[],"name":"getOwners","nodeType":"FunctionDefinition","parameters":{"id":4128,"nodeType":"ParameterList","parameters":[],"src":"211:2:24"},"returnParameters":{"id":4132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4131,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4133,"src":"237:16:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4129,"name":"address","nodeType":"ElementaryTypeName","src":"237:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4130,"nodeType":"ArrayTypeName","src":"237:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"236:18:24"},"scope":4134,"src":"193:62:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4223,"src":"171:86:24"},{"abstract":false,"baseContracts":[{"baseName":{"id":4136,"name":"BaseGuard","nodeType":"UserDefinedTypeName","referencedDeclaration":2711,"src":"408:9:24","typeDescriptions":{"typeIdentifier":"t_contract$_BaseGuard_$2711","typeString":"contract BaseGuard"}},"id":4137,"nodeType":"InheritanceSpecifier","src":"408:9:24"}],"contractDependencies":[2685,2711,4992],"contractKind":"contract","documentation":{"id":4135,"nodeType":"StructuredDocumentation","src":"259:120:24","text":" @title OnlyOwnersGuard - Only allows owners to execute transactions.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4222,"linearizedBaseContracts":[4222,2711,2685,4992],"name":"OnlyOwnersGuard","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"186f0354","id":4139,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":4222,"src":"424:17:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$4134","typeString":"contract ISafe"},"typeName":{"id":4138,"name":"ISafe","nodeType":"UserDefinedTypeName","referencedDeclaration":4134,"src":"424:5:24","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$4134","typeString":"contract ISafe"}},"visibility":"public"},{"body":{"id":4142,"nodeType":"Block","src":"462:2:24","statements":[]},"id":4143,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4140,"nodeType":"ParameterList","parameters":[],"src":"459:2:24"},"returnParameters":{"id":4141,"nodeType":"ParameterList","parameters":[],"src":"462:0:24"},"scope":4222,"src":"448:16:24","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":4146,"nodeType":"Block","src":"540:178:24","statements":[]},"id":4147,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4144,"nodeType":"ParameterList","parameters":[],"src":"528:2:24"},"returnParameters":{"id":4145,"nodeType":"ParameterList","parameters":[],"src":"540:0:24"},"scope":4222,"src":"520:198:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2677],"body":{"id":4211,"nodeType":"Block","src":"1267:340:24","statements":[{"assignments":[4178],"declarations":[{"constant":false,"id":4178,"mutability":"mutable","name":"owners","nodeType":"VariableDeclaration","scope":4211,"src":"1309:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4176,"name":"address","nodeType":"ElementaryTypeName","src":"1309:7:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4177,"nodeType":"ArrayTypeName","src":"1309:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":4185,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":4180,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1341:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1341:10:24","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4179,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4134,"src":"1335:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$4134_$","typeString":"type(contract ISafe)"}},"id":4182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1335:17:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$4134","typeString":"contract ISafe"}},"id":4183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getOwners","nodeType":"MemberAccess","referencedDeclaration":4133,"src":"1335:27:24","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":4184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1335:29:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1309:55:24"},{"body":{"id":4205,"nodeType":"Block","src":"1418:91:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4197,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4178,"src":"1436:6:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":4199,"indexExpression":{"id":4198,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4187,"src":"1443:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1436:9:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4200,"name":"msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4170,"src":"1449:9:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1436:22:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4204,"nodeType":"IfStatement","src":"1432:67:24","trueBody":{"id":4203,"nodeType":"Block","src":"1460:39:24","statements":[{"functionReturnParameters":4173,"id":4202,"nodeType":"Return","src":"1478:7:24"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4190,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4187,"src":"1394:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4191,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4178,"src":"1398:6:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":4192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1398:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1394:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4206,"initializationExpression":{"assignments":[4187],"declarations":[{"constant":false,"id":4187,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":4206,"src":"1379:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4186,"name":"uint256","nodeType":"ElementaryTypeName","src":"1379:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4189,"initialValue":{"hexValue":"30","id":4188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1391:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1379:13:24"},"loopExpression":{"expression":{"id":4195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1413:3:24","subExpression":{"id":4194,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4187,"src":"1413:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4196,"nodeType":"ExpressionStatement","src":"1413:3:24"},"nodeType":"ForStatement","src":"1374:135:24"},{"expression":{"arguments":[{"hexValue":"6d73672073656e646572206973206e6f7420616c6c6f77656420746f2065786563","id":4208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1564:35:24","typeDescriptions":{"typeIdentifier":"t_stringliteral_77385b8adfe587513f250afd36e7d7418b9f6a2179e96dc862ec72b7ae8e6c75","typeString":"literal_string \"msg sender is not allowed to exec\""},"value":"msg sender is not allowed to exec"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_77385b8adfe587513f250afd36e7d7418b9f6a2179e96dc862ec72b7ae8e6c75","typeString":"literal_string \"msg sender is not allowed to exec\""}],"id":4207,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"1557:6:24","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":4209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1557:43:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4210,"nodeType":"ExpressionStatement","src":"1557:43:24"}]},"documentation":{"id":4148,"nodeType":"StructuredDocumentation","src":"724:209:24","text":" @notice Called by the Safe contract before a transaction is executed.\n @dev Reverts if the transaction is not executed by an owner.\n @param msgSender Executor of the transaction."},"functionSelector":"75f0bb52","id":4212,"implemented":true,"kind":"function","modifiers":[],"name":"checkTransaction","nodeType":"FunctionDefinition","overrides":{"id":4172,"nodeType":"OverrideSpecifier","overrides":[],"src":"1258:8:24"},"parameters":{"id":4171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4150,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"973:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4149,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4152,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"990:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4151,"name":"uint256","nodeType":"ElementaryTypeName","src":"990:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4154,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1007:12:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4153,"name":"bytes","nodeType":"ElementaryTypeName","src":"1007:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4156,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1029:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":4155,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"1029:14:24","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":4158,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1053:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4157,"name":"uint256","nodeType":"ElementaryTypeName","src":"1053:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4160,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1070:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4159,"name":"uint256","nodeType":"ElementaryTypeName","src":"1070:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4162,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1087:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4161,"name":"uint256","nodeType":"ElementaryTypeName","src":"1087:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4164,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1104:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4163,"name":"address","nodeType":"ElementaryTypeName","src":"1104:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4166,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1173:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4165,"name":"address","nodeType":"ElementaryTypeName","src":"1173:15:24","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4168,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4212,"src":"1198:12:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4167,"name":"bytes","nodeType":"ElementaryTypeName","src":"1198:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4170,"mutability":"mutable","name":"msgSender","nodeType":"VariableDeclaration","scope":4212,"src":"1220:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4169,"name":"address","nodeType":"ElementaryTypeName","src":"1220:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"963:280:24"},"returnParameters":{"id":4173,"nodeType":"ParameterList","parameters":[],"src":"1267:0:24"},"scope":4222,"src":"938:669:24","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2684],"body":{"id":4220,"nodeType":"Block","src":"1680:2:24","statements":[]},"functionSelector":"93271368","id":4221,"implemented":true,"kind":"function","modifiers":[],"name":"checkAfterExecution","nodeType":"FunctionDefinition","overrides":{"id":4218,"nodeType":"OverrideSpecifier","overrides":[],"src":"1671:8:24"},"parameters":{"id":4217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4214,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4221,"src":"1642:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4213,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1642:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4216,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4221,"src":"1651:4:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4215,"name":"bool","nodeType":"ElementaryTypeName","src":"1651:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1641:15:24"},"returnParameters":{"id":4219,"nodeType":"ParameterList","parameters":[],"src":"1680:0:24"},"scope":4222,"src":"1613:69:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4223,"src":"380:1304:24"}],"src":"42:1643:24"},"id":24},"contracts/examples/guards/ReentrancyTransactionGuard.sol":{"ast":{"absolutePath":"contracts/examples/guards/ReentrancyTransactionGuard.sol","exportedSymbols":{"BaseGuard":[2711],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OwnerManager":[3710],"ReentrancyTransactionGuard":[4317],"Safe":[2325],"SafeMath":[4501],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867]},"id":4318,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4224,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:25"},{"absolutePath":"contracts/common/Enum.sol","file":"../../common/Enum.sol","id":4225,"nodeType":"ImportDirective","scope":4318,"sourceUnit":3718,"src":"75:31:25","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/base/GuardManager.sol","file":"../../base/GuardManager.sol","id":4226,"nodeType":"ImportDirective","scope":4318,"sourceUnit":2774,"src":"107:37:25","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Safe.sol","file":"../../Safe.sol","id":4227,"nodeType":"ImportDirective","scope":4318,"sourceUnit":2326,"src":"145:24:25","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4229,"name":"BaseGuard","nodeType":"UserDefinedTypeName","referencedDeclaration":2711,"src":"359:9:25","typeDescriptions":{"typeIdentifier":"t_contract$_BaseGuard_$2711","typeString":"contract BaseGuard"}},"id":4230,"nodeType":"InheritanceSpecifier","src":"359:9:25"}],"contractDependencies":[2685,2711,4992],"contractKind":"contract","documentation":{"id":4228,"nodeType":"StructuredDocumentation","src":"171:148:25","text":" @title ReentrancyTransactionGuard - Prevents reentrancy into the transaction execution function.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4317,"linearizedBaseContracts":[4317,2711,2685,4992],"name":"ReentrancyTransactionGuard","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":4235,"mutability":"constant","name":"GUARD_STORAGE_SLOT","nodeType":"VariableDeclaration","scope":4317,"src":"375:89:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4231,"name":"bytes32","nodeType":"ElementaryTypeName","src":"375:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"7265656e7472616e63795f67756172642e67756172642e737472756374","id":4233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"432:31:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_7c1d45961c2d0298f999d2c3d4a7a5e0f688d137f4c32466e3056a97e673b83a","typeString":"literal_string \"reentrancy_guard.guard.struct\""},"value":"reentrancy_guard.guard.struct"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7c1d45961c2d0298f999d2c3d4a7a5e0f688d137f4c32466e3056a97e673b83a","typeString":"literal_string \"reentrancy_guard.guard.struct\""}],"id":4232,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"422:9:25","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"422:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"canonicalName":"ReentrancyTransactionGuard.GuardValue","id":4238,"members":[{"constant":false,"id":4237,"mutability":"mutable","name":"active","nodeType":"VariableDeclaration","scope":4238,"src":"499:11:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4236,"name":"bool","nodeType":"ElementaryTypeName","src":"499:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"GuardValue","nodeType":"StructDefinition","scope":4317,"src":"471:46:25","visibility":"public"},{"body":{"id":4241,"nodeType":"Block","src":"593:178:25","statements":[]},"id":4242,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4239,"nodeType":"ParameterList","parameters":[],"src":"581:2:25"},"returnParameters":{"id":4240,"nodeType":"ParameterList","parameters":[],"src":"593:0:25"},"scope":4317,"src":"573:198:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":4253,"nodeType":"Block","src":"1092:166:25","statements":[{"assignments":[4249],"declarations":[{"constant":false,"id":4249,"mutability":"mutable","name":"slot","nodeType":"VariableDeclaration","scope":4253,"src":"1102:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4248,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1102:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4251,"initialValue":{"id":4250,"name":"GUARD_STORAGE_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4235,"src":"1117:18:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1102:33:25"},{"AST":{"nodeType":"YulBlock","src":"1210:42:25","statements":[{"nodeType":"YulAssignment","src":"1224:18:25","value":{"name":"slot","nodeType":"YulIdentifier","src":"1238:4:25"},"variableNames":[{"name":"guard.slot","nodeType":"YulIdentifier","src":"1224:10:25"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":4246,"isOffset":false,"isSlot":true,"src":"1224:10:25","suffix":"slot","valueSize":1},{"declaration":4249,"isOffset":false,"isSlot":false,"src":"1238:4:25","valueSize":1}],"id":4252,"nodeType":"InlineAssembly","src":"1201:51:25"}]},"documentation":{"id":4243,"nodeType":"StructuredDocumentation","src":"777:241:25","text":" @notice Returns the guard value for the current context.\n @dev The guard value is stored in a slot that is unique to the contract instance and the function in which it is called.\n @return guard The guard value."},"id":4254,"implemented":true,"kind":"function","modifiers":[],"name":"getGuard","nodeType":"FunctionDefinition","parameters":{"id":4244,"nodeType":"ParameterList","parameters":[],"src":"1040:2:25"},"returnParameters":{"id":4247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4246,"mutability":"mutable","name":"guard","nodeType":"VariableDeclaration","scope":4254,"src":"1066:24:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue"},"typeName":{"id":4245,"name":"GuardValue","nodeType":"UserDefinedTypeName","referencedDeclaration":4238,"src":"1066:10:25","typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue"}},"visibility":"internal"}],"src":"1065:26:25"},"scope":4317,"src":"1023:235:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[2677],"body":{"id":4299,"nodeType":"Block","src":"1718:138:25","statements":[{"assignments":[4282],"declarations":[{"constant":false,"id":4282,"mutability":"mutable","name":"guard","nodeType":"VariableDeclaration","scope":4299,"src":"1728:24:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue"},"typeName":{"id":4281,"name":"GuardValue","nodeType":"UserDefinedTypeName","referencedDeclaration":4238,"src":"1728:10:25","typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue"}},"visibility":"internal"}],"id":4285,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":4283,"name":"getGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"1755:8:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_GuardValue_$4238_storage_ptr_$","typeString":"function () pure returns (struct ReentrancyTransactionGuard.GuardValue storage pointer)"}},"id":4284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1755:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1728:37:25"},{"expression":{"arguments":[{"id":4289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1783:13:25","subExpression":{"expression":{"id":4287,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4282,"src":"1784:5:25","typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue storage pointer"}},"id":4288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"active","nodeType":"MemberAccess","referencedDeclaration":4237,"src":"1784:12:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265656e7472616e6379206465746563746564","id":4290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1798:21:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_097111f1c92e46e29a577d28ac0e81cbf88f0d28257c526422b538f03d0c3b86","typeString":"literal_string \"Reentrancy detected\""},"value":"Reentrancy detected"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_097111f1c92e46e29a577d28ac0e81cbf88f0d28257c526422b538f03d0c3b86","typeString":"literal_string \"Reentrancy detected\""}],"id":4286,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1775:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1775:45:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4292,"nodeType":"ExpressionStatement","src":"1775:45:25"},{"expression":{"id":4297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4293,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4282,"src":"1830:5:25","typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue storage pointer"}},"id":4295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"active","nodeType":"MemberAccess","referencedDeclaration":4237,"src":"1830:12:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":4296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1845:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1830:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4298,"nodeType":"ExpressionStatement","src":"1830:19:25"}]},"documentation":{"id":4255,"nodeType":"StructuredDocumentation","src":"1264:135:25","text":" @notice Called by the Safe contract before a transaction is executed.\n @dev Reverts if reentrancy is detected."},"functionSelector":"75f0bb52","id":4300,"implemented":true,"kind":"function","modifiers":[],"name":"checkTransaction","nodeType":"FunctionDefinition","overrides":{"id":4279,"nodeType":"OverrideSpecifier","overrides":[],"src":"1709:8:25"},"parameters":{"id":4278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4257,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1439:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4256,"name":"address","nodeType":"ElementaryTypeName","src":"1439:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4259,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1456:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4258,"name":"uint256","nodeType":"ElementaryTypeName","src":"1456:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4261,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1473:12:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4260,"name":"bytes","nodeType":"ElementaryTypeName","src":"1473:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4263,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1495:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":4262,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"1495:14:25","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":4265,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1519:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4264,"name":"uint256","nodeType":"ElementaryTypeName","src":"1519:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4267,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1536:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4266,"name":"uint256","nodeType":"ElementaryTypeName","src":"1536:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4269,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1553:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4268,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4271,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1570:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4270,"name":"address","nodeType":"ElementaryTypeName","src":"1570:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4273,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1639:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4272,"name":"address","nodeType":"ElementaryTypeName","src":"1639:15:25","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4275,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1664:12:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4274,"name":"bytes","nodeType":"ElementaryTypeName","src":"1664:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4277,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4300,"src":"1686:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4276,"name":"address","nodeType":"ElementaryTypeName","src":"1686:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1429:270:25"},"returnParameters":{"id":4280,"nodeType":"ParameterList","parameters":[],"src":"1718:0:25"},"scope":4317,"src":"1404:452:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2684],"body":{"id":4315,"nodeType":"Block","src":"2052:42:25","statements":[{"expression":{"id":4313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4309,"name":"getGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"2062:8:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_GuardValue_$4238_storage_ptr_$","typeString":"function () pure returns (struct ReentrancyTransactionGuard.GuardValue storage pointer)"}},"id":4310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2062:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GuardValue_$4238_storage_ptr","typeString":"struct ReentrancyTransactionGuard.GuardValue storage pointer"}},"id":4311,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"active","nodeType":"MemberAccess","referencedDeclaration":4237,"src":"2062:17:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":4312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2082:5:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2062:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4314,"nodeType":"ExpressionStatement","src":"2062:25:25"}]},"documentation":{"id":4301,"nodeType":"StructuredDocumentation","src":"1862:123:25","text":" @notice Called by the Safe contract after a transaction is executed.\n @dev Resets the guard value."},"functionSelector":"93271368","id":4316,"implemented":true,"kind":"function","modifiers":[],"name":"checkAfterExecution","nodeType":"FunctionDefinition","overrides":{"id":4307,"nodeType":"OverrideSpecifier","overrides":[],"src":"2043:8:25"},"parameters":{"id":4306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4303,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4316,"src":"2019:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2019:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4305,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4316,"src":"2028:4:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4304,"name":"bool","nodeType":"ElementaryTypeName","src":"2028:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2018:15:25"},"returnParameters":{"id":4308,"nodeType":"ParameterList","parameters":[],"src":"2052:0:25"},"scope":4317,"src":"1990:104:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4318,"src":"320:1776:25"}],"src":"42:2055:25"},"id":25},"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol":{"ast":{"absolutePath":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol","exportedSymbols":{"Migration":[4395],"SafeStorage":[5357]},"id":4396,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4319,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:26"},{"absolutePath":"contracts/libraries/SafeStorage.sol","file":"../../libraries/SafeStorage.sol","id":4320,"nodeType":"ImportDirective","scope":4396,"sourceUnit":5358,"src":"74:41:26","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4322,"name":"SafeStorage","nodeType":"UserDefinedTypeName","referencedDeclaration":5357,"src":"255:11:26","typeDescriptions":{"typeIdentifier":"t_contract$_SafeStorage_$5357","typeString":"contract SafeStorage"}},"id":4323,"nodeType":"InheritanceSpecifier","src":"255:11:26"}],"contractDependencies":[5357],"contractKind":"contract","documentation":{"id":4321,"nodeType":"StructuredDocumentation","src":"117:115:26","text":" @title Migration - Migrates a Safe contract from 1.3.0 to 1.2.0\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4395,"linearizedBaseContracts":[4395,5357],"name":"Migration","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":4326,"mutability":"constant","name":"DOMAIN_SEPARATOR_TYPEHASH","nodeType":"VariableDeclaration","scope":4395,"src":"273:119:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"273:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307830333561666638336438363933376433356233326530346630646463366666343639323930656566326631623639326438613831356338393430346434373439","id":4325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"326:66:26","typeDescriptions":{"typeIdentifier":"t_rational_1517718281442037948617199096126532355110765202990829672390711201829802035017_by_1","typeString":"int_const 1517...(68 digits omitted)...5017"},"value":"0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749"},"visibility":"private"},{"constant":false,"functionSelector":"2e773185","id":4328,"mutability":"immutable","name":"migrationSingleton","nodeType":"VariableDeclaration","scope":4395,"src":"399:43:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4327,"name":"address","nodeType":"ElementaryTypeName","src":"399:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"89f54308","id":4330,"mutability":"immutable","name":"safe120Singleton","nodeType":"VariableDeclaration","scope":4395,"src":"448:41:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4329,"name":"address","nodeType":"ElementaryTypeName","src":"448:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":4356,"nodeType":"Block","src":"533:234:26","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4336,"name":"targetSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"604:15:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":4339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"631:1:26","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":4338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"623:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4337,"name":"address","nodeType":"ElementaryTypeName","src":"623:7:26","typeDescriptions":{}}},"id":4340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"623:10:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"604:29:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564","id":4342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"635:36:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_f4a46125d24bcf992f3a005546c0f3eafebe1847b2ccd7a103878ded65e88250","typeString":"literal_string \"Invalid singleton address provided\""},"value":"Invalid singleton address provided"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f4a46125d24bcf992f3a005546c0f3eafebe1847b2ccd7a103878ded65e88250","typeString":"literal_string \"Invalid singleton address provided\""}],"id":4335,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"596:7:26","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"596:76:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4344,"nodeType":"ExpressionStatement","src":"596:76:26"},{"expression":{"id":4347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4345,"name":"safe120Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4330,"src":"682:16:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4346,"name":"targetSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"701:15:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"682:34:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4348,"nodeType":"ExpressionStatement","src":"682:34:26"},{"expression":{"id":4354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4349,"name":"migrationSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4328,"src":"726:18:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4352,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"755:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Migration_$4395","typeString":"contract Migration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Migration_$4395","typeString":"contract Migration"}],"id":4351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"747:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4350,"name":"address","nodeType":"ElementaryTypeName","src":"747:7:26","typeDescriptions":{}}},"id":4353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"747:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"726:34:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4355,"nodeType":"ExpressionStatement","src":"726:34:26"}]},"id":4357,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4332,"mutability":"mutable","name":"targetSingleton","nodeType":"VariableDeclaration","scope":4357,"src":"508:23:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4331,"name":"address","nodeType":"ElementaryTypeName","src":"508:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"507:25:26"},"returnParameters":{"id":4334,"nodeType":"ParameterList","parameters":[],"src":"533:0:26"},"scope":4395,"src":"496:271:26","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"anonymous":false,"id":4361,"name":"ChangedMasterCopy","nodeType":"EventDefinition","parameters":{"id":4360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4359,"indexed":false,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":4361,"src":"797:17:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4358,"name":"address","nodeType":"ElementaryTypeName","src":"797:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"796:19:26"},"src":"773:43:26"},{"body":{"id":4393,"nodeType":"Block","src":"1004:288:26","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4368,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1030:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Migration_$4395","typeString":"contract Migration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Migration_$4395","typeString":"contract Migration"}],"id":4367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1022:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4366,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:26","typeDescriptions":{}}},"id":4369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1022:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4370,"name":"migrationSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4328,"src":"1039:18:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1022:35:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c","id":4372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1059:50:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_15b78a1f3b6f5ce8c19eea2b0f8fa49566744e4d89b92aecbfade8f18a1e41e8","typeString":"literal_string \"Migration should only be called via delegatecall\""},"value":"Migration should only be called via delegatecall"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_15b78a1f3b6f5ce8c19eea2b0f8fa49566744e4d89b92aecbfade8f18a1e41e8","typeString":"literal_string \"Migration should only be called via delegatecall\""}],"id":4365,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1014:7:26","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1014:96:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4374,"nodeType":"ExpressionStatement","src":"1014:96:26"},{"expression":{"id":4377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4375,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"1121:9:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4376,"name":"safe120Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4330,"src":"1133:16:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1121:28:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4378,"nodeType":"ExpressionStatement","src":"1121:28:26"},{"expression":{"id":4387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4379,"name":"_deprecatedDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"1159:26:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":4383,"name":"DOMAIN_SEPARATOR_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4326,"src":"1209:25:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4384,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1236:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Migration_$4395","typeString":"contract Migration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_contract$_Migration_$4395","typeString":"contract Migration"}],"expression":{"id":4381,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1198:3:26","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4382,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1198:10:26","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1198:43:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4380,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1188:9:26","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1188:54:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1159:83:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4388,"nodeType":"ExpressionStatement","src":"1159:83:26"},{"eventCall":{"arguments":[{"id":4390,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"1275:9:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4389,"name":"ChangedMasterCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4361,"src":"1257:17:26","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1257:28:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4392,"nodeType":"EmitStatement","src":"1252:33:26"}]},"documentation":{"id":4362,"nodeType":"StructuredDocumentation","src":"822:151:26","text":" @notice Migrates the Safe to the Singleton contract at `migrationSingleton`.\n @dev This can only be called via a delegatecall."},"functionSelector":"8fd3ab80","id":4394,"implemented":true,"kind":"function","modifiers":[],"name":"migrate","nodeType":"FunctionDefinition","parameters":{"id":4363,"nodeType":"ParameterList","parameters":[],"src":"994:2:26"},"returnParameters":{"id":4364,"nodeType":"ParameterList","parameters":[],"src":"1004:0:26"},"scope":4395,"src":"978:314:26","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":4396,"src":"233:1061:26"}],"src":"42:1253:26"},"id":26},"contracts/external/SafeMath.sol":{"ast":{"absolutePath":"contracts/external/SafeMath.sol","exportedSymbols":{"SafeMath":[4501]},"id":4502,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4397,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:27"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":4398,"nodeType":"StructuredDocumentation","src":"75:114:27","text":" @title SafeMath\n @notice Math operations with safety checks that revert on error (overflow/underflow)"},"fullyImplemented":true,"id":4501,"linearizedBaseContracts":[4501],"name":"SafeMath","nodeType":"ContractDefinition","nodes":[{"body":{"id":4431,"nodeType":"Block","src":"449:354:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4408,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4401,"src":"680:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"685:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"680:6:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4414,"nodeType":"IfStatement","src":"676:45:27","trueBody":{"id":4413,"nodeType":"Block","src":"688:33:27","statements":[{"expression":{"hexValue":"30","id":4411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"709:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":4407,"id":4412,"nodeType":"Return","src":"702:8:27"}]}},{"assignments":[4416],"declarations":[{"constant":false,"id":4416,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":4431,"src":"731:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4415,"name":"uint256","nodeType":"ElementaryTypeName","src":"731:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4420,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4417,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4401,"src":"743:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4418,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4403,"src":"747:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"743:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"731:17:27"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4422,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4416,"src":"766:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4423,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4401,"src":"770:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"766:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4425,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4403,"src":"775:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"766:10:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4421,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"758:7:27","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":4427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"758:19:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4428,"nodeType":"ExpressionStatement","src":"758:19:27"},{"expression":{"id":4429,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4416,"src":"795:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4407,"id":4430,"nodeType":"Return","src":"788:8:27"}]},"documentation":{"id":4399,"nodeType":"StructuredDocumentation","src":"213:164:27","text":" @notice Multiplies two numbers, reverts on overflow.\n @param a First number\n @param b Second number\n @return Product of a and b"},"id":4432,"implemented":true,"kind":"function","modifiers":[],"name":"mul","nodeType":"FunctionDefinition","parameters":{"id":4404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4401,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":4432,"src":"395:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4400,"name":"uint256","nodeType":"ElementaryTypeName","src":"395:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4403,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":4432,"src":"406:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4402,"name":"uint256","nodeType":"ElementaryTypeName","src":"406:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"394:22:27"},"returnParameters":{"id":4407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4406,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4432,"src":"440:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4405,"name":"uint256","nodeType":"ElementaryTypeName","src":"440:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"439:9:27"},"scope":4501,"src":"382:421:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4456,"nodeType":"Block","src":"1092:78:27","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4443,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4437,"src":"1110:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":4444,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4435,"src":"1115:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1110:6:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4442,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1102:7:27","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":4446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1102:15:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4447,"nodeType":"ExpressionStatement","src":"1102:15:27"},{"assignments":[4449],"declarations":[{"constant":false,"id":4449,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":4456,"src":"1127:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4448,"name":"uint256","nodeType":"ElementaryTypeName","src":"1127:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4453,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4450,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4435,"src":"1139:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4451,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4437,"src":"1143:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1139:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1127:17:27"},{"expression":{"id":4454,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4449,"src":"1162:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4441,"id":4455,"nodeType":"Return","src":"1155:8:27"}]},"documentation":{"id":4433,"nodeType":"StructuredDocumentation","src":"809:211:27","text":" @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n @param a First number\n @param b Second number\n @return Difference of a and b"},"id":4457,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nodeType":"FunctionDefinition","parameters":{"id":4438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4435,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":4457,"src":"1038:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4434,"name":"uint256","nodeType":"ElementaryTypeName","src":"1038:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4437,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":4457,"src":"1049:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4436,"name":"uint256","nodeType":"ElementaryTypeName","src":"1049:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1037:22:27"},"returnParameters":{"id":4441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4440,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4457,"src":"1083:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4439,"name":"uint256","nodeType":"ElementaryTypeName","src":"1083:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1082:9:27"},"scope":4501,"src":"1025:145:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4481,"nodeType":"Block","src":"1402:78:27","statements":[{"assignments":[4468],"declarations":[{"constant":false,"id":4468,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":4481,"src":"1412:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4467,"name":"uint256","nodeType":"ElementaryTypeName","src":"1412:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4472,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4469,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4460,"src":"1424:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4470,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4462,"src":"1428:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1424:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1412:17:27"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4474,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4468,"src":"1447:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4475,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4460,"src":"1452:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1447:6:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4473,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1439:7:27","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":4477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1439:15:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4478,"nodeType":"ExpressionStatement","src":"1439:15:27"},{"expression":{"id":4479,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4468,"src":"1472:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4466,"id":4480,"nodeType":"Return","src":"1465:8:27"}]},"documentation":{"id":4458,"nodeType":"StructuredDocumentation","src":"1176:154:27","text":" @notice Adds two numbers, reverts on overflow.\n @param a First number\n @param b Second number\n @return Sum of a and b"},"id":4482,"implemented":true,"kind":"function","modifiers":[],"name":"add","nodeType":"FunctionDefinition","parameters":{"id":4463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4460,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":4482,"src":"1348:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4459,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4462,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":4482,"src":"1359:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4461,"name":"uint256","nodeType":"ElementaryTypeName","src":"1359:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1347:22:27"},"returnParameters":{"id":4466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4465,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4482,"src":"1393:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4464,"name":"uint256","nodeType":"ElementaryTypeName","src":"1393:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1392:9:27"},"scope":4501,"src":"1335:145:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4499,"nodeType":"Block","src":"1713:38:27","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4492,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4485,"src":"1730:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4493,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4487,"src":"1735:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1730:6:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":4496,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4487,"src":"1743:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1730:14:27","trueExpression":{"id":4495,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4485,"src":"1739:1:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4491,"id":4498,"nodeType":"Return","src":"1723:21:27"}]},"documentation":{"id":4483,"nodeType":"StructuredDocumentation","src":"1486:155:27","text":" @notice Returns the largest of two numbers.\n @param a First number\n @param b Second number\n @return Largest of a and b"},"id":4500,"implemented":true,"kind":"function","modifiers":[],"name":"max","nodeType":"FunctionDefinition","parameters":{"id":4488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4485,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":4500,"src":"1659:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4484,"name":"uint256","nodeType":"ElementaryTypeName","src":"1659:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4487,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":4500,"src":"1670:9:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4486,"name":"uint256","nodeType":"ElementaryTypeName","src":"1670:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1658:22:27"},"returnParameters":{"id":4491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4490,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4500,"src":"1704:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4489,"name":"uint256","nodeType":"ElementaryTypeName","src":"1704:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1703:9:27"},"scope":4501,"src":"1646:105:27","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4502,"src":"190:1563:27"}],"src":"42:1712:27"},"id":27},"contracts/handler/CompatibilityFallbackHandler.sol":{"ast":{"absolutePath":"contracts/handler/CompatibilityFallbackHandler.sol","exportedSymbols":{"BaseGuard":[2711],"CompatibilityFallbackHandler":[4758],"ERC1155TokenReceiver":[4942],"ERC721TokenReceiver":[4960],"ERC777TokensRecipient":[4980],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OwnerManager":[3710],"Safe":[2325],"SafeMath":[4501],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867],"TokenCallbackHandler":[4905]},"id":4759,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4503,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:28"},{"absolutePath":"contracts/handler/TokenCallbackHandler.sol","file":"./TokenCallbackHandler.sol","id":4504,"nodeType":"ImportDirective","scope":4759,"sourceUnit":4906,"src":"75:36:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/interfaces/ISignatureValidator.sol","file":"../interfaces/ISignatureValidator.sol","id":4505,"nodeType":"ImportDirective","scope":4759,"sourceUnit":5012,"src":"112:47:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Safe.sol","file":"../Safe.sol","id":4506,"nodeType":"ImportDirective","scope":4759,"sourceUnit":2326,"src":"160:21:28","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4508,"name":"TokenCallbackHandler","nodeType":"UserDefinedTypeName","referencedDeclaration":4905,"src":"384:20:28","typeDescriptions":{"typeIdentifier":"t_contract$_TokenCallbackHandler_$4905","typeString":"contract TokenCallbackHandler"}},"id":4509,"nodeType":"InheritanceSpecifier","src":"384:20:28"},{"baseName":{"id":4510,"name":"ISignatureValidator","nodeType":"UserDefinedTypeName","referencedDeclaration":5011,"src":"406:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidator_$5011","typeString":"contract ISignatureValidator"}},"id":4511,"nodeType":"InheritanceSpecifier","src":"406:19:28"}],"contractDependencies":[4905,4942,4960,4980,4992,4998,5011],"contractKind":"contract","documentation":{"id":4507,"nodeType":"StructuredDocumentation","src":"183:159:28","text":" @title Compatibility Fallback Handler - Provides compatibility between pre 1.3.0 and 1.3.0+ Safe contracts.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4758,"linearizedBaseContracts":[4758,5011,4998,4905,4992,4960,4980,4942],"name":"CompatibilityFallbackHandler","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":4514,"mutability":"constant","name":"SAFE_MSG_TYPEHASH","nodeType":"VariableDeclaration","scope":4758,"src":"480:111:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4512,"name":"bytes32","nodeType":"ElementaryTypeName","src":"480:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307836306233636266386234613232336436386436343162336236646466396132393865376633333731306366336433613964313134366235613631353066626361","id":4513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"525:66:28","typeDescriptions":{"typeIdentifier":"t_rational_43739706848186989041152069077571617734008543096732098246335109361212071148490_by_1","typeString":"int_const 4373...(69 digits omitted)...8490"},"value":"0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca"},"visibility":"private"},{"constant":true,"id":4522,"mutability":"constant","name":"SIMULATE_SELECTOR","nodeType":"VariableDeclaration","scope":4758,"src":"598:89:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4515,"name":"bytes4","nodeType":"ElementaryTypeName","src":"598:6:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"arguments":[{"arguments":[{"hexValue":"73696d756c61746528616464726573732c627974657329","id":4519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"660:25:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_bd61951d7ffb6a339250a21db4422ea103eaa0c60f484ea3bbdd746b2e87bbd6","typeString":"literal_string \"simulate(address,bytes)\""},"value":"simulate(address,bytes)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_bd61951d7ffb6a339250a21db4422ea103eaa0c60f484ea3bbdd746b2e87bbd6","typeString":"literal_string \"simulate(address,bytes)\""}],"id":4518,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"650:9:28","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"650:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"643:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes4_$","typeString":"type(bytes4)"},"typeName":{"id":4516,"name":"bytes4","nodeType":"ElementaryTypeName","src":"643:6:28","typeDescriptions":{}}},"id":4521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"643:44:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":true,"id":4528,"mutability":"constant","name":"SENTINEL_MODULES","nodeType":"VariableDeclaration","scope":4758,"src":"694:57:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4523,"name":"address","nodeType":"ElementaryTypeName","src":"694:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"307831","id":4526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"747:3:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":4525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"739:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4524,"name":"address","nodeType":"ElementaryTypeName","src":"739:7:28","typeDescriptions":{}}},"id":4527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"739:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":true,"id":4531,"mutability":"constant","name":"UPDATED_MAGIC_VALUE","nodeType":"VariableDeclaration","scope":4758,"src":"757:57:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4529,"name":"bytes4","nodeType":"ElementaryTypeName","src":"757:6:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783136323662613765","id":4530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"804:10:28","typeDescriptions":{"typeIdentifier":"t_rational_371636862_by_1","typeString":"int_const 371636862"},"value":"0x1626ba7e"},"visibility":"internal"},{"baseFunctions":[5010],"body":{"id":4592,"nodeType":"Block","src":"1296:471:28","statements":[{"assignments":[4543],"declarations":[{"constant":false,"id":4543,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":4592,"src":"1341:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},"typeName":{"id":4542,"name":"Safe","nodeType":"UserDefinedTypeName","referencedDeclaration":2325,"src":"1341:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"visibility":"internal"}],"id":4551,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":4547,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1366:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1366:10:28","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1358:8:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":4545,"name":"address","nodeType":"ElementaryTypeName","src":"1358:8:28","stateMutability":"payable","typeDescriptions":{}}},"id":4549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1358:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4544,"name":"Safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2325,"src":"1353:4:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Safe_$2325_$","typeString":"type(contract Safe)"}},"id":4550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1353:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"nodeType":"VariableDeclarationStatement","src":"1341:37:28"},{"assignments":[4553],"declarations":[{"constant":false,"id":4553,"mutability":"mutable","name":"messageData","nodeType":"VariableDeclaration","scope":4592,"src":"1388:24:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4552,"name":"bytes","nodeType":"ElementaryTypeName","src":"1388:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4558,"initialValue":{"arguments":[{"id":4555,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4543,"src":"1440:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},{"id":4556,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4534,"src":"1446:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4554,"name":"encodeMessageDataForSafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"1415:24:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_Safe_$2325_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (contract Safe,bytes memory) view returns (bytes memory)"}},"id":4557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1415:37:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1388:64:28"},{"assignments":[4560],"declarations":[{"constant":false,"id":4560,"mutability":"mutable","name":"messageHash","nodeType":"VariableDeclaration","scope":4592,"src":"1462:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1462:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4564,"initialValue":{"arguments":[{"id":4562,"name":"messageData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4553,"src":"1494:11:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4561,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1484:9:28","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1484:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1462:44:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4565,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4536,"src":"1520:10:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1520:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1541:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1520:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4588,"nodeType":"Block","src":"1642:83:28","statements":[{"expression":{"arguments":[{"id":4583,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4560,"src":"1677:11:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4584,"name":"messageData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4553,"src":"1690:11:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4585,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4536,"src":"1703:10:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4580,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4543,"src":"1656:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":4582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"checkSignatures","nodeType":"MemberAccess","referencedDeclaration":1904,"src":"1656:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory,bytes memory) view external"}},"id":4586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1656:58:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4587,"nodeType":"ExpressionStatement","src":"1656:58:28"}]},"id":4589,"nodeType":"IfStatement","src":"1516:209:28","trueBody":{"id":4579,"nodeType":"Block","src":"1544:92:28","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4572,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4560,"src":"1586:11:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4570,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4543,"src":"1566:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":4571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"signedMessages","nodeType":"MemberAccess","referencedDeclaration":1502,"src":"1566:19:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) view external returns (uint256)"}},"id":4573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1566:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1602:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1566:37:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"48617368206e6f7420617070726f766564","id":4576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1605:19:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_fd8211c71ab965565e8a56b84284a02d17d4d89e6f05f14b26449d5de3a8c5b6","typeString":"literal_string \"Hash not approved\""},"value":"Hash not approved"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fd8211c71ab965565e8a56b84284a02d17d4d89e6f05f14b26449d5de3a8c5b6","typeString":"literal_string \"Hash not approved\""}],"id":4569,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1558:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1558:67:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4578,"nodeType":"ExpressionStatement","src":"1558:67:28"}]}},{"expression":{"id":4590,"name":"EIP1271_MAGIC_VALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"1741:19:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":4541,"id":4591,"nodeType":"Return","src":"1734:26:28"}]},"documentation":{"id":4532,"nodeType":"StructuredDocumentation","src":"821:361:28","text":" @notice Legacy EIP-1271 signature validation method.\n @dev Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)\n @param _data Arbitrary length data signed on the behalf of address(msg.sender).\n @param _signature Signature byte array associated with _data.\n @return The EIP-1271 magic value."},"functionSelector":"20c13b0b","id":4593,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nodeType":"FunctionDefinition","overrides":{"id":4538,"nodeType":"OverrideSpecifier","overrides":[],"src":"1270:8:28"},"parameters":{"id":4537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4534,"mutability":"mutable","name":"_data","nodeType":"VariableDeclaration","scope":4593,"src":"1213:18:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4533,"name":"bytes","nodeType":"ElementaryTypeName","src":"1213:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4536,"mutability":"mutable","name":"_signature","nodeType":"VariableDeclaration","scope":4593,"src":"1233:23:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4535,"name":"bytes","nodeType":"ElementaryTypeName","src":"1233:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1212:45:28"},"returnParameters":{"id":4541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4540,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4593,"src":"1288:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4539,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1288:6:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1287:8:28"},"scope":4758,"src":"1187:580:28","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":4612,"nodeType":"Block","src":"2001:81:28","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":4605,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2053:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2053:10:28","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2045:8:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":4603,"name":"address","nodeType":"ElementaryTypeName","src":"2045:8:28","stateMutability":"payable","typeDescriptions":{}}},"id":4607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2045:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4602,"name":"Safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2325,"src":"2040:4:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Safe_$2325_$","typeString":"type(contract Safe)"}},"id":4608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2040:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},{"id":4609,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4596,"src":"2067:7:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4601,"name":"getMessageHashForSafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4670,"src":"2018:21:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_Safe_$2325_$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (contract Safe,bytes memory) view returns (bytes32)"}},"id":4610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2018:57:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4600,"id":4611,"nodeType":"Return","src":"2011:64:28"}]},"documentation":{"id":4594,"nodeType":"StructuredDocumentation","src":"1773:147:28","text":" @dev Returns the hash of a message to be signed by owners.\n @param message Raw message bytes.\n @return Message hash."},"functionSelector":"0a1028c4","id":4613,"implemented":true,"kind":"function","modifiers":[],"name":"getMessageHash","nodeType":"FunctionDefinition","parameters":{"id":4597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4596,"mutability":"mutable","name":"message","nodeType":"VariableDeclaration","scope":4613,"src":"1949:20:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4595,"name":"bytes","nodeType":"ElementaryTypeName","src":"1949:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1948:22:28"},"returnParameters":{"id":4600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4599,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4613,"src":"1992:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4598,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1992:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1991:9:28"},"scope":4758,"src":"1925:157:28","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":4651,"nodeType":"Block","src":"2433:205:28","statements":[{"assignments":[4624],"declarations":[{"constant":false,"id":4624,"mutability":"mutable","name":"safeMessageHash","nodeType":"VariableDeclaration","scope":4651,"src":"2443:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4623,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4634,"initialValue":{"arguments":[{"arguments":[{"id":4628,"name":"SAFE_MSG_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4514,"src":"2490:17:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":4630,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"2519:7:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4629,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2509:9:28","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2509:18:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4626,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2479:3:28","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4627,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"2479:10:28","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2479:49:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4625,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2469:9:28","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2469:60:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2443:86:28"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30783139","id":4639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2570:4:28","typeDescriptions":{"typeIdentifier":"t_rational_25_by_1","typeString":"int_const 25"},"value":"0x19"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_25_by_1","typeString":"int_const 25"}],"id":4638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2563:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":4637,"name":"bytes1","nodeType":"ElementaryTypeName","src":"2563:6:28","typeDescriptions":{}}},"id":4640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2563:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"arguments":[{"hexValue":"30783031","id":4643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2584:4:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":4642,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2577:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":4641,"name":"bytes1","nodeType":"ElementaryTypeName","src":"2577:6:28","typeDescriptions":{}}},"id":4644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2577:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4645,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4616,"src":"2591:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":4646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"domainSeparator","nodeType":"MemberAccess","referencedDeclaration":2219,"src":"2591:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":4647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2591:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4648,"name":"safeMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4624,"src":"2615:15:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4635,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2546:3:28","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"2546:16:28","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2546:85:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4622,"id":4650,"nodeType":"Return","src":"2539:92:28"}]},"documentation":{"id":4614,"nodeType":"StructuredDocumentation","src":"2088:238:28","text":" @dev Returns the pre-image of the message hash (see getMessageHashForSafe).\n @param safe Safe to which the message is targeted.\n @param message Message that should be encoded.\n @return Encoded message."},"functionSelector":"23031640","id":4652,"implemented":true,"kind":"function","modifiers":[],"name":"encodeMessageDataForSafe","nodeType":"FunctionDefinition","parameters":{"id":4619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4616,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":4652,"src":"2365:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},"typeName":{"id":4615,"name":"Safe","nodeType":"UserDefinedTypeName","referencedDeclaration":2325,"src":"2365:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"visibility":"internal"},{"constant":false,"id":4618,"mutability":"mutable","name":"message","nodeType":"VariableDeclaration","scope":4652,"src":"2376:20:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4617,"name":"bytes","nodeType":"ElementaryTypeName","src":"2376:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2364:33:28"},"returnParameters":{"id":4622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4621,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4652,"src":"2419:12:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4620,"name":"bytes","nodeType":"ElementaryTypeName","src":"2419:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2418:14:28"},"scope":4758,"src":"2331:307:28","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":4669,"nodeType":"Block","src":"2962:74:28","statements":[{"expression":{"arguments":[{"arguments":[{"id":4664,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"3014:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},{"id":4665,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4657,"src":"3020:7:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4663,"name":"encodeMessageDataForSafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"2989:24:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_Safe_$2325_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (contract Safe,bytes memory) view returns (bytes memory)"}},"id":4666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2989:39:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4662,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2979:9:28","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2979:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4661,"id":4668,"nodeType":"Return","src":"2972:57:28"}]},"documentation":{"id":4653,"nodeType":"StructuredDocumentation","src":"2644:219:28","text":" @dev Returns hash of a message that can be signed by owners.\n @param safe Safe to which the message is targeted.\n @param message Message that should be hashed.\n @return Message hash."},"functionSelector":"6ac24784","id":4670,"implemented":true,"kind":"function","modifiers":[],"name":"getMessageHashForSafe","nodeType":"FunctionDefinition","parameters":{"id":4658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4655,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":4670,"src":"2899:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},"typeName":{"id":4654,"name":"Safe","nodeType":"UserDefinedTypeName","referencedDeclaration":2325,"src":"2899:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"visibility":"internal"},{"constant":false,"id":4657,"mutability":"mutable","name":"message","nodeType":"VariableDeclaration","scope":4670,"src":"2910:20:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4656,"name":"bytes","nodeType":"ElementaryTypeName","src":"2910:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2898:33:28"},"returnParameters":{"id":4661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4660,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4670,"src":"2953:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4659,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2953:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2952:9:28"},"scope":4758,"src":"2868:168:28","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":4709,"nodeType":"Block","src":"3477:247:28","statements":[{"assignments":[4681],"declarations":[{"constant":false,"id":4681,"mutability":"mutable","name":"validator","nodeType":"VariableDeclaration","scope":4709,"src":"3487:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidator_$5011","typeString":"contract ISignatureValidator"},"typeName":{"id":4680,"name":"ISignatureValidator","nodeType":"UserDefinedTypeName","referencedDeclaration":5011,"src":"3487:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidator_$5011","typeString":"contract ISignatureValidator"}},"visibility":"internal"}],"id":4686,"initialValue":{"arguments":[{"expression":{"id":4683,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3539:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3539:10:28","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4682,"name":"ISignatureValidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5011,"src":"3519:19:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISignatureValidator_$5011_$","typeString":"type(contract ISignatureValidator)"}},"id":4685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3519:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidator_$5011","typeString":"contract ISignatureValidator"}},"nodeType":"VariableDeclarationStatement","src":"3487:63:28"},{"assignments":[4688],"declarations":[{"constant":false,"id":4688,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":4709,"src":"3560:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4687,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3560:6:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":4697,"initialValue":{"arguments":[{"arguments":[{"id":4693,"name":"_dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4673,"src":"3613:9:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4691,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3602:3:28","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"3602:10:28","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3602:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4695,"name":"_signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4675,"src":"3625:10:28","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"}],"expression":{"id":4689,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"3575:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidator_$5011","typeString":"contract ISignatureValidator"}},"id":4690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isValidSignature","nodeType":"MemberAccess","referencedDeclaration":5010,"src":"3575:26:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory,bytes memory) view external returns (bytes4)"}},"id":4696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3575:61:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"3560:76:28"},{"expression":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4688,"src":"3654:5:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4699,"name":"EIP1271_MAGIC_VALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"3663:19:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"3654:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4701,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3653:30:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"hexValue":"30","id":4705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3715:1:28","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":4704,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3708:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes4_$","typeString":"type(bytes4)"},"typeName":{"id":4703,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3708:6:28","typeDescriptions":{}}},"id":4706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3708:9:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":4707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3653:64:28","trueExpression":{"id":4702,"name":"UPDATED_MAGIC_VALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4531,"src":"3686:19:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":4679,"id":4708,"nodeType":"Return","src":"3646:71:28"}]},"documentation":{"id":4671,"nodeType":"StructuredDocumentation","src":"3042:327:28","text":" @notice Implementation of updated EIP-1271 signature validation method.\n @param _dataHash Hash of the data signed on the behalf of address(msg.sender)\n @param _signature Signature byte array associated with _dataHash\n @return Updated EIP1271 magic value if signature is valid, otherwise 0x0"},"functionSelector":"1626ba7e","id":4710,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nodeType":"FunctionDefinition","parameters":{"id":4676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4673,"mutability":"mutable","name":"_dataHash","nodeType":"VariableDeclaration","scope":4710,"src":"3400:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4672,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3400:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4675,"mutability":"mutable","name":"_signature","nodeType":"VariableDeclaration","scope":4710,"src":"3419:25:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4674,"name":"bytes","nodeType":"ElementaryTypeName","src":"3419:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3399:46:28"},"returnParameters":{"id":4679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4678,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4710,"src":"3469:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4677,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3469:6:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"3468:8:28"},"scope":4758,"src":"3374:350:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":4740,"nodeType":"Block","src":"3889:196:28","statements":[{"assignments":[4718],"declarations":[{"constant":false,"id":4718,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":4740,"src":"3934:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"},"typeName":{"id":4717,"name":"Safe","nodeType":"UserDefinedTypeName","referencedDeclaration":2325,"src":"3934:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"visibility":"internal"}],"id":4726,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":4722,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3959:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3959:10:28","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3951:8:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":4720,"name":"address","nodeType":"ElementaryTypeName","src":"3951:8:28","stateMutability":"payable","typeDescriptions":{}}},"id":4724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3951:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4719,"name":"Safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2325,"src":"3946:4:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Safe_$2325_$","typeString":"type(contract Safe)"}},"id":4725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3946:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"nodeType":"VariableDeclarationStatement","src":"3934:37:28"},{"assignments":[4731,null],"declarations":[{"constant":false,"id":4731,"mutability":"mutable","name":"array","nodeType":"VariableDeclaration","scope":4740,"src":"3982:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4729,"name":"address","nodeType":"ElementaryTypeName","src":"3982:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4730,"nodeType":"ArrayTypeName","src":"3982:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},null],"id":4737,"initialValue":{"arguments":[{"id":4734,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"4035:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"3130","id":4735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4053:2:28","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}],"expression":{"id":4732,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4718,"src":"4010:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":4733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getModulesPaginated","nodeType":"MemberAccess","referencedDeclaration":3179,"src":"4010:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$","typeString":"function (address,uint256) view external returns (address[] memory,address)"}},"id":4736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4010:46:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$","typeString":"tuple(address[] memory,address)"}},"nodeType":"VariableDeclarationStatement","src":"3981:75:28"},{"expression":{"id":4738,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4731,"src":"4073:5:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":4716,"id":4739,"nodeType":"Return","src":"4066:12:28"}]},"documentation":{"id":4711,"nodeType":"StructuredDocumentation","src":"3730:91:28","text":" @dev Returns array of first 10 modules.\n @return Array of modules."},"functionSelector":"b2494df3","id":4741,"implemented":true,"kind":"function","modifiers":[],"name":"getModules","nodeType":"FunctionDefinition","parameters":{"id":4712,"nodeType":"ParameterList","parameters":[],"src":"3845:2:28"},"returnParameters":{"id":4716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4715,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4741,"src":"3871:16:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4713,"name":"address","nodeType":"ElementaryTypeName","src":"3871:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4714,"nodeType":"ArrayTypeName","src":"3871:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3870:18:28"},"scope":4758,"src":"3826:259:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":4756,"nodeType":"Block","src":"4779:2947:28","statements":[{"expression":{"id":4751,"name":"targetContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4744,"src":"4998:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4752,"nodeType":"ExpressionStatement","src":"4998:14:28"},{"expression":{"id":4753,"name":"calldataPayload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"5022:15:28","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":4754,"nodeType":"ExpressionStatement","src":"5022:15:28"},{"AST":{"nodeType":"YulBlock","src":"5113:2607:28","statements":[{"nodeType":"YulVariableDeclaration","src":"5127:35:28","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5157:4:28","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5151:5:28"},"nodeType":"YulFunctionCall","src":"5151:11:28"},"variables":[{"name":"internalCalldata","nodeType":"YulTypedName","src":"5131:16:28","type":""}]},{"expression":{"arguments":[{"name":"internalCalldata","nodeType":"YulIdentifier","src":"5333:16:28"},{"kind":"string","nodeType":"YulLiteral","src":"5351:18:28","type":"","value":"Ժډ"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5326:6:28"},"nodeType":"YulFunctionCall","src":"5326:44:28"},"nodeType":"YulExpressionStatement","src":"5326:44:28"},{"expression":{"arguments":[{"arguments":[{"name":"internalCalldata","nodeType":"YulIdentifier","src":"5784:16:28"},{"kind":"number","nodeType":"YulLiteral","src":"5802:4:28","type":"","value":"0x04"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5780:3:28"},"nodeType":"YulFunctionCall","src":"5780:27:28"},{"kind":"number","nodeType":"YulLiteral","src":"5809:4:28","type":"","value":"0x04"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"5819:12:28"},"nodeType":"YulFunctionCall","src":"5819:14:28"},{"kind":"number","nodeType":"YulLiteral","src":"5835:4:28","type":"","value":"0x04"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5815:3:28"},"nodeType":"YulFunctionCall","src":"5815:25:28"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"5767:12:28"},"nodeType":"YulFunctionCall","src":"5767:74:28"},"nodeType":"YulExpressionStatement","src":"5767:74:28"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"6248:3:28"},"nodeType":"YulFunctionCall","src":"6248:5:28"},{"arguments":[],"functionName":{"name":"caller","nodeType":"YulIdentifier","src":"6375:6:28"},"nodeType":"YulFunctionCall","src":"6375:8:28"},{"kind":"number","nodeType":"YulLiteral","src":"6405:1:28","type":"","value":"0"},{"name":"internalCalldata","nodeType":"YulIdentifier","src":"6428:16:28"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6466:12:28"},"nodeType":"YulFunctionCall","src":"6466:14:28"},{"kind":"number","nodeType":"YulLiteral","src":"6948:4:28","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"6974:4:28","type":"","value":"0x20"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"6222:4:28"},"nodeType":"YulFunctionCall","src":"6222:774:28"}],"functionName":{"name":"pop","nodeType":"YulIdentifier","src":"6201:3:28"},"nodeType":"YulFunctionCall","src":"6201:809:28"},"nodeType":"YulExpressionStatement","src":"6201:809:28"},{"nodeType":"YulVariableDeclaration","src":"7403:47:28","value":{"arguments":[{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"7427:14:28"},"nodeType":"YulFunctionCall","src":"7427:16:28"},{"kind":"number","nodeType":"YulLiteral","src":"7445:4:28","type":"","value":"0x20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7423:3:28"},"nodeType":"YulFunctionCall","src":"7423:27:28"},"variables":[{"name":"responseSize","nodeType":"YulTypedName","src":"7407:12:28","type":""}]},{"nodeType":"YulAssignment","src":"7463:23:28","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7481:4:28","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7475:5:28"},"nodeType":"YulFunctionCall","src":"7475:11:28"},"variableNames":[{"name":"response","nodeType":"YulIdentifier","src":"7463:8:28"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7506:4:28","type":"","value":"0x40"},{"arguments":[{"name":"response","nodeType":"YulIdentifier","src":"7516:8:28"},{"name":"responseSize","nodeType":"YulIdentifier","src":"7526:12:28"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7512:3:28"},"nodeType":"YulFunctionCall","src":"7512:27:28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7499:6:28"},"nodeType":"YulFunctionCall","src":"7499:41:28"},"nodeType":"YulExpressionStatement","src":"7499:41:28"},{"expression":{"arguments":[{"name":"response","nodeType":"YulIdentifier","src":"7568:8:28"},{"kind":"number","nodeType":"YulLiteral","src":"7578:4:28","type":"","value":"0x20"},{"name":"responseSize","nodeType":"YulIdentifier","src":"7584:12:28"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"7553:14:28"},"nodeType":"YulFunctionCall","src":"7553:44:28"},"nodeType":"YulExpressionStatement","src":"7553:44:28"},{"body":{"nodeType":"YulBlock","src":"7634:76:28","statements":[{"expression":{"arguments":[{"arguments":[{"name":"response","nodeType":"YulIdentifier","src":"7663:8:28"},{"kind":"number","nodeType":"YulLiteral","src":"7673:4:28","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7659:3:28"},"nodeType":"YulFunctionCall","src":"7659:19:28"},{"arguments":[{"name":"response","nodeType":"YulIdentifier","src":"7686:8:28"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7680:5:28"},"nodeType":"YulFunctionCall","src":"7680:15:28"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7652:6:28"},"nodeType":"YulFunctionCall","src":"7652:44:28"},"nodeType":"YulExpressionStatement","src":"7652:44:28"}]},"condition":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7627:4:28","type":"","value":"0x00"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7621:5:28"},"nodeType":"YulFunctionCall","src":"7621:11:28"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7614:6:28"},"nodeType":"YulFunctionCall","src":"7614:19:28"},"nodeType":"YulIf","src":"7611:2:28"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":4749,"isOffset":false,"isSlot":false,"src":"7463:8:28","valueSize":1},{"declaration":4749,"isOffset":false,"isSlot":false,"src":"7516:8:28","valueSize":1},{"declaration":4749,"isOffset":false,"isSlot":false,"src":"7568:8:28","valueSize":1},{"declaration":4749,"isOffset":false,"isSlot":false,"src":"7663:8:28","valueSize":1},{"declaration":4749,"isOffset":false,"isSlot":false,"src":"7686:8:28","valueSize":1}],"id":4755,"nodeType":"InlineAssembly","src":"5104:2616:28"}]},"documentation":{"id":4742,"nodeType":"StructuredDocumentation","src":"4091:568:28","text":" @dev Performs a delegatecall on a targetContract in the context of self.\n Internally reverts execution to avoid side effects (making it static). Catches revert and returns encoded result as bytes.\n @dev Inspired by https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\n @param targetContract Address of the contract containing the code to execute.\n @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments)."},"functionSelector":"bd61951d","id":4757,"implemented":true,"kind":"function","modifiers":[],"name":"simulate","nodeType":"FunctionDefinition","parameters":{"id":4747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4744,"mutability":"mutable","name":"targetContract","nodeType":"VariableDeclaration","scope":4757,"src":"4682:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4743,"name":"address","nodeType":"ElementaryTypeName","src":"4682:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4746,"mutability":"mutable","name":"calldataPayload","nodeType":"VariableDeclaration","scope":4757,"src":"4706:30:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4745,"name":"bytes","nodeType":"ElementaryTypeName","src":"4706:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4681:56:28"},"returnParameters":{"id":4750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4749,"mutability":"mutable","name":"response","nodeType":"VariableDeclaration","scope":4757,"src":"4756:21:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4748,"name":"bytes","nodeType":"ElementaryTypeName","src":"4756:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4755:23:28"},"scope":4758,"src":"4664:3062:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4759,"src":"343:7385:28"}],"src":"42:7687:28"},"id":28},"contracts/handler/HandlerContext.sol":{"ast":{"absolutePath":"contracts/handler/HandlerContext.sol","exportedSymbols":{"HandlerContext":[4780]},"id":4781,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4760,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:29"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":4761,"nodeType":"StructuredDocumentation","src":"75:431:29","text":" @title Handler Context - Allows the fallback handler to extract addition context from the calldata\n @dev The fallback manager appends the following context to the calldata:\n      1. Fallback manager caller address (non-padded)\n based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/f8cc8b844a9f92f63dc55aa581f7d643a1bc5ac1/contracts/metatx/ERC2771Context.sol\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4780,"linearizedBaseContracts":[4780],"name":"HandlerContext","nodeType":"ContractDefinition","nodes":[{"body":{"id":4768,"nodeType":"Block","src":"1114:251:29","statements":[{"AST":{"nodeType":"YulBlock","src":"1279:80:29","statements":[{"nodeType":"YulAssignment","src":"1293:56:29","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1307:2:29","type":"","value":"96"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1328:12:29"},"nodeType":"YulFunctionCall","src":"1328:14:29"},{"kind":"number","nodeType":"YulLiteral","src":"1344:2:29","type":"","value":"20"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1324:3:29"},"nodeType":"YulFunctionCall","src":"1324:23:29"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1311:12:29"},"nodeType":"YulFunctionCall","src":"1311:37:29"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1303:3:29"},"nodeType":"YulFunctionCall","src":"1303:46:29"},"variableNames":[{"name":"sender","nodeType":"YulIdentifier","src":"1293:6:29"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":4765,"isOffset":false,"isSlot":false,"src":"1293:6:29","valueSize":1}],"id":4767,"nodeType":"InlineAssembly","src":"1270:89:29"}]},"documentation":{"id":4762,"nodeType":"StructuredDocumentation","src":"546:502:29","text":" @notice Allows fetching the original caller address.\n @dev This is only reliable in combination with a FallbackManager that supports this (e.g. Safe contract >=1.3.0).\n      When using this functionality make sure that the linked _manager (aka msg.sender) supports this.\n      This function does not rely on a trusted forwarder. Use the returned value only to\n      check information against the calling manager.\n @return sender Original caller address."},"id":4769,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nodeType":"FunctionDefinition","parameters":{"id":4763,"nodeType":"ParameterList","parameters":[],"src":"1072:2:29"},"returnParameters":{"id":4766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4765,"mutability":"mutable","name":"sender","nodeType":"VariableDeclaration","scope":4769,"src":"1098:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4764,"name":"address","nodeType":"ElementaryTypeName","src":"1098:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1097:16:29"},"scope":4780,"src":"1053:312:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4778,"nodeType":"Block","src":"1530:34:29","statements":[{"expression":{"expression":{"id":4775,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1547:3:29","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1547:10:29","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":4774,"id":4777,"nodeType":"Return","src":"1540:17:29"}]},"documentation":{"id":4770,"nodeType":"StructuredDocumentation","src":"1371:102:29","text":" @notice Returns the FallbackManager address\n @return Fallback manager address"},"id":4779,"implemented":true,"kind":"function","modifiers":[],"name":"_manager","nodeType":"FunctionDefinition","parameters":{"id":4771,"nodeType":"ParameterList","parameters":[],"src":"1495:2:29"},"returnParameters":{"id":4774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4773,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4779,"src":"1521:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4772,"name":"address","nodeType":"ElementaryTypeName","src":"1521:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1520:9:29"},"scope":4780,"src":"1478:86:29","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":4781,"src":"507:1059:29"}],"src":"42:1525:29"},"id":29},"contracts/handler/TokenCallbackHandler.sol":{"ast":{"absolutePath":"contracts/handler/TokenCallbackHandler.sol","exportedSymbols":{"ERC1155TokenReceiver":[4942],"ERC721TokenReceiver":[4960],"ERC777TokensRecipient":[4980],"IERC165":[4992],"TokenCallbackHandler":[4905]},"id":4906,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4782,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:30"},{"absolutePath":"contracts/interfaces/ERC1155TokenReceiver.sol","file":"../interfaces/ERC1155TokenReceiver.sol","id":4783,"nodeType":"ImportDirective","scope":4906,"sourceUnit":4943,"src":"75:48:30","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/interfaces/ERC721TokenReceiver.sol","file":"../interfaces/ERC721TokenReceiver.sol","id":4784,"nodeType":"ImportDirective","scope":4906,"sourceUnit":4961,"src":"124:47:30","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/interfaces/ERC777TokensRecipient.sol","file":"../interfaces/ERC777TokensRecipient.sol","id":4785,"nodeType":"ImportDirective","scope":4906,"sourceUnit":4981,"src":"172:49:30","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/interfaces/IERC165.sol","file":"../interfaces/IERC165.sol","id":4786,"nodeType":"ImportDirective","scope":4906,"sourceUnit":4993,"src":"222:35:30","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4788,"name":"ERC1155TokenReceiver","nodeType":"UserDefinedTypeName","referencedDeclaration":4942,"src":"454:20:30","typeDescriptions":{"typeIdentifier":"t_contract$_ERC1155TokenReceiver_$4942","typeString":"contract ERC1155TokenReceiver"}},"id":4789,"nodeType":"InheritanceSpecifier","src":"454:20:30"},{"baseName":{"id":4790,"name":"ERC777TokensRecipient","nodeType":"UserDefinedTypeName","referencedDeclaration":4980,"src":"476:21:30","typeDescriptions":{"typeIdentifier":"t_contract$_ERC777TokensRecipient_$4980","typeString":"contract ERC777TokensRecipient"}},"id":4791,"nodeType":"InheritanceSpecifier","src":"476:21:30"},{"baseName":{"id":4792,"name":"ERC721TokenReceiver","nodeType":"UserDefinedTypeName","referencedDeclaration":4960,"src":"499:19:30","typeDescriptions":{"typeIdentifier":"t_contract$_ERC721TokenReceiver_$4960","typeString":"contract ERC721TokenReceiver"}},"id":4793,"nodeType":"InheritanceSpecifier","src":"499:19:30"},{"baseName":{"id":4794,"name":"IERC165","nodeType":"UserDefinedTypeName","referencedDeclaration":4992,"src":"520:7:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC165_$4992","typeString":"contract IERC165"}},"id":4795,"nodeType":"InheritanceSpecifier","src":"520:7:30"}],"contractDependencies":[4942,4960,4980,4992],"contractKind":"contract","documentation":{"id":4787,"nodeType":"StructuredDocumentation","src":"259:161:30","text":" @title Default Callback Handler - Handles supported tokens' callbacks, allowing Safes receiving these tokens.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":4905,"linearizedBaseContracts":[4905,4992,4960,4980,4942],"name":"TokenCallbackHandler","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[4923],"body":{"id":4814,"nodeType":"Block","src":"775:34:30","statements":[{"expression":{"hexValue":"30786632336136653631","id":4812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"792:10:30","typeDescriptions":{"typeIdentifier":"t_rational_4063915617_by_1","typeString":"int_const 4063915617"},"value":"0xf23a6e61"},"functionReturnParameters":4811,"id":4813,"nodeType":"Return","src":"785:17:30"}]},"documentation":{"id":4796,"nodeType":"StructuredDocumentation","src":"534:117:30","text":" @notice Handles ERC1155 Token callback.\n return Standardized onERC1155Received return value."},"functionSelector":"f23a6e61","id":4815,"implemented":true,"kind":"function","modifiers":[],"name":"onERC1155Received","nodeType":"FunctionDefinition","overrides":{"id":4808,"nodeType":"OverrideSpecifier","overrides":[],"src":"749:8:30"},"parameters":{"id":4807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4798,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4815,"src":"683:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4797,"name":"address","nodeType":"ElementaryTypeName","src":"683:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4800,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4815,"src":"692:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4799,"name":"address","nodeType":"ElementaryTypeName","src":"692:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4802,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4815,"src":"701:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4801,"name":"uint256","nodeType":"ElementaryTypeName","src":"701:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4804,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4815,"src":"710:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4803,"name":"uint256","nodeType":"ElementaryTypeName","src":"710:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4806,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4815,"src":"719:14:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4805,"name":"bytes","nodeType":"ElementaryTypeName","src":"719:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"682:52:30"},"returnParameters":{"id":4811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4810,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4815,"src":"767:6:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4809,"name":"bytes4","nodeType":"ElementaryTypeName","src":"767:6:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"766:8:30"},"scope":4905,"src":"656:153:30","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4941],"body":{"id":4836,"nodeType":"Block","src":"1140:34:30","statements":[{"expression":{"hexValue":"30786263313937633831","id":4834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1157:10:30","typeDescriptions":{"typeIdentifier":"t_rational_3155786881_by_1","typeString":"int_const 3155786881"},"value":"0xbc197c81"},"functionReturnParameters":4833,"id":4835,"nodeType":"Return","src":"1150:17:30"}]},"documentation":{"id":4816,"nodeType":"StructuredDocumentation","src":"815:128:30","text":" @notice Handles ERC1155 Token batch callback.\n return Standardized onERC1155BatchReceived return value."},"functionSelector":"bc197c81","id":4837,"implemented":true,"kind":"function","modifiers":[],"name":"onERC1155BatchReceived","nodeType":"FunctionDefinition","overrides":{"id":4830,"nodeType":"OverrideSpecifier","overrides":[],"src":"1114:8:30"},"parameters":{"id":4829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4818,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4837,"src":"989:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4817,"name":"address","nodeType":"ElementaryTypeName","src":"989:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4820,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4837,"src":"1006:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4819,"name":"address","nodeType":"ElementaryTypeName","src":"1006:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4823,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4837,"src":"1023:18:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4821,"name":"uint256","nodeType":"ElementaryTypeName","src":"1023:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4822,"nodeType":"ArrayTypeName","src":"1023:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4826,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4837,"src":"1051:18:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4824,"name":"uint256","nodeType":"ElementaryTypeName","src":"1051:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4825,"nodeType":"ArrayTypeName","src":"1051:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4828,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4837,"src":"1079:14:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4827,"name":"bytes","nodeType":"ElementaryTypeName","src":"1079:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"979:120:30"},"returnParameters":{"id":4833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4832,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4837,"src":"1132:6:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4831,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1132:6:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1131:8:30"},"scope":4905,"src":"948:226:30","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4959],"body":{"id":4854,"nodeType":"Block","src":"1410:34:30","statements":[{"expression":{"hexValue":"30783135306237613032","id":4852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:10:30","typeDescriptions":{"typeIdentifier":"t_rational_353073666_by_1","typeString":"int_const 353073666"},"value":"0x150b7a02"},"functionReturnParameters":4851,"id":4853,"nodeType":"Return","src":"1420:17:30"}]},"documentation":{"id":4838,"nodeType":"StructuredDocumentation","src":"1180:116:30","text":" @notice Handles ERC721 Token callback.\n  return Standardized onERC721Received return value."},"functionSelector":"150b7a02","id":4855,"implemented":true,"kind":"function","modifiers":[],"name":"onERC721Received","nodeType":"FunctionDefinition","overrides":{"id":4848,"nodeType":"OverrideSpecifier","overrides":[],"src":"1384:8:30"},"parameters":{"id":4847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4840,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4855,"src":"1327:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4839,"name":"address","nodeType":"ElementaryTypeName","src":"1327:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4842,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4855,"src":"1336:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4841,"name":"address","nodeType":"ElementaryTypeName","src":"1336:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4844,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4855,"src":"1345:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4843,"name":"uint256","nodeType":"ElementaryTypeName","src":"1345:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4846,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4855,"src":"1354:14:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4845,"name":"bytes","nodeType":"ElementaryTypeName","src":"1354:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1326:43:30"},"returnParameters":{"id":4851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4850,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4855,"src":"1402:6:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4849,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1402:6:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1401:8:30"},"scope":4905,"src":"1301:143:30","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4979],"body":{"id":4872,"nodeType":"Block","src":"1668:84:30","statements":[]},"documentation":{"id":4856,"nodeType":"StructuredDocumentation","src":"1450:98:30","text":" @notice Handles ERC777 Token callback.\n return nothing (not standardized)"},"functionSelector":"0023de29","id":4873,"implemented":true,"kind":"function","modifiers":[],"name":"tokensReceived","nodeType":"FunctionDefinition","overrides":{"id":4870,"nodeType":"OverrideSpecifier","overrides":[],"src":"1659:8:30"},"parameters":{"id":4869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4858,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4873,"src":"1577:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4857,"name":"address","nodeType":"ElementaryTypeName","src":"1577:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4860,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4873,"src":"1586:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4859,"name":"address","nodeType":"ElementaryTypeName","src":"1586:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4862,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4873,"src":"1595:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4861,"name":"address","nodeType":"ElementaryTypeName","src":"1595:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4864,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4873,"src":"1604:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4863,"name":"uint256","nodeType":"ElementaryTypeName","src":"1604:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4866,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4873,"src":"1613:14:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4865,"name":"bytes","nodeType":"ElementaryTypeName","src":"1613:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4868,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4873,"src":"1629:14:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4867,"name":"bytes","nodeType":"ElementaryTypeName","src":"1629:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1576:68:30"},"returnParameters":{"id":4871,"nodeType":"ParameterList","parameters":[],"src":"1668:0:30"},"scope":4905,"src":"1553:199:30","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4991],"body":{"id":4903,"nodeType":"Block","src":"2070:213:30","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4882,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4876,"src":"2099:11:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":4884,"name":"ERC1155TokenReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"2119:20:30","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1155TokenReceiver_$4942_$","typeString":"type(contract ERC1155TokenReceiver)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ERC1155TokenReceiver_$4942_$","typeString":"type(contract ERC1155TokenReceiver)"}],"id":4883,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2114:4:30","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":4885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2114:26:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ERC1155TokenReceiver_$4942","typeString":"type(contract ERC1155TokenReceiver)"}},"id":4886,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"2114:38:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2099:53:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4888,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4876,"src":"2168:11:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":4890,"name":"ERC721TokenReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4960,"src":"2188:19:30","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC721TokenReceiver_$4960_$","typeString":"type(contract ERC721TokenReceiver)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ERC721TokenReceiver_$4960_$","typeString":"type(contract ERC721TokenReceiver)"}],"id":4889,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2183:4:30","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":4891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2183:25:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ERC721TokenReceiver_$4960","typeString":"type(contract ERC721TokenReceiver)"}},"id":4892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"2183:37:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2168:52:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2099:121:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4895,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4876,"src":"2236:11:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":4897,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"2256:7:30","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$4992_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$4992_$","typeString":"type(contract IERC165)"}],"id":4896,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2251:4:30","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":4898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2251:13:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$4992","typeString":"type(contract IERC165)"}},"id":4899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"2251:25:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2236:40:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2099:177:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4881,"id":4902,"nodeType":"Return","src":"2080:196:30"}]},"documentation":{"id":4874,"nodeType":"StructuredDocumentation","src":"1758:214:30","text":" @notice Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165.\n @param interfaceId Id of the interface.\n @return if the interface is supported."},"functionSelector":"01ffc9a7","id":4904,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nodeType":"FunctionDefinition","overrides":{"id":4878,"nodeType":"OverrideSpecifier","overrides":[],"src":"2046:8:30"},"parameters":{"id":4877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4876,"mutability":"mutable","name":"interfaceId","nodeType":"VariableDeclaration","scope":4904,"src":"2004:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4875,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2004:6:30","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2003:20:30"},"returnParameters":{"id":4881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4880,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4904,"src":"2064:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4879,"name":"bool","nodeType":"ElementaryTypeName","src":"2064:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2063:6:30"},"scope":4905,"src":"1977:306:30","stateMutability":"view","virtual":true,"visibility":"external"}],"scope":4906,"src":"421:1864:30"}],"src":"42:2244:30"},"id":30},"contracts/interfaces/ERC1155TokenReceiver.sol":{"ast":{"absolutePath":"contracts/interfaces/ERC1155TokenReceiver.sol","exportedSymbols":{"ERC1155TokenReceiver":[4942]},"id":4943,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4907,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:31"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":4942,"linearizedBaseContracts":[4942],"name":"ERC1155TokenReceiver","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4908,"nodeType":"StructuredDocumentation","src":"178:1086:31","text":" @notice Handle the receipt of a single ERC1155 token type.\n @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.\n      This function MUST return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61) if it accepts the transfer.\n      This function MUST revert if it rejects the transfer.\n      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\n @param _operator  The address which initiated the transfer (i.e. msg.sender).\n @param _from      The address which previously owned the token.\n @param _id        The ID of the token being transferred.\n @param _value     The amount of tokens being transferred.\n @param _data      Additional data with no specified format.\n @return           `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`."},"functionSelector":"f23a6e61","id":4923,"implemented":false,"kind":"function","modifiers":[],"name":"onERC1155Received","nodeType":"FunctionDefinition","parameters":{"id":4919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4910,"mutability":"mutable","name":"_operator","nodeType":"VariableDeclaration","scope":4923,"src":"1305:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4909,"name":"address","nodeType":"ElementaryTypeName","src":"1305:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4912,"mutability":"mutable","name":"_from","nodeType":"VariableDeclaration","scope":4923,"src":"1332:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4911,"name":"address","nodeType":"ElementaryTypeName","src":"1332:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4914,"mutability":"mutable","name":"_id","nodeType":"VariableDeclaration","scope":4923,"src":"1355:11:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4913,"name":"uint256","nodeType":"ElementaryTypeName","src":"1355:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4916,"mutability":"mutable","name":"_value","nodeType":"VariableDeclaration","scope":4923,"src":"1376:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4915,"name":"uint256","nodeType":"ElementaryTypeName","src":"1376:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4918,"mutability":"mutable","name":"_data","nodeType":"VariableDeclaration","scope":4923,"src":"1400:20:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4917,"name":"bytes","nodeType":"ElementaryTypeName","src":"1400:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1295:131:31"},"returnParameters":{"id":4922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4921,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4923,"src":"1445:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4920,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1445:6:31","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1444:8:31"},"scope":4942,"src":"1269:184:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4924,"nodeType":"StructuredDocumentation","src":"1459:1248:31","text":" @notice Handle the receipt of multiple ERC1155 token types.\n @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.\n      This function MUST return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).\n      This function MUST revert if it rejects the transfer(s).\n      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\n @param _operator  The address which initiated the batch transfer (i.e. msg.sender).\n @param _from      The address which previously owned the token.\n @param _ids       An array containing ids of each token being transferred (order and length must match _values array).\n @param _values    An array containing amounts of each token being transferred (order and length must match _ids array).\n @param _data      Additional data with no specified format.\n @return           `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`."},"functionSelector":"bc197c81","id":4941,"implemented":false,"kind":"function","modifiers":[],"name":"onERC1155BatchReceived","nodeType":"FunctionDefinition","parameters":{"id":4937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4926,"mutability":"mutable","name":"_operator","nodeType":"VariableDeclaration","scope":4941,"src":"2753:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4925,"name":"address","nodeType":"ElementaryTypeName","src":"2753:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4928,"mutability":"mutable","name":"_from","nodeType":"VariableDeclaration","scope":4941,"src":"2780:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4927,"name":"address","nodeType":"ElementaryTypeName","src":"2780:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4931,"mutability":"mutable","name":"_ids","nodeType":"VariableDeclaration","scope":4941,"src":"2803:23:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4929,"name":"uint256","nodeType":"ElementaryTypeName","src":"2803:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4930,"nodeType":"ArrayTypeName","src":"2803:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4934,"mutability":"mutable","name":"_values","nodeType":"VariableDeclaration","scope":4941,"src":"2836:26:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4932,"name":"uint256","nodeType":"ElementaryTypeName","src":"2836:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4933,"nodeType":"ArrayTypeName","src":"2836:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4936,"mutability":"mutable","name":"_data","nodeType":"VariableDeclaration","scope":4941,"src":"2872:20:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4935,"name":"bytes","nodeType":"ElementaryTypeName","src":"2872:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2743:155:31"},"returnParameters":{"id":4940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4939,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4941,"src":"2917:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4938,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2917:6:31","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2916:8:31"},"scope":4942,"src":"2712:213:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4943,"src":"141:2786:31"}],"src":"42:2886:31"},"id":31},"contracts/interfaces/ERC721TokenReceiver.sol":{"ast":{"absolutePath":"contracts/interfaces/ERC721TokenReceiver.sol","exportedSymbols":{"ERC721TokenReceiver":[4960]},"id":4961,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4944,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:32"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":4945,"nodeType":"StructuredDocumentation","src":"75:72:32","text":"@dev Note: the ERC-165 identifier for this interface is 0x150b7a02."},"fullyImplemented":false,"id":4960,"linearizedBaseContracts":[4960],"name":"ERC721TokenReceiver","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4946,"nodeType":"StructuredDocumentation","src":"183:769:32","text":" @notice Handle the receipt of an NFT\n @dev The ERC721 smart contract calls this function on the recipient\n  after a `transfer`. This function MAY throw to revert and reject the\n  transfer. Return of other than the magic value MUST result in the\n  transaction being reverted.\n  Note: the contract address is always the message sender.\n @param _operator The address which called `safeTransferFrom` function.\n @param _from The address which previously owned the token.\n @param _tokenId The NFT identifier which is being transferred.\n @param _data Additional data with no specified format.\n @return `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`.\n  unless throwing"},"functionSelector":"150b7a02","id":4959,"implemented":false,"kind":"function","modifiers":[],"name":"onERC721Received","nodeType":"FunctionDefinition","parameters":{"id":4955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4948,"mutability":"mutable","name":"_operator","nodeType":"VariableDeclaration","scope":4959,"src":"983:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4947,"name":"address","nodeType":"ElementaryTypeName","src":"983:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4950,"mutability":"mutable","name":"_from","nodeType":"VariableDeclaration","scope":4959,"src":"1002:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4949,"name":"address","nodeType":"ElementaryTypeName","src":"1002:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4952,"mutability":"mutable","name":"_tokenId","nodeType":"VariableDeclaration","scope":4959,"src":"1017:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4951,"name":"uint256","nodeType":"ElementaryTypeName","src":"1017:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4954,"mutability":"mutable","name":"_data","nodeType":"VariableDeclaration","scope":4959,"src":"1035:20:32","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4953,"name":"bytes","nodeType":"ElementaryTypeName","src":"1035:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"982:74:32"},"returnParameters":{"id":4958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4957,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4959,"src":"1075:6:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4956,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1075:6:32","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1074:8:32"},"scope":4960,"src":"957:126:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4961,"src":"147:938:32"}],"src":"42:1044:32"},"id":32},"contracts/interfaces/ERC777TokensRecipient.sol":{"ast":{"absolutePath":"contracts/interfaces/ERC777TokensRecipient.sol","exportedSymbols":{"ERC777TokensRecipient":[4980]},"id":4981,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4962,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:33"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":4963,"nodeType":"StructuredDocumentation","src":"75:239:33","text":" @title ERC777TokensRecipient\n @dev Interface for contracts that will be called with the ERC777 token's `tokensReceived` method.\n The contract receiving the tokens must implement this interface in order to receive the tokens."},"fullyImplemented":false,"id":4980,"linearizedBaseContracts":[4980],"name":"ERC777TokensRecipient","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4964,"nodeType":"StructuredDocumentation","src":"353:586:33","text":" @dev Called by the ERC777 token contract after a successful transfer or a minting operation.\n @param operator The address of the operator performing the transfer or minting operation.\n @param from The address of the sender.\n @param to The address of the recipient.\n @param amount The amount of tokens that were transferred or minted.\n @param data Additional data that was passed during the transfer or minting operation.\n @param operatorData Additional data that was passed by the operator during the transfer or minting operation."},"functionSelector":"0023de29","id":4979,"implemented":false,"kind":"function","modifiers":[],"name":"tokensReceived","nodeType":"FunctionDefinition","parameters":{"id":4977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4966,"mutability":"mutable","name":"operator","nodeType":"VariableDeclaration","scope":4979,"src":"977:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4965,"name":"address","nodeType":"ElementaryTypeName","src":"977:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4968,"mutability":"mutable","name":"from","nodeType":"VariableDeclaration","scope":4979,"src":"1003:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4967,"name":"address","nodeType":"ElementaryTypeName","src":"1003:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4970,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":4979,"src":"1025:10:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4969,"name":"address","nodeType":"ElementaryTypeName","src":"1025:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4972,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":4979,"src":"1045:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4971,"name":"uint256","nodeType":"ElementaryTypeName","src":"1045:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4974,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":4979,"src":"1069:19:33","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4973,"name":"bytes","nodeType":"ElementaryTypeName","src":"1069:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4976,"mutability":"mutable","name":"operatorData","nodeType":"VariableDeclaration","scope":4979,"src":"1098:27:33","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4975,"name":"bytes","nodeType":"ElementaryTypeName","src":"1098:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"967:164:33"},"returnParameters":{"id":4978,"nodeType":"ParameterList","parameters":[],"src":"1140:0:33"},"scope":4980,"src":"944:197:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4981,"src":"315:828:33"}],"src":"42:1102:33"},"id":33},"contracts/interfaces/IERC165.sol":{"ast":{"absolutePath":"contracts/interfaces/IERC165.sol","exportedSymbols":{"IERC165":[4992]},"id":4993,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4982,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:34"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":4983,"nodeType":"StructuredDocumentation","src":"75:137:34","text":"@notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol"},"fullyImplemented":false,"id":4992,"linearizedBaseContracts":[4992],"name":"IERC165","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4984,"nodeType":"StructuredDocumentation","src":"236:339:34","text":" @dev Returns true if this contract implements the interface defined by `interfaceId`.\n See the corresponding EIP section\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":4991,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nodeType":"FunctionDefinition","parameters":{"id":4987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4986,"mutability":"mutable","name":"interfaceId","nodeType":"VariableDeclaration","scope":4991,"src":"607:18:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4985,"name":"bytes4","nodeType":"ElementaryTypeName","src":"607:6:34","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"606:20:34"},"returnParameters":{"id":4990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4989,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4991,"src":"650:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4988,"name":"bool","nodeType":"ElementaryTypeName","src":"650:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"649:6:34"},"scope":4992,"src":"580:76:34","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4993,"src":"212:446:34"}],"src":"42:617:34"},"id":34},"contracts/interfaces/ISignatureValidator.sol":{"ast":{"absolutePath":"contracts/interfaces/ISignatureValidator.sol","exportedSymbols":{"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998]},"id":5012,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":4994,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:35"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":4998,"linearizedBaseContracts":[4998],"name":"ISignatureValidatorConstants","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":4997,"mutability":"constant","name":"EIP1271_MAGIC_VALUE","nodeType":"VariableDeclaration","scope":4998,"src":"176:57:35","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4995,"name":"bytes4","nodeType":"ElementaryTypeName","src":"176:6:35","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783230633133623062","id":4996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"223:10:35","typeDescriptions":{"typeIdentifier":"t_rational_549534475_by_1","typeString":"int_const 549534475"},"value":"0x20c13b0b"},"visibility":"internal"}],"scope":5012,"src":"75:161:35"},{"abstract":true,"baseContracts":[{"baseName":{"id":4999,"name":"ISignatureValidatorConstants","nodeType":"UserDefinedTypeName","referencedDeclaration":4998,"src":"279:28:35","typeDescriptions":{"typeIdentifier":"t_contract$_ISignatureValidatorConstants_$4998","typeString":"contract ISignatureValidatorConstants"}},"id":5000,"nodeType":"InheritanceSpecifier","src":"279:28:35"}],"contractDependencies":[4998],"contractKind":"contract","fullyImplemented":false,"id":5011,"linearizedBaseContracts":[5011,4998],"name":"ISignatureValidator","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5001,"nodeType":"StructuredDocumentation","src":"314:431:35","text":" @notice Legacy EIP1271 method to validate a signature.\n @param _data Arbitrary length data signed on the behalf of address(this).\n @param _signature Signature byte array associated with _data.\n MUST return the bytes4 magic value 0x20c13b0b when function passes.\n MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n MUST allow external calls"},"functionSelector":"20c13b0b","id":5010,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSignature","nodeType":"FunctionDefinition","parameters":{"id":5006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5003,"mutability":"mutable","name":"_data","nodeType":"VariableDeclaration","scope":5010,"src":"776:18:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5002,"name":"bytes","nodeType":"ElementaryTypeName","src":"776:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5005,"mutability":"mutable","name":"_signature","nodeType":"VariableDeclaration","scope":5010,"src":"796:23:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5004,"name":"bytes","nodeType":"ElementaryTypeName","src":"796:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"775:45:35"},"returnParameters":{"id":5009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5008,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5010,"src":"850:6:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5007,"name":"bytes4","nodeType":"ElementaryTypeName","src":"850:6:35","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"849:8:35"},"scope":5011,"src":"750:108:35","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":5012,"src":"238:622:35"}],"src":"42:819:35"},"id":35},"contracts/interfaces/ViewStorageAccessible.sol":{"ast":{"absolutePath":"contracts/interfaces/ViewStorageAccessible.sol","exportedSymbols":{"ViewStorageAccessible":[5025]},"id":5026,"nodeType":"SourceUnit","nodes":[{"id":5013,"literals":["solidity",">=","0.5",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"0:31:36"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":5014,"nodeType":"StructuredDocumentation","src":"33:277:36","text":"@title ViewStorageAccessible - Interface on top of StorageAccessible base class to allow simulations from view functions.\n @notice Adjusted version of https://github.com/gnosis/util-contracts/blob/3db1e531cb243a48ea91c60a800d537c1000612a/contracts/StorageAccessible.sol"},"fullyImplemented":false,"id":5025,"linearizedBaseContracts":[5025],"name":"ViewStorageAccessible","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5015,"nodeType":"StructuredDocumentation","src":"348:256:36","text":" @dev Same as `simulate` on StorageAccessible. Marked as view so that it can be called from external contracts\n that want to run simulations from within view functions. Will revert if the invoked simulation attempts to change state."},"functionSelector":"bd61951d","id":5024,"implemented":false,"kind":"function","modifiers":[],"name":"simulate","nodeType":"FunctionDefinition","parameters":{"id":5020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5017,"mutability":"mutable","name":"targetContract","nodeType":"VariableDeclaration","scope":5024,"src":"627:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5016,"name":"address","nodeType":"ElementaryTypeName","src":"627:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5019,"mutability":"mutable","name":"calldataPayload","nodeType":"VariableDeclaration","scope":5024,"src":"651:30:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5018,"name":"bytes","nodeType":"ElementaryTypeName","src":"651:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"626:56:36"},"returnParameters":{"id":5023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5022,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5024,"src":"706:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5021,"name":"bytes","nodeType":"ElementaryTypeName","src":"706:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"705:14:36"},"scope":5025,"src":"609:111:36","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5026,"src":"310:412:36"}],"src":"0:723:36"},"id":36},"contracts/libraries/CreateCall.sol":{"ast":{"absolutePath":"contracts/libraries/CreateCall.sol","exportedSymbols":{"CreateCall":[5088]},"id":5089,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5027,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"43:31:37"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":5028,"nodeType":"StructuredDocumentation","src":"76:248:37","text":" @title Create Call - Allows to use the different create opcodes to deploy a contract.\n @author Richard Meissner - @rmeissner\n @notice This contract provides functions for deploying a new contract using the create and create2 opcodes."},"fullyImplemented":true,"id":5088,"linearizedBaseContracts":[5088],"name":"CreateCall","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5029,"nodeType":"StructuredDocumentation","src":"351:50:37","text":"@notice Emitted when a new contract is created"},"id":5033,"name":"ContractCreation","nodeType":"EventDefinition","parameters":{"id":5032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5031,"indexed":true,"mutability":"mutable","name":"newContract","nodeType":"VariableDeclaration","scope":5033,"src":"429:27:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5030,"name":"address","nodeType":"ElementaryTypeName","src":"429:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"428:29:37"},"src":"406:52:37"},{"body":{"id":5060,"nodeType":"Block","src":"961:307:37","statements":[{"AST":{"nodeType":"YulBlock","src":"1036:109:37","statements":[{"nodeType":"YulAssignment","src":"1050:85:37","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1073:5:37"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:4:37","type":"","value":"0x20"},{"name":"deploymentData","nodeType":"YulIdentifier","src":"1090:14:37"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1080:3:37"},"nodeType":"YulFunctionCall","src":"1080:25:37"},{"arguments":[{"name":"deploymentData","nodeType":"YulIdentifier","src":"1113:14:37"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1107:5:37"},"nodeType":"YulFunctionCall","src":"1107:21:37"},{"name":"salt","nodeType":"YulIdentifier","src":"1130:4:37"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"1065:7:37"},"nodeType":"YulFunctionCall","src":"1065:70:37"},"variableNames":[{"name":"newContract","nodeType":"YulIdentifier","src":"1050:11:37"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5038,"isOffset":false,"isSlot":false,"src":"1090:14:37","valueSize":1},{"declaration":5038,"isOffset":false,"isSlot":false,"src":"1113:14:37","valueSize":1},{"declaration":5043,"isOffset":false,"isSlot":false,"src":"1050:11:37","valueSize":1},{"declaration":5040,"isOffset":false,"isSlot":false,"src":"1130:4:37","valueSize":1},{"declaration":5036,"isOffset":false,"isSlot":false,"src":"1073:5:37","valueSize":1}],"id":5045,"nodeType":"InlineAssembly","src":"1027:118:37"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5047,"name":"newContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"1162:11:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5050,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1185:1:37","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":5049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1177:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5048,"name":"address","nodeType":"ElementaryTypeName","src":"1177:7:37","typeDescriptions":{}}},"id":5051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1177:10:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1162:25:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f756c64206e6f74206465706c6f7920636f6e7472616374","id":5053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1189:27:37","typeDescriptions":{"typeIdentifier":"t_stringliteral_90e12fe534b2da37f2657ea8f10036bfb8c39edcfa9d51c75e017336dd38e36e","typeString":"literal_string \"Could not deploy contract\""},"value":"Could not deploy contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_90e12fe534b2da37f2657ea8f10036bfb8c39edcfa9d51c75e017336dd38e36e","typeString":"literal_string \"Could not deploy contract\""}],"id":5046,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1154:7:37","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1154:63:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5055,"nodeType":"ExpressionStatement","src":"1154:63:37"},{"eventCall":{"arguments":[{"id":5057,"name":"newContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"1249:11:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5056,"name":"ContractCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5033,"src":"1232:16:37","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1232:29:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5059,"nodeType":"EmitStatement","src":"1227:34:37"}]},"documentation":{"id":5034,"nodeType":"StructuredDocumentation","src":"464:373:37","text":" @notice Deploys a new contract using the create2 opcode.\n @param value The value in wei to be sent with the contract creation.\n @param deploymentData The initialisation code of the contract to be created.\n @param salt The salt value to use for the contract creation.\n @return newContract The address of the newly created contract."},"functionSelector":"4847be6f","id":5061,"implemented":true,"kind":"function","modifiers":[],"name":"performCreate2","nodeType":"FunctionDefinition","parameters":{"id":5041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5036,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":5061,"src":"866:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5035,"name":"uint256","nodeType":"ElementaryTypeName","src":"866:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5038,"mutability":"mutable","name":"deploymentData","nodeType":"VariableDeclaration","scope":5061,"src":"881:27:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5037,"name":"bytes","nodeType":"ElementaryTypeName","src":"881:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5040,"mutability":"mutable","name":"salt","nodeType":"VariableDeclaration","scope":5061,"src":"910:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5039,"name":"bytes32","nodeType":"ElementaryTypeName","src":"910:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"865:58:37"},"returnParameters":{"id":5044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5043,"mutability":"mutable","name":"newContract","nodeType":"VariableDeclaration","scope":5061,"src":"940:19:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5042,"name":"address","nodeType":"ElementaryTypeName","src":"940:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"939:21:37"},"scope":5088,"src":"842:426:37","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5086,"nodeType":"Block","src":"1687:300:37","statements":[{"AST":{"nodeType":"YulBlock","src":"1762:102:37","statements":[{"nodeType":"YulAssignment","src":"1776:78:37","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1798:5:37"},{"arguments":[{"name":"deploymentData","nodeType":"YulIdentifier","src":"1809:14:37"},{"kind":"number","nodeType":"YulLiteral","src":"1825:4:37","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1805:3:37"},"nodeType":"YulFunctionCall","src":"1805:25:37"},{"arguments":[{"name":"deploymentData","nodeType":"YulIdentifier","src":"1838:14:37"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1832:5:37"},"nodeType":"YulFunctionCall","src":"1832:21:37"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"1791:6:37"},"nodeType":"YulFunctionCall","src":"1791:63:37"},"variableNames":[{"name":"newContract","nodeType":"YulIdentifier","src":"1776:11:37"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5066,"isOffset":false,"isSlot":false,"src":"1809:14:37","valueSize":1},{"declaration":5066,"isOffset":false,"isSlot":false,"src":"1838:14:37","valueSize":1},{"declaration":5069,"isOffset":false,"isSlot":false,"src":"1776:11:37","valueSize":1},{"declaration":5064,"isOffset":false,"isSlot":false,"src":"1798:5:37","valueSize":1}],"id":5071,"nodeType":"InlineAssembly","src":"1753:111:37"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5073,"name":"newContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"1881:11:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1904:1:37","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":5075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1896:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5074,"name":"address","nodeType":"ElementaryTypeName","src":"1896:7:37","typeDescriptions":{}}},"id":5077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1896:10:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1881:25:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f756c64206e6f74206465706c6f7920636f6e7472616374","id":5079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1908:27:37","typeDescriptions":{"typeIdentifier":"t_stringliteral_90e12fe534b2da37f2657ea8f10036bfb8c39edcfa9d51c75e017336dd38e36e","typeString":"literal_string \"Could not deploy contract\""},"value":"Could not deploy contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_90e12fe534b2da37f2657ea8f10036bfb8c39edcfa9d51c75e017336dd38e36e","typeString":"literal_string \"Could not deploy contract\""}],"id":5072,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1873:7:37","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1873:63:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5081,"nodeType":"ExpressionStatement","src":"1873:63:37"},{"eventCall":{"arguments":[{"id":5083,"name":"newContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"1968:11:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5082,"name":"ContractCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5033,"src":"1951:16:37","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1951:29:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5085,"nodeType":"EmitStatement","src":"1946:34:37"}]},"documentation":{"id":5062,"nodeType":"StructuredDocumentation","src":"1274:304:37","text":" @notice Deploys a new contract using the create opcode.\n @param value The value in wei to be sent with the contract creation.\n @param deploymentData The initialisation code of the contract to be created.\n @return newContract The address of the newly created contract."},"functionSelector":"4c8c9ea1","id":5087,"implemented":true,"kind":"function","modifiers":[],"name":"performCreate","nodeType":"FunctionDefinition","parameters":{"id":5067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5064,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":5087,"src":"1606:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5063,"name":"uint256","nodeType":"ElementaryTypeName","src":"1606:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5066,"mutability":"mutable","name":"deploymentData","nodeType":"VariableDeclaration","scope":5087,"src":"1621:27:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5065,"name":"bytes","nodeType":"ElementaryTypeName","src":"1621:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1605:44:37"},"returnParameters":{"id":5070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5069,"mutability":"mutable","name":"newContract","nodeType":"VariableDeclaration","scope":5087,"src":"1666:19:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5068,"name":"address","nodeType":"ElementaryTypeName","src":"1666:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1665:21:37"},"scope":5088,"src":"1583:404:37","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":5089,"src":"325:1664:37"}],"src":"43:1947:37"},"id":37},"contracts/libraries/MultiSend.sol":{"ast":{"absolutePath":"contracts/libraries/MultiSend.sol","exportedSymbols":{"MultiSend":[5123]},"id":5124,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5090,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:38"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":5091,"nodeType":"StructuredDocumentation","src":"75:262:38","text":" @title Multi Send - Allows to batch multiple transactions into one.\n @author Nick Dodson - <nick.dodson@consensys.net>\n @author Gonçalo Sá - <goncalo.sa@consensys.net>\n @author Stefan George - @Georgi87\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":5123,"linearizedBaseContracts":[5123],"name":"MultiSend","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":5093,"mutability":"immutable","name":"multisendSingleton","nodeType":"VariableDeclaration","scope":5123,"src":"363:44:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5092,"name":"address","nodeType":"ElementaryTypeName","src":"363:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"body":{"id":5103,"nodeType":"Block","src":"428:51:38","statements":[{"expression":{"id":5101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5096,"name":"multisendSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5093,"src":"438:18:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5099,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"467:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_MultiSend_$5123","typeString":"contract MultiSend"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MultiSend_$5123","typeString":"contract MultiSend"}],"id":5098,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"459:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5097,"name":"address","nodeType":"ElementaryTypeName","src":"459:7:38","typeDescriptions":{}}},"id":5100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"459:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"438:34:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5102,"nodeType":"ExpressionStatement","src":"438:34:38"}]},"id":5104,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":5094,"nodeType":"ParameterList","parameters":[],"src":"425:2:38"},"returnParameters":{"id":5095,"nodeType":"ParameterList","parameters":[],"src":"428:0:38"},"scope":5123,"src":"414:65:38","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5121,"nodeType":"Block","src":"1347:2099:38","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5113,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1373:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_MultiSend_$5123","typeString":"contract MultiSend"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MultiSend_$5123","typeString":"contract MultiSend"}],"id":5112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1365:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5111,"name":"address","nodeType":"ElementaryTypeName","src":"1365:7:38","typeDescriptions":{}}},"id":5114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1365:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5115,"name":"multisendSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5093,"src":"1382:18:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1365:35:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c","id":5117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1402:50:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_be54b8c9bc01d366a87d58d4e594f7b0f8a1032210aae73d17a5ed4f177986bc","typeString":"literal_string \"MultiSend should only be called via delegatecall\""},"value":"MultiSend should only be called via delegatecall"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_be54b8c9bc01d366a87d58d4e594f7b0f8a1032210aae73d17a5ed4f177986bc","typeString":"literal_string \"MultiSend should only be called via delegatecall\""}],"id":5110,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1357:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1357:96:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5119,"nodeType":"ExpressionStatement","src":"1357:96:38"},{"AST":{"nodeType":"YulBlock","src":"1528:1912:38","statements":[{"nodeType":"YulVariableDeclaration","src":"1542:33:38","value":{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"1562:12:38"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1556:5:38"},"nodeType":"YulFunctionCall","src":"1556:19:38"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1546:6:38","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1588:13:38","value":{"kind":"number","nodeType":"YulLiteral","src":"1597:4:38","type":"","value":"0x20"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1592:1:38","type":""}]},{"body":{"nodeType":"YulBlock","src":"1779:1651:38","statements":[{"nodeType":"YulVariableDeclaration","src":"2037:55:38","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2058:4:38","type":"","value":"0xf8"},{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2074:12:38"},{"name":"i","nodeType":"YulIdentifier","src":"2088:1:38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2070:3:38"},"nodeType":"YulFunctionCall","src":"2070:20:38"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2064:5:38"},"nodeType":"YulFunctionCall","src":"2064:27:38"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2054:3:38"},"nodeType":"YulFunctionCall","src":"2054:38:38"},"variables":[{"name":"operation","nodeType":"YulTypedName","src":"2041:9:38","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2311:59:38","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2325:4:38","type":"","value":"0x60"},{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2341:12:38"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2359:1:38"},{"kind":"number","nodeType":"YulLiteral","src":"2362:4:38","type":"","value":"0x01"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2355:3:38"},"nodeType":"YulFunctionCall","src":"2355:12:38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2337:3:38"},"nodeType":"YulFunctionCall","src":"2337:31:38"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2331:5:38"},"nodeType":"YulFunctionCall","src":"2331:38:38"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2321:3:38"},"nodeType":"YulFunctionCall","src":"2321:49:38"},"variables":[{"name":"to","nodeType":"YulTypedName","src":"2315:2:38","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2480:51:38","value":{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2503:12:38"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2521:1:38"},{"kind":"number","nodeType":"YulLiteral","src":"2524:4:38","type":"","value":"0x15"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2517:3:38"},"nodeType":"YulFunctionCall","src":"2517:12:38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2499:3:38"},"nodeType":"YulFunctionCall","src":"2499:31:38"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2493:5:38"},"nodeType":"YulFunctionCall","src":"2493:38:38"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2484:5:38","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2658:56:38","value":{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2686:12:38"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2704:1:38"},{"kind":"number","nodeType":"YulLiteral","src":"2707:4:38","type":"","value":"0x35"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2700:3:38"},"nodeType":"YulFunctionCall","src":"2700:12:38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2682:3:38"},"nodeType":"YulFunctionCall","src":"2682:31:38"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2676:5:38"},"nodeType":"YulFunctionCall","src":"2676:38:38"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"2662:10:38","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2864:43:38","value":{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2880:12:38"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2898:1:38"},{"kind":"number","nodeType":"YulLiteral","src":"2901:4:38","type":"","value":"0x55"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2894:3:38"},"nodeType":"YulFunctionCall","src":"2894:12:38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2876:3:38"},"nodeType":"YulFunctionCall","src":"2876:31:38"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"2868:4:38","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2924:16:38","value":{"kind":"number","nodeType":"YulLiteral","src":"2939:1:38","type":"","value":"0"},"variables":[{"name":"success","nodeType":"YulTypedName","src":"2928:7:38","type":""}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"2997:97:38","statements":[{"nodeType":"YulAssignment","src":"3019:57:38","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"3035:3:38"},"nodeType":"YulFunctionCall","src":"3035:5:38"},{"name":"to","nodeType":"YulIdentifier","src":"3042:2:38"},{"name":"value","nodeType":"YulIdentifier","src":"3046:5:38"},{"name":"data","nodeType":"YulIdentifier","src":"3053:4:38"},{"name":"dataLength","nodeType":"YulIdentifier","src":"3059:10:38"},{"kind":"number","nodeType":"YulLiteral","src":"3071:1:38","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3074:1:38","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"3030:4:38"},"nodeType":"YulFunctionCall","src":"3030:46:38"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"3019:7:38"}]}]},"nodeType":"YulCase","src":"2990:104:38","value":{"kind":"number","nodeType":"YulLiteral","src":"2995:1:38","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"3118:98:38","statements":[{"nodeType":"YulAssignment","src":"3140:58:38","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"3164:3:38"},"nodeType":"YulFunctionCall","src":"3164:5:38"},{"name":"to","nodeType":"YulIdentifier","src":"3171:2:38"},{"name":"data","nodeType":"YulIdentifier","src":"3175:4:38"},{"name":"dataLength","nodeType":"YulIdentifier","src":"3181:10:38"},{"kind":"number","nodeType":"YulLiteral","src":"3193:1:38","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3196:1:38","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"3151:12:38"},"nodeType":"YulFunctionCall","src":"3151:47:38"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"3140:7:38"}]}]},"nodeType":"YulCase","src":"3111:105:38","value":{"kind":"number","nodeType":"YulLiteral","src":"3116:1:38","type":"","value":"1"}}],"expression":{"name":"operation","nodeType":"YulIdentifier","src":"2964:9:38"},"nodeType":"YulSwitch","src":"2957:259:38"},{"body":{"nodeType":"YulBlock","src":"3251:52:38","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3280:1:38","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3283:1:38","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3273:6:38"},"nodeType":"YulFunctionCall","src":"3273:12:38"},"nodeType":"YulExpressionStatement","src":"3273:12:38"}]},"condition":{"arguments":[{"name":"success","nodeType":"YulIdentifier","src":"3239:7:38"},{"kind":"number","nodeType":"YulLiteral","src":"3248:1:38","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3236:2:38"},"nodeType":"YulFunctionCall","src":"3236:14:38"},"nodeType":"YulIf","src":"3233:2:38"},{"nodeType":"YulAssignment","src":"3382:34:38","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3391:1:38"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3398:4:38","type":"","value":"0x55"},{"name":"dataLength","nodeType":"YulIdentifier","src":"3404:10:38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3394:3:38"},"nodeType":"YulFunctionCall","src":"3394:21:38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3387:3:38"},"nodeType":"YulFunctionCall","src":"3387:29:38"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3382:1:38"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1694:1:38"},{"name":"length","nodeType":"YulIdentifier","src":"1697:6:38"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1691:2:38"},"nodeType":"YulFunctionCall","src":"1691:13:38"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1705:73:38","statements":[]},"pre":{"nodeType":"YulBlock","src":"1618:72:38","statements":[]},"src":"1614:1816:38"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5107,"isOffset":false,"isSlot":false,"src":"1562:12:38","valueSize":1},{"declaration":5107,"isOffset":false,"isSlot":false,"src":"2074:12:38","valueSize":1},{"declaration":5107,"isOffset":false,"isSlot":false,"src":"2341:12:38","valueSize":1},{"declaration":5107,"isOffset":false,"isSlot":false,"src":"2503:12:38","valueSize":1},{"declaration":5107,"isOffset":false,"isSlot":false,"src":"2686:12:38","valueSize":1},{"declaration":5107,"isOffset":false,"isSlot":false,"src":"2880:12:38","valueSize":1}],"id":5120,"nodeType":"InlineAssembly","src":"1519:1921:38"}]},"documentation":{"id":5105,"nodeType":"StructuredDocumentation","src":"485:796:38","text":" @dev Sends multiple transactions and reverts all if one fails.\n @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\n                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),\n                     to as a address (=> 20 bytes),\n                     value as a uint256 (=> 32 bytes),\n                     data length as a uint256 (=> 32 bytes),\n                     data as bytes.\n                     see abi.encodePacked for more information on packed encoding\n @notice This method is payable as delegatecalls keep the msg.value from the previous call\n         If the calling method (e.g. execTransaction) received ETH this would revert otherwise"},"functionSelector":"8d80ff0a","id":5122,"implemented":true,"kind":"function","modifiers":[],"name":"multiSend","nodeType":"FunctionDefinition","parameters":{"id":5108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5107,"mutability":"mutable","name":"transactions","nodeType":"VariableDeclaration","scope":5122,"src":"1305:25:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5106,"name":"bytes","nodeType":"ElementaryTypeName","src":"1305:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1304:27:38"},"returnParameters":{"id":5109,"nodeType":"ParameterList","parameters":[],"src":"1347:0:38"},"scope":5123,"src":"1286:2160:38","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":5124,"src":"338:3110:38"}],"src":"42:3407:38"},"id":38},"contracts/libraries/MultiSendCallOnly.sol":{"ast":{"absolutePath":"contracts/libraries/MultiSendCallOnly.sol","exportedSymbols":{"MultiSendCallOnly":[5135]},"id":5136,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5125,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:39"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":5126,"nodeType":"StructuredDocumentation","src":"75:284:39","text":" @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls\n @notice The guard logic is not required here as this contract doesn't support nested delegate calls\n @author Stefan George - @Georgi87\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":5135,"linearizedBaseContracts":[5135],"name":"MultiSendCallOnly","nodeType":"ContractDefinition","nodes":[{"body":{"id":5133,"nodeType":"Block","src":"1409:2008:39","statements":[{"AST":{"nodeType":"YulBlock","src":"1484:1927:39","statements":[{"nodeType":"YulVariableDeclaration","src":"1498:33:39","value":{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"1518:12:39"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1512:5:39"},"nodeType":"YulFunctionCall","src":"1512:19:39"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1502:6:39","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1544:13:39","value":{"kind":"number","nodeType":"YulLiteral","src":"1553:4:39","type":"","value":"0x20"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1548:1:39","type":""}]},{"body":{"nodeType":"YulBlock","src":"1735:1666:39","statements":[{"nodeType":"YulVariableDeclaration","src":"1993:55:39","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2014:4:39","type":"","value":"0xf8"},{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2030:12:39"},{"name":"i","nodeType":"YulIdentifier","src":"2044:1:39"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2026:3:39"},"nodeType":"YulFunctionCall","src":"2026:20:39"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2020:5:39"},"nodeType":"YulFunctionCall","src":"2020:27:39"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2010:3:39"},"nodeType":"YulFunctionCall","src":"2010:38:39"},"variables":[{"name":"operation","nodeType":"YulTypedName","src":"1997:9:39","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2267:59:39","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2281:4:39","type":"","value":"0x60"},{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2297:12:39"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2315:1:39"},{"kind":"number","nodeType":"YulLiteral","src":"2318:4:39","type":"","value":"0x01"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2311:3:39"},"nodeType":"YulFunctionCall","src":"2311:12:39"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2293:3:39"},"nodeType":"YulFunctionCall","src":"2293:31:39"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2287:5:39"},"nodeType":"YulFunctionCall","src":"2287:38:39"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2277:3:39"},"nodeType":"YulFunctionCall","src":"2277:49:39"},"variables":[{"name":"to","nodeType":"YulTypedName","src":"2271:2:39","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2436:51:39","value":{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2459:12:39"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2477:1:39"},{"kind":"number","nodeType":"YulLiteral","src":"2480:4:39","type":"","value":"0x15"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2473:3:39"},"nodeType":"YulFunctionCall","src":"2473:12:39"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2455:3:39"},"nodeType":"YulFunctionCall","src":"2455:31:39"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2449:5:39"},"nodeType":"YulFunctionCall","src":"2449:38:39"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2440:5:39","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2614:56:39","value":{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2642:12:39"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2660:1:39"},{"kind":"number","nodeType":"YulLiteral","src":"2663:4:39","type":"","value":"0x35"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2656:3:39"},"nodeType":"YulFunctionCall","src":"2656:12:39"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2638:3:39"},"nodeType":"YulFunctionCall","src":"2638:31:39"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2632:5:39"},"nodeType":"YulFunctionCall","src":"2632:38:39"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"2618:10:39","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2820:43:39","value":{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2836:12:39"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2854:1:39"},{"kind":"number","nodeType":"YulLiteral","src":"2857:4:39","type":"","value":"0x55"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2850:3:39"},"nodeType":"YulFunctionCall","src":"2850:12:39"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2832:3:39"},"nodeType":"YulFunctionCall","src":"2832:31:39"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"2824:4:39","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2880:16:39","value":{"kind":"number","nodeType":"YulLiteral","src":"2895:1:39","type":"","value":"0"},"variables":[{"name":"success","nodeType":"YulTypedName","src":"2884:7:39","type":""}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"2953:97:39","statements":[{"nodeType":"YulAssignment","src":"2975:57:39","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"2991:3:39"},"nodeType":"YulFunctionCall","src":"2991:5:39"},{"name":"to","nodeType":"YulIdentifier","src":"2998:2:39"},{"name":"value","nodeType":"YulIdentifier","src":"3002:5:39"},{"name":"data","nodeType":"YulIdentifier","src":"3009:4:39"},{"name":"dataLength","nodeType":"YulIdentifier","src":"3015:10:39"},{"kind":"number","nodeType":"YulLiteral","src":"3027:1:39","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3030:1:39","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"2986:4:39"},"nodeType":"YulFunctionCall","src":"2986:46:39"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"2975:7:39"}]}]},"nodeType":"YulCase","src":"2946:104:39","value":{"kind":"number","nodeType":"YulLiteral","src":"2951:1:39","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"3135:52:39","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3164:1:39","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3167:1:39","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3157:6:39"},"nodeType":"YulFunctionCall","src":"3157:12:39"},"nodeType":"YulExpressionStatement","src":"3157:12:39"}]},"nodeType":"YulCase","src":"3128:59:39","value":{"kind":"number","nodeType":"YulLiteral","src":"3133:1:39","type":"","value":"1"}}],"expression":{"name":"operation","nodeType":"YulIdentifier","src":"2920:9:39"},"nodeType":"YulSwitch","src":"2913:274:39"},{"body":{"nodeType":"YulBlock","src":"3222:52:39","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3251:1:39","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3254:1:39","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3244:6:39"},"nodeType":"YulFunctionCall","src":"3244:12:39"},"nodeType":"YulExpressionStatement","src":"3244:12:39"}]},"condition":{"arguments":[{"name":"success","nodeType":"YulIdentifier","src":"3210:7:39"},{"kind":"number","nodeType":"YulLiteral","src":"3219:1:39","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3207:2:39"},"nodeType":"YulFunctionCall","src":"3207:14:39"},"nodeType":"YulIf","src":"3204:2:39"},{"nodeType":"YulAssignment","src":"3353:34:39","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3362:1:39"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3369:4:39","type":"","value":"0x55"},{"name":"dataLength","nodeType":"YulIdentifier","src":"3375:10:39"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3365:3:39"},"nodeType":"YulFunctionCall","src":"3365:21:39"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3358:3:39"},"nodeType":"YulFunctionCall","src":"3358:29:39"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3353:1:39"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1650:1:39"},{"name":"length","nodeType":"YulIdentifier","src":"1653:6:39"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1647:2:39"},"nodeType":"YulFunctionCall","src":"1647:13:39"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1661:73:39","statements":[]},"pre":{"nodeType":"YulBlock","src":"1574:72:39","statements":[]},"src":"1570:1831:39"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5129,"isOffset":false,"isSlot":false,"src":"1518:12:39","valueSize":1},{"declaration":5129,"isOffset":false,"isSlot":false,"src":"2030:12:39","valueSize":1},{"declaration":5129,"isOffset":false,"isSlot":false,"src":"2297:12:39","valueSize":1},{"declaration":5129,"isOffset":false,"isSlot":false,"src":"2459:12:39","valueSize":1},{"declaration":5129,"isOffset":false,"isSlot":false,"src":"2642:12:39","valueSize":1},{"declaration":5129,"isOffset":false,"isSlot":false,"src":"2836:12:39","valueSize":1}],"id":5132,"nodeType":"InlineAssembly","src":"1475:1936:39"}]},"documentation":{"id":5127,"nodeType":"StructuredDocumentation","src":"393:950:39","text":" @dev Sends multiple transactions and reverts all if one fails.\n @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\n                     operation has to be uint8(0) in this version (=> 1 byte),\n                     to as a address (=> 20 bytes),\n                     value as a uint256 (=> 32 bytes),\n                     data length as a uint256 (=> 32 bytes),\n                     data as bytes.\n                     see abi.encodePacked for more information on packed encoding\n @notice The code is for most part the same as the normal MultiSend (to keep compatibility),\n         but reverts if a transaction tries to use a delegatecall.\n @notice This method is payable as delegatecalls keep the msg.value from the previous call\n         If the calling method (e.g. execTransaction) received ETH this would revert otherwise"},"functionSelector":"8d80ff0a","id":5134,"implemented":true,"kind":"function","modifiers":[],"name":"multiSend","nodeType":"FunctionDefinition","parameters":{"id":5130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5129,"mutability":"mutable","name":"transactions","nodeType":"VariableDeclaration","scope":5134,"src":"1367:25:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5128,"name":"bytes","nodeType":"ElementaryTypeName","src":"1367:5:39","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1366:27:39"},"returnParameters":{"id":5131,"nodeType":"ParameterList","parameters":[],"src":"1409:0:39"},"scope":5135,"src":"1348:2069:39","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":5136,"src":"360:3059:39"}],"src":"42:3378:39"},"id":39},"contracts/libraries/SafeMigration.sol":{"ast":{"absolutePath":"contracts/libraries/SafeMigration.sol","exportedSymbols":{"ISafe":[5145],"SafeMigration":[5325],"SafeStorage":[5357]},"id":5326,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5137,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:40"},{"absolutePath":"contracts/libraries/SafeStorage.sol","file":"../libraries/SafeStorage.sol","id":5139,"nodeType":"ImportDirective","scope":5326,"sourceUnit":5358,"src":"75:57:40","symbolAliases":[{"foreign":{"id":5138,"name":"SafeStorage","nodeType":"Identifier","overloadedDeclarations":[],"src":"83:11:40","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":5145,"linearizedBaseContracts":[5145],"name":"ISafe","nodeType":"ContractDefinition","nodes":[{"functionSelector":"f08a0323","id":5144,"implemented":false,"kind":"function","modifiers":[],"name":"setFallbackHandler","nodeType":"FunctionDefinition","parameters":{"id":5142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5141,"mutability":"mutable","name":"handler","nodeType":"VariableDeclaration","scope":5144,"src":"184:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5140,"name":"address","nodeType":"ElementaryTypeName","src":"184:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"183:17:40"},"returnParameters":{"id":5143,"nodeType":"ParameterList","parameters":[],"src":"209:0:40"},"scope":5145,"src":"156:54:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5326,"src":"134:78:40"},{"abstract":false,"baseContracts":[{"baseName":{"id":5147,"name":"SafeStorage","nodeType":"UserDefinedTypeName","referencedDeclaration":5357,"src":"956:11:40","typeDescriptions":{"typeIdentifier":"t_contract$_SafeStorage_$5357","typeString":"contract SafeStorage"}},"id":5148,"nodeType":"InheritanceSpecifier","src":"956:11:40"}],"contractDependencies":[5357],"contractKind":"contract","documentation":{"id":5146,"nodeType":"StructuredDocumentation","src":"214:715:40","text":" @title Migration Contract for Safe Upgrade\n @notice This is a generic contract that facilitates Safe and SafeL2 proxy contracts to migrate their singleton address.\n         The supported target Safe version is immutable and set in the constructor during the deployment of the contract.\n         This contract also supports migration with fallback handler update.\n @author @safe-global/safe-protocol\n @dev IMPORTANT: The library is intended to be used with the Safe standard proxy that stores the singleton address\n      at the storage slot 0. Use at your own risk with custom proxy implementations. The contract will allow invocations\n      to the migration functions only via delegatecall."},"fullyImplemented":true,"id":5325,"linearizedBaseContracts":[5325,5357],"name":"SafeMigration","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":5149,"nodeType":"StructuredDocumentation","src":"974:51:40","text":" @notice Address of this contract"},"functionSelector":"72f7a956","id":5151,"mutability":"immutable","name":"MIGRATION_SINGLETON","nodeType":"VariableDeclaration","scope":5325,"src":"1030:44:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5150,"name":"address","nodeType":"ElementaryTypeName","src":"1030:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":5152,"nodeType":"StructuredDocumentation","src":"1080:71:40","text":" @notice Address of the Safe Singleton implementation"},"functionSelector":"caa12add","id":5154,"mutability":"immutable","name":"SAFE_SINGLETON","nodeType":"VariableDeclaration","scope":5325,"src":"1156:39:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5153,"name":"address","nodeType":"ElementaryTypeName","src":"1156:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":5155,"nodeType":"StructuredDocumentation","src":"1201:76:40","text":" @notice Address of the Safe Singleton (L2) implementation"},"functionSelector":"9bf47d6e","id":5157,"mutability":"immutable","name":"SAFE_L2_SINGLETON","nodeType":"VariableDeclaration","scope":5325,"src":"1282:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5156,"name":"address","nodeType":"ElementaryTypeName","src":"1282:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":5158,"nodeType":"StructuredDocumentation","src":"1330:58:40","text":" @notice Address of the Fallback Handler"},"functionSelector":"0d7101f7","id":5160,"mutability":"immutable","name":"SAFE_FALLBACK_HANDLER","nodeType":"VariableDeclaration","scope":5325,"src":"1393:46:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5159,"name":"address","nodeType":"ElementaryTypeName","src":"1393:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"anonymous":false,"documentation":{"id":5161,"nodeType":"StructuredDocumentation","src":"1446:167:40","text":" @notice Event indicating a change of a singleton address. Named master copy here for legacy reasons.\n @param singleton New master copy address"},"id":5165,"name":"ChangedMasterCopy","nodeType":"EventDefinition","parameters":{"id":5164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5163,"indexed":false,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":5165,"src":"1642:17:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5162,"name":"address","nodeType":"ElementaryTypeName","src":"1642:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1641:19:40"},"src":"1618:43:40"},{"body":{"id":5179,"nodeType":"Block","src":"1855:125:40","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5171,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1881:4:40","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}],"id":5170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1873:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5169,"name":"address","nodeType":"ElementaryTypeName","src":"1873:7:40","typeDescriptions":{}}},"id":5172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1873:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5173,"name":"MIGRATION_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5151,"src":"1890:19:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1873:36:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c","id":5175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1911:50:40","typeDescriptions":{"typeIdentifier":"t_stringliteral_15b78a1f3b6f5ce8c19eea2b0f8fa49566744e4d89b92aecbfade8f18a1e41e8","typeString":"literal_string \"Migration should only be called via delegatecall\""},"value":"Migration should only be called via delegatecall"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_15b78a1f3b6f5ce8c19eea2b0f8fa49566744e4d89b92aecbfade8f18a1e41e8","typeString":"literal_string \"Migration should only be called via delegatecall\""}],"id":5168,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1865:7:40","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1865:97:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5177,"nodeType":"ExpressionStatement","src":"1865:97:40"},{"id":5178,"nodeType":"PlaceholderStatement","src":"1972:1:40"}]},"documentation":{"id":5166,"nodeType":"StructuredDocumentation","src":"1667:155:40","text":" @notice Modifier to make a function callable via delegatecall only.\n If the function is called via a regular call, it will revert."},"id":5180,"name":"onlyDelegateCall","nodeType":"ModifierDefinition","parameters":{"id":5167,"nodeType":"ParameterList","parameters":[],"src":"1852:2:40"},"src":"1827:153:40","virtual":false,"visibility":"internal"},{"body":{"id":5230,"nodeType":"Block","src":"2341:424:40","statements":[{"expression":{"id":5195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5190,"name":"MIGRATION_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5151,"src":"2351:19:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5193,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2381:4:40","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}],"id":5192,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2373:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5191,"name":"address","nodeType":"ElementaryTypeName","src":"2373:7:40","typeDescriptions":{}}},"id":5194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2373:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2351:35:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5196,"nodeType":"ExpressionStatement","src":"2351:35:40"},{"expression":{"arguments":[{"arguments":[{"id":5199,"name":"safeSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"2413:13:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5198,"name":"hasCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"2405:7:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":5200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2405:22:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166652053696e676c65746f6e206973206e6f74206465706c6f796564","id":5201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2429:32:40","typeDescriptions":{"typeIdentifier":"t_stringliteral_84ee59d9bf234c2cb66d69a964e961a87aec9510a8c27d39b9ecfe326eed7e59","typeString":"literal_string \"Safe Singleton is not deployed\""},"value":"Safe Singleton is not deployed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_84ee59d9bf234c2cb66d69a964e961a87aec9510a8c27d39b9ecfe326eed7e59","typeString":"literal_string \"Safe Singleton is not deployed\""}],"id":5197,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2397:7:40","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2397:65:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5203,"nodeType":"ExpressionStatement","src":"2397:65:40"},{"expression":{"arguments":[{"arguments":[{"id":5206,"name":"safeL2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"2488:15:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5205,"name":"hasCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"2480:7:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":5207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2480:24:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166652053696e676c65746f6e20284c3229206973206e6f74206465706c6f796564","id":5208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2506:37:40","typeDescriptions":{"typeIdentifier":"t_stringliteral_75f997a654aa76af6a944dffc0f255b9298b56b5accadff398c2fefbe7d955b6","typeString":"literal_string \"Safe Singleton (L2) is not deployed\""},"value":"Safe Singleton (L2) is not deployed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_75f997a654aa76af6a944dffc0f255b9298b56b5accadff398c2fefbe7d955b6","typeString":"literal_string \"Safe Singleton (L2) is not deployed\""}],"id":5204,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2472:7:40","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2472:72:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5210,"nodeType":"ExpressionStatement","src":"2472:72:40"},{"expression":{"arguments":[{"arguments":[{"id":5213,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5187,"src":"2570:15:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5212,"name":"hasCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"2562:7:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":5214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2562:24:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"66616c6c6261636b2068616e646c6572206973206e6f74206465706c6f796564","id":5215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2588:34:40","typeDescriptions":{"typeIdentifier":"t_stringliteral_6f0fe446fb242d0b587e8b9c3b2c5278d07e700afc37d42ab36ece4018a3c496","typeString":"literal_string \"fallback handler is not deployed\""},"value":"fallback handler is not deployed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6f0fe446fb242d0b587e8b9c3b2c5278d07e700afc37d42ab36ece4018a3c496","typeString":"literal_string \"fallback handler is not deployed\""}],"id":5211,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2554:7:40","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2554:69:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5217,"nodeType":"ExpressionStatement","src":"2554:69:40"},{"expression":{"id":5220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5218,"name":"SAFE_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5154,"src":"2634:14:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5219,"name":"safeSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"2651:13:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2634:30:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5221,"nodeType":"ExpressionStatement","src":"2634:30:40"},{"expression":{"id":5224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5222,"name":"SAFE_L2_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5157,"src":"2674:17:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5223,"name":"safeL2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"2694:15:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2674:35:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5225,"nodeType":"ExpressionStatement","src":"2674:35:40"},{"expression":{"id":5228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5226,"name":"SAFE_FALLBACK_HANDLER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5160,"src":"2719:21:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5227,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5187,"src":"2743:15:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2719:39:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5229,"nodeType":"ExpressionStatement","src":"2719:39:40"}]},"documentation":{"id":5181,"nodeType":"StructuredDocumentation","src":"1986:265:40","text":" @notice Constructor\n @param safeSingleton Address of the Safe Singleton implementation\n @param safeL2Singleton Address of the SafeL2 Singleton implementation\n @param fallbackHandler Address of the fallback handler implementation"},"id":5231,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":5188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5183,"mutability":"mutable","name":"safeSingleton","nodeType":"VariableDeclaration","scope":5231,"src":"2268:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5182,"name":"address","nodeType":"ElementaryTypeName","src":"2268:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5185,"mutability":"mutable","name":"safeL2Singleton","nodeType":"VariableDeclaration","scope":5231,"src":"2291:23:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5184,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5187,"mutability":"mutable","name":"fallbackHandler","nodeType":"VariableDeclaration","scope":5231,"src":"2316:23:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5186,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2267:73:40"},"returnParameters":{"id":5189,"nodeType":"ParameterList","parameters":[],"src":"2341:0:40"},"scope":5325,"src":"2256:509:40","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5245,"nodeType":"Block","src":"2920:91:40","statements":[{"expression":{"id":5239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5237,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"2930:9:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5238,"name":"SAFE_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5154,"src":"2942:14:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2930:26:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5240,"nodeType":"ExpressionStatement","src":"2930:26:40"},{"eventCall":{"arguments":[{"id":5242,"name":"SAFE_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5154,"src":"2989:14:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5241,"name":"ChangedMasterCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5165,"src":"2971:17:40","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2971:33:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5244,"nodeType":"EmitStatement","src":"2966:38:40"}]},"documentation":{"id":5232,"nodeType":"StructuredDocumentation","src":"2771:92:40","text":" @notice Migrate the Safe contract to a new Safe Singleton implementation."},"functionSelector":"f6682ab0","id":5246,"implemented":true,"kind":"function","modifiers":[{"id":5235,"modifierName":{"id":5234,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"2903:16:40","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2903:16:40"}],"name":"migrateSingleton","nodeType":"FunctionDefinition","parameters":{"id":5233,"nodeType":"ParameterList","parameters":[],"src":"2893:2:40"},"returnParameters":{"id":5236,"nodeType":"ParameterList","parameters":[],"src":"2920:0:40"},"scope":5325,"src":"2868:143:40","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5268,"nodeType":"Block","src":"3302:116:40","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5252,"name":"migrateSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5246,"src":"3312:16:40","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3312:18:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5254,"nodeType":"ExpressionStatement","src":"3312:18:40"},{"expression":{"arguments":[{"id":5265,"name":"SAFE_FALLBACK_HANDLER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5160,"src":"3389:21:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"arguments":[{"id":5260,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3362:4:40","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}],"id":5259,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3354:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5258,"name":"address","nodeType":"ElementaryTypeName","src":"3354:7:40","typeDescriptions":{}}},"id":5261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3354:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5257,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3346:8:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":5256,"name":"address","nodeType":"ElementaryTypeName","src":"3346:8:40","stateMutability":"payable","typeDescriptions":{}}},"id":5262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3346:22:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5255,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5145,"src":"3340:5:40","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$5145_$","typeString":"type(contract ISafe)"}},"id":5263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3340:29:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5145","typeString":"contract ISafe"}},"id":5264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setFallbackHandler","nodeType":"MemberAccess","referencedDeclaration":5144,"src":"3340:48:40","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":5266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3340:71:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5267,"nodeType":"ExpressionStatement","src":"3340:71:40"}]},"documentation":{"id":5247,"nodeType":"StructuredDocumentation","src":"3017:216:40","text":" @notice Migrate to Safe Singleton and set the fallback handler. This function is intended to be used when migrating\n         a Safe to a version which also requires updating fallback handler."},"functionSelector":"ed007fc6","id":5269,"implemented":true,"kind":"function","modifiers":[{"id":5250,"modifierName":{"id":5249,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"3285:16:40","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3285:16:40"}],"name":"migrateWithFallbackHandler","nodeType":"FunctionDefinition","parameters":{"id":5248,"nodeType":"ParameterList","parameters":[],"src":"3273:2:40"},"returnParameters":{"id":5251,"nodeType":"ParameterList","parameters":[],"src":"3302:0:40"},"scope":5325,"src":"3238:180:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5283,"nodeType":"Block","src":"3580:97:40","statements":[{"expression":{"id":5277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5275,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"3590:9:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5276,"name":"SAFE_L2_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5157,"src":"3602:17:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3590:29:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5278,"nodeType":"ExpressionStatement","src":"3590:29:40"},{"eventCall":{"arguments":[{"id":5280,"name":"SAFE_L2_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5157,"src":"3652:17:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5279,"name":"ChangedMasterCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5165,"src":"3634:17:40","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3634:36:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5282,"nodeType":"EmitStatement","src":"3629:41:40"}]},"documentation":{"id":5270,"nodeType":"StructuredDocumentation","src":"3424:97:40","text":" @notice Migrate the Safe contract to a new Safe Singleton (L2) implementation."},"functionSelector":"07f464a4","id":5284,"implemented":true,"kind":"function","modifiers":[{"id":5273,"modifierName":{"id":5272,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"3563:16:40","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3563:16:40"}],"name":"migrateL2Singleton","nodeType":"FunctionDefinition","parameters":{"id":5271,"nodeType":"ParameterList","parameters":[],"src":"3553:2:40"},"returnParameters":{"id":5274,"nodeType":"ParameterList","parameters":[],"src":"3580:0:40"},"scope":5325,"src":"3526:151:40","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5306,"nodeType":"Block","src":"3975:118:40","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5290,"name":"migrateL2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5284,"src":"3985:18:40","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3985:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5292,"nodeType":"ExpressionStatement","src":"3985:20:40"},{"expression":{"arguments":[{"id":5303,"name":"SAFE_FALLBACK_HANDLER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5160,"src":"4064:21:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"arguments":[{"id":5298,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4037:4:40","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeMigration_$5325","typeString":"contract SafeMigration"}],"id":5297,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4029:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5296,"name":"address","nodeType":"ElementaryTypeName","src":"4029:7:40","typeDescriptions":{}}},"id":5299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4029:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4021:8:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":5294,"name":"address","nodeType":"ElementaryTypeName","src":"4021:8:40","stateMutability":"payable","typeDescriptions":{}}},"id":5300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4021:22:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5293,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5145,"src":"4015:5:40","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$5145_$","typeString":"type(contract ISafe)"}},"id":5301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4015:29:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5145","typeString":"contract ISafe"}},"id":5302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setFallbackHandler","nodeType":"MemberAccess","referencedDeclaration":5144,"src":"4015:48:40","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":5304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4015:71:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5305,"nodeType":"ExpressionStatement","src":"4015:71:40"}]},"documentation":{"id":5285,"nodeType":"StructuredDocumentation","src":"3683:221:40","text":" @notice Migrate to Safe Singleton (L2) and set the fallback handler. This function is intended to be used when migrating\n         a Safe to a version which also requires updating fallback handler."},"functionSelector":"68cb3d94","id":5307,"implemented":true,"kind":"function","modifiers":[{"id":5288,"modifierName":{"id":5287,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"3958:16:40","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3958:16:40"}],"name":"migrateL2WithFallbackHandler","nodeType":"FunctionDefinition","parameters":{"id":5286,"nodeType":"ParameterList","parameters":[],"src":"3946:2:40"},"returnParameters":{"id":5289,"nodeType":"ParameterList","parameters":[],"src":"3975:0:40"},"scope":5325,"src":"3909:184:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5323,"nodeType":"Block","src":"4594:265:40","statements":[{"assignments":[5316],"declarations":[{"constant":false,"id":5316,"mutability":"mutable","name":"size","nodeType":"VariableDeclaration","scope":5323,"src":"4604:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5315,"name":"uint256","nodeType":"ElementaryTypeName","src":"4604:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5317,"nodeType":"VariableDeclarationStatement","src":"4604:12:40"},{"AST":{"nodeType":"YulBlock","src":"4727:52:40","statements":[{"nodeType":"YulAssignment","src":"4741:28:40","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"4761:7:40"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"4749:11:40"},"nodeType":"YulFunctionCall","src":"4749:20:40"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"4741:4:40"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5310,"isOffset":false,"isSlot":false,"src":"4761:7:40","valueSize":1},{"declaration":5316,"isOffset":false,"isSlot":false,"src":"4741:4:40","valueSize":1}],"id":5318,"nodeType":"InlineAssembly","src":"4718:61:40"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5319,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5316,"src":"4844:4:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4851:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4844:8:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5314,"id":5322,"nodeType":"Return","src":"4837:15:40"}]},"documentation":{"id":5308,"nodeType":"StructuredDocumentation","src":"4099:427:40","text":" @notice Checks whether an account has code.\n @param account The address of the account to be checked.\n @return A boolean value indicating whether the address has code (true) or not (false).\n @dev This function relies on the `extcodesize` assembly opcode to determine whether an address has code.\n It does not reliably determine whether or not an address is a smart contract or an EOA."},"id":5324,"implemented":true,"kind":"function","modifiers":[],"name":"hasCode","nodeType":"FunctionDefinition","parameters":{"id":5311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5310,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":5324,"src":"4548:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5309,"name":"address","nodeType":"ElementaryTypeName","src":"4548:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4547:17:40"},"returnParameters":{"id":5314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5313,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5324,"src":"4588:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5312,"name":"bool","nodeType":"ElementaryTypeName","src":"4588:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4587:6:40"},"scope":5325,"src":"4531:328:40","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5326,"src":"930:3931:40"}],"src":"42:4820:40"},"id":40},"contracts/libraries/SafeStorage.sol":{"ast":{"absolutePath":"contracts/libraries/SafeStorage.sol","exportedSymbols":{"SafeStorage":[5357]},"id":5358,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5327,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:41"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":5328,"nodeType":"StructuredDocumentation","src":"75:222:41","text":" @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\n @dev Should be always the first base contract of a library that is used with a Safe.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":5357,"linearizedBaseContracts":[5357],"name":"SafeStorage","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":5330,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":5357,"src":"359:26:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5329,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5334,"mutability":"mutable","name":"modules","nodeType":"VariableDeclaration","scope":5357,"src":"429:44:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"typeName":{"id":5333,"keyType":{"id":5331,"name":"address","nodeType":"ElementaryTypeName","src":"437:7:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"429:27:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"valueType":{"id":5332,"name":"address","nodeType":"ElementaryTypeName","src":"448:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":5338,"mutability":"mutable","name":"owners","nodeType":"VariableDeclaration","scope":5357,"src":"516:43:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"typeName":{"id":5337,"keyType":{"id":5335,"name":"address","nodeType":"ElementaryTypeName","src":"524:7:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"516:27:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"valueType":{"id":5336,"name":"address","nodeType":"ElementaryTypeName","src":"535:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":5340,"mutability":"mutable","name":"ownerCount","nodeType":"VariableDeclaration","scope":5357,"src":"565:27:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5339,"name":"uint256","nodeType":"ElementaryTypeName","src":"565:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5342,"mutability":"mutable","name":"threshold","nodeType":"VariableDeclaration","scope":5357,"src":"598:26:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5341,"name":"uint256","nodeType":"ElementaryTypeName","src":"598:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5344,"mutability":"mutable","name":"nonce","nodeType":"VariableDeclaration","scope":5357,"src":"653:22:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5343,"name":"uint256","nodeType":"ElementaryTypeName","src":"653:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5346,"mutability":"mutable","name":"_deprecatedDomainSeparator","nodeType":"VariableDeclaration","scope":5357,"src":"681:43:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"681:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5350,"mutability":"mutable","name":"signedMessages","nodeType":"VariableDeclaration","scope":5357,"src":"730:51:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":5349,"keyType":{"id":5347,"name":"bytes32","nodeType":"ElementaryTypeName","src":"738:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"730:27:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":5348,"name":"uint256","nodeType":"ElementaryTypeName","src":"749:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":5356,"mutability":"mutable","name":"approvedHashes","nodeType":"VariableDeclaration","scope":5357,"src":"787:71:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(address => mapping(bytes32 => uint256))"},"typeName":{"id":5355,"keyType":{"id":5351,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"787:47:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(address => mapping(bytes32 => uint256))"},"valueType":{"id":5354,"keyType":{"id":5352,"name":"bytes32","nodeType":"ElementaryTypeName","src":"814:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"806:27:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":5353,"name":"uint256","nodeType":"ElementaryTypeName","src":"825:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"}],"scope":5358,"src":"298:563:41"}],"src":"42:820:41"},"id":41},"contracts/libraries/SafeToL2Migration.sol":{"ast":{"absolutePath":"contracts/libraries/SafeToL2Migration.sol","exportedSymbols":{"Enum":[3717],"ISafe":[5374],"SafeStorage":[5357],"SafeToL2Migration":[5797]},"id":5798,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5359,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"86:31:42"},{"absolutePath":"contracts/libraries/SafeStorage.sol","file":"../libraries/SafeStorage.sol","id":5361,"nodeType":"ImportDirective","scope":5798,"sourceUnit":5358,"src":"119:57:42","symbolAliases":[{"foreign":{"id":5360,"name":"SafeStorage","nodeType":"Identifier","overloadedDeclarations":[],"src":"127:11:42","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/common/Enum.sol","file":"../common/Enum.sol","id":5363,"nodeType":"ImportDirective","scope":5798,"sourceUnit":3718,"src":"177:40:42","symbolAliases":[{"foreign":{"id":5362,"name":"Enum","nodeType":"Identifier","overloadedDeclarations":[],"src":"185:4:42","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":5374,"linearizedBaseContracts":[5374],"name":"ISafe","nodeType":"ContractDefinition","nodes":[{"functionSelector":"ffa1ad74","id":5368,"implemented":false,"kind":"function","modifiers":[],"name":"VERSION","nodeType":"FunctionDefinition","parameters":{"id":5364,"nodeType":"ParameterList","parameters":[],"src":"290:2:42"},"returnParameters":{"id":5367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5366,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5368,"src":"316:13:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5365,"name":"string","nodeType":"ElementaryTypeName","src":"316:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"315:15:42"},"scope":5374,"src":"274:57:42","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f08a0323","id":5373,"implemented":false,"kind":"function","modifiers":[],"name":"setFallbackHandler","nodeType":"FunctionDefinition","parameters":{"id":5371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5370,"mutability":"mutable","name":"handler","nodeType":"VariableDeclaration","scope":5373,"src":"365:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5369,"name":"address","nodeType":"ElementaryTypeName","src":"365:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"364:17:42"},"returnParameters":{"id":5372,"nodeType":"ParameterList","parameters":[],"src":"390:0:42"},"scope":5374,"src":"337:54:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5798,"src":"219:174:42"},{"abstract":false,"baseContracts":[{"baseName":{"id":5376,"name":"SafeStorage","nodeType":"UserDefinedTypeName","referencedDeclaration":5357,"src":"915:11:42","typeDescriptions":{"typeIdentifier":"t_contract$_SafeStorage_$5357","typeString":"contract SafeStorage"}},"id":5377,"nodeType":"InheritanceSpecifier","src":"915:11:42"}],"contractDependencies":[5357],"contractKind":"contract","documentation":{"id":5375,"nodeType":"StructuredDocumentation","src":"395:489:42","text":" @title Migration Contract for updating a Safe from 1.1.1/1.3.0/1.4.1 versions to a L2 version. Useful when replaying a Safe from a non L2 network in a L2 network.\n @notice This contract facilitates the migration of a Safe contract from version 1.1.1 to 1.3.0/1.4.1 L2, 1.3.0 to 1.3.0L2 or from 1.4.1 to 1.4.1L2\n         Other versions are not supported\n @dev IMPORTANT: The migration will only work with proxies that store the implementation address in the storage slot 0."},"fullyImplemented":true,"id":5797,"linearizedBaseContracts":[5797,5357],"name":"SafeToL2Migration","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"72f7a956","id":5379,"mutability":"immutable","name":"MIGRATION_SINGLETON","nodeType":"VariableDeclaration","scope":5797,"src":"965:44:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5378,"name":"address","nodeType":"ElementaryTypeName","src":"965:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":5390,"nodeType":"Block","src":"1153:52:42","statements":[{"expression":{"id":5388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5383,"name":"MIGRATION_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"1163:19:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5386,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1193:4:42","typeDescriptions":{"typeIdentifier":"t_contract$_SafeToL2Migration_$5797","typeString":"contract SafeToL2Migration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeToL2Migration_$5797","typeString":"contract SafeToL2Migration"}],"id":5385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1185:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5384,"name":"address","nodeType":"ElementaryTypeName","src":"1185:7:42","typeDescriptions":{}}},"id":5387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1185:13:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1163:35:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5389,"nodeType":"ExpressionStatement","src":"1163:35:42"}]},"documentation":{"id":5380,"nodeType":"StructuredDocumentation","src":"1016:118:42","text":" @notice Constructor\n @dev Initializes the migrationSingleton with the contract's own address."},"id":5391,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":5381,"nodeType":"ParameterList","parameters":[],"src":"1150:2:42"},"returnParameters":{"id":5382,"nodeType":"ParameterList","parameters":[],"src":"1153:0:42"},"scope":5797,"src":"1139:66:42","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"anonymous":false,"documentation":{"id":5392,"nodeType":"StructuredDocumentation","src":"1211:124:42","text":" @notice Event indicating a change of master copy address.\n @param singleton New master copy address"},"id":5396,"name":"ChangedMasterCopy","nodeType":"EventDefinition","parameters":{"id":5395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5394,"indexed":false,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":5396,"src":"1364:17:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5393,"name":"address","nodeType":"ElementaryTypeName","src":"1364:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1363:19:42"},"src":"1340:43:42"},{"anonymous":false,"id":5409,"name":"SafeSetup","nodeType":"EventDefinition","parameters":{"id":5408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5398,"indexed":true,"mutability":"mutable","name":"initiator","nodeType":"VariableDeclaration","scope":5409,"src":"1405:25:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5397,"name":"address","nodeType":"ElementaryTypeName","src":"1405:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5401,"indexed":false,"mutability":"mutable","name":"owners","nodeType":"VariableDeclaration","scope":5409,"src":"1432:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5399,"name":"address","nodeType":"ElementaryTypeName","src":"1432:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5400,"nodeType":"ArrayTypeName","src":"1432:9:42","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":5403,"indexed":false,"mutability":"mutable","name":"threshold","nodeType":"VariableDeclaration","scope":5409,"src":"1450:17:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5402,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5405,"indexed":false,"mutability":"mutable","name":"initializer","nodeType":"VariableDeclaration","scope":5409,"src":"1469:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5404,"name":"address","nodeType":"ElementaryTypeName","src":"1469:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5407,"indexed":false,"mutability":"mutable","name":"fallbackHandler","nodeType":"VariableDeclaration","scope":5409,"src":"1490:23:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5406,"name":"address","nodeType":"ElementaryTypeName","src":"1490:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1404:110:42"},"src":"1389:126:42"},{"anonymous":false,"id":5433,"name":"SafeMultiSigTransaction","nodeType":"EventDefinition","parameters":{"id":5432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5411,"indexed":false,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":5433,"src":"1560:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5410,"name":"address","nodeType":"ElementaryTypeName","src":"1560:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5413,"indexed":false,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":5433,"src":"1580:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5412,"name":"uint256","nodeType":"ElementaryTypeName","src":"1580:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5415,"indexed":false,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":5433,"src":"1603:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5414,"name":"bytes","nodeType":"ElementaryTypeName","src":"1603:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5417,"indexed":false,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":5433,"src":"1623:24:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},"typeName":{"id":5416,"name":"Enum.Operation","nodeType":"UserDefinedTypeName","referencedDeclaration":3716,"src":"1623:14:42","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},"visibility":"internal"},{"constant":false,"id":5419,"indexed":false,"mutability":"mutable","name":"safeTxGas","nodeType":"VariableDeclaration","scope":5433,"src":"1657:17:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5418,"name":"uint256","nodeType":"ElementaryTypeName","src":"1657:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5421,"indexed":false,"mutability":"mutable","name":"baseGas","nodeType":"VariableDeclaration","scope":5433,"src":"1684:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5420,"name":"uint256","nodeType":"ElementaryTypeName","src":"1684:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5423,"indexed":false,"mutability":"mutable","name":"gasPrice","nodeType":"VariableDeclaration","scope":5433,"src":"1709:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5422,"name":"uint256","nodeType":"ElementaryTypeName","src":"1709:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5425,"indexed":false,"mutability":"mutable","name":"gasToken","nodeType":"VariableDeclaration","scope":5433,"src":"1735:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5424,"name":"address","nodeType":"ElementaryTypeName","src":"1735:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5427,"indexed":false,"mutability":"mutable","name":"refundReceiver","nodeType":"VariableDeclaration","scope":5433,"src":"1761:30:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":5426,"name":"address","nodeType":"ElementaryTypeName","src":"1761:15:42","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":5429,"indexed":false,"mutability":"mutable","name":"signatures","nodeType":"VariableDeclaration","scope":5433,"src":"1801:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5428,"name":"bytes","nodeType":"ElementaryTypeName","src":"1801:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5431,"indexed":false,"mutability":"mutable","name":"additionalInfo","nodeType":"VariableDeclaration","scope":5433,"src":"2003:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5430,"name":"bytes","nodeType":"ElementaryTypeName","src":"2003:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1550:479:42"},"src":"1521:509:42"},{"body":{"id":5447,"nodeType":"Block","src":"2224:125:42","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5439,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2250:4:42","typeDescriptions":{"typeIdentifier":"t_contract$_SafeToL2Migration_$5797","typeString":"contract SafeToL2Migration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeToL2Migration_$5797","typeString":"contract SafeToL2Migration"}],"id":5438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2242:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5437,"name":"address","nodeType":"ElementaryTypeName","src":"2242:7:42","typeDescriptions":{}}},"id":5440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2242:13:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5441,"name":"MIGRATION_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"2259:19:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2242:36:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c","id":5443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2280:50:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_15b78a1f3b6f5ce8c19eea2b0f8fa49566744e4d89b92aecbfade8f18a1e41e8","typeString":"literal_string \"Migration should only be called via delegatecall\""},"value":"Migration should only be called via delegatecall"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_15b78a1f3b6f5ce8c19eea2b0f8fa49566744e4d89b92aecbfade8f18a1e41e8","typeString":"literal_string \"Migration should only be called via delegatecall\""}],"id":5436,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2234:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2234:97:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5445,"nodeType":"ExpressionStatement","src":"2234:97:42"},{"id":5446,"nodeType":"PlaceholderStatement","src":"2341:1:42"}]},"documentation":{"id":5434,"nodeType":"StructuredDocumentation","src":"2036:155:42","text":" @notice Modifier to make a function callable via delegatecall only.\n If the function is called via a regular call, it will revert."},"id":5448,"name":"onlyDelegateCall","nodeType":"ModifierDefinition","parameters":{"id":5435,"nodeType":"ParameterList","parameters":[],"src":"2221:2:42"},"src":"2196:153:42","virtual":false,"visibility":"internal"},{"body":{"id":5459,"nodeType":"Block","src":"2513:177:42","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5452,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5344,"src":"2623:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":5453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2632:1:42","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2623:10:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665206d7573742068617665206e6f7420657865637574656420616e79207478","id":5455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2635:36:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_b0e3decb9a6d33b925edb996a8f3c6042a3c1eccb7d98c013e5d874314a96f46","typeString":"literal_string \"Safe must have not executed any tx\""},"value":"Safe must have not executed any tx"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b0e3decb9a6d33b925edb996a8f3c6042a3c1eccb7d98c013e5d874314a96f46","typeString":"literal_string \"Safe must have not executed any tx\""}],"id":5451,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2615:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2615:57:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5457,"nodeType":"ExpressionStatement","src":"2615:57:42"},{"id":5458,"nodeType":"PlaceholderStatement","src":"2682:1:42"}]},"documentation":{"id":5449,"nodeType":"StructuredDocumentation","src":"2355:128:42","text":" @notice Modifier to prevent using initialized Safes.\n If Safe has a nonce higher than 0, it will revert"},"id":5460,"name":"onlyNonceZero","nodeType":"ModifierDefinition","parameters":{"id":5450,"nodeType":"ParameterList","parameters":[],"src":"2510:2:42"},"src":"2488:202:42","virtual":false,"visibility":"internal"},{"body":{"id":5511,"nodeType":"Block","src":"2906:628:42","statements":[{"expression":{"id":5470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5468,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"2916:9:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5469,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"2928:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2916:23:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5471,"nodeType":"ExpressionStatement","src":"2916:23:42"},{"assignments":[5473],"declarations":[{"constant":false,"id":5473,"mutability":"mutable","name":"additionalInfo","nodeType":"VariableDeclaration","scope":5511,"src":"2993:27:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5472,"name":"bytes","nodeType":"ElementaryTypeName","src":"2993:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5481,"initialValue":{"arguments":[{"hexValue":"30","id":5476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3034:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":5477,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3037:3:42","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3037:10:42","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":5479,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"3049:9:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5474,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3023:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"3023:10:42","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3023:36:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2993:66:42"},{"eventCall":{"arguments":[{"id":5483,"name":"MIGRATION_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"3194:19:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":5484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":5485,"name":"functionData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5465,"src":"3242:12:42","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"expression":{"id":5486,"name":"Enum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"3268:4:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Enum_$3717_$","typeString":"type(contract Enum)"}},"id":5487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"Operation","nodeType":"MemberAccess","referencedDeclaration":3716,"src":"3268:14:42","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Operation_$3716_$","typeString":"type(enum Enum.Operation)"}},"id":5488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"DelegateCall","nodeType":"MemberAccess","src":"3268:27:42","typeDescriptions":{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"}},{"hexValue":"30","id":5489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3309:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":5490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3324:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":5491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3339:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":5494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3362:1:42","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":5493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3354:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5492,"name":"address","nodeType":"ElementaryTypeName","src":"3354:7:42","typeDescriptions":{}}},"id":5495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3354:10:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"arguments":[{"arguments":[{"hexValue":"30","id":5500,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3394:1:42","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":5499,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5498,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:42","typeDescriptions":{}}},"id":5501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3386:10:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5497,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3378:8:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":5496,"name":"address","nodeType":"ElementaryTypeName","src":"3378:8:42","stateMutability":"payable","typeDescriptions":{}}},"id":5502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3378:19:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"hexValue":"","id":5503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3411:2:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":5504,"name":"additionalInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5473,"src":"3458:14:42","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_enum$_Operation_$3716","typeString":"enum Enum.Operation"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5482,"name":"SafeMultiSigTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5433,"src":"3157:23:42","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$3716_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_payable_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address payable,bytes memory,bytes memory)"}},"id":5505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3157:325:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5506,"nodeType":"EmitStatement","src":"3152:330:42"},{"eventCall":{"arguments":[{"id":5508,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"3515:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5507,"name":"ChangedMasterCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5396,"src":"3497:17:42","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3497:30:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5510,"nodeType":"EmitStatement","src":"3492:35:42"}]},"documentation":{"id":5461,"nodeType":"StructuredDocumentation","src":"2696:132:42","text":" @dev Internal function with common migration steps, changes the singleton and emits SafeMultiSigTransaction event"},"id":5512,"implemented":true,"kind":"function","modifiers":[],"name":"migrate","nodeType":"FunctionDefinition","parameters":{"id":5466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5463,"mutability":"mutable","name":"l2Singleton","nodeType":"VariableDeclaration","scope":5512,"src":"2850:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5462,"name":"address","nodeType":"ElementaryTypeName","src":"2850:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5465,"mutability":"mutable","name":"functionData","nodeType":"VariableDeclaration","scope":5512,"src":"2871:25:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5464,"name":"bytes","nodeType":"ElementaryTypeName","src":"2871:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2849:48:42"},"returnParameters":{"id":5467,"nodeType":"ParameterList","parameters":[],"src":"2906:0:42"},"scope":5797,"src":"2833:701:42","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":5600,"nodeType":"Block","src":"3997:977:42","statements":[{"assignments":[5523],"declarations":[{"constant":false,"id":5523,"mutability":"mutable","name":"_singleton","nodeType":"VariableDeclaration","scope":5600,"src":"4007:18:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5522,"name":"address","nodeType":"ElementaryTypeName","src":"4007:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5525,"initialValue":{"id":5524,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"4028:9:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4007:30:42"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5527,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5523,"src":"4055:10:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5528,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5515,"src":"4069:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4055:25:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666520697320616c7265616479207573696e67207468652073696e676c65746f6e","id":5530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4082:37:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_0b4076fa24c959dfee48e30b00fd306326d578bb189a83b34b1aa738e13bd18d","typeString":"literal_string \"Safe is already using the singleton\""},"value":"Safe is already using the singleton"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0b4076fa24c959dfee48e30b00fd306326d578bb189a83b34b1aa738e13bd18d","typeString":"literal_string \"Safe is already using the singleton\""}],"id":5526,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4047:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4047:73:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5532,"nodeType":"ExpressionStatement","src":"4047:73:42"},{"assignments":[5534],"declarations":[{"constant":false,"id":5534,"mutability":"mutable","name":"oldSingletonVersion","nodeType":"VariableDeclaration","scope":5600,"src":"4130:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5533,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4130:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5545,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":5539,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5523,"src":"4193:10:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5538,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5374,"src":"4187:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$5374_$","typeString":"type(contract ISafe)"}},"id":5540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4187:17:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"}},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"VERSION","nodeType":"MemberAccess","referencedDeclaration":5368,"src":"4187:25:42","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4187:27:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":5536,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4170:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5537,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"4170:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4170:45:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5535,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4160:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4160:56:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4130:86:42"},{"assignments":[5547],"declarations":[{"constant":false,"id":5547,"mutability":"mutable","name":"newSingletonVersion","nodeType":"VariableDeclaration","scope":5600,"src":"4226:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4226:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5558,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":5552,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5515,"src":"4289:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5551,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5374,"src":"4283:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$5374_$","typeString":"type(contract ISafe)"}},"id":5553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4283:18:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"}},"id":5554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"VERSION","nodeType":"MemberAccess","referencedDeclaration":5368,"src":"4283:26:42","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":5555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4283:28:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":5549,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4266:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"4266:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4266:46:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5548,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4256:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4256:57:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4226:87:42"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":5562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5560,"name":"oldSingletonVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5534,"src":"4332:19:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5561,"name":"newSingletonVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5547,"src":"4355:19:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4332:42:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c322073696e676c65746f6e206d757374206d617463682063757272656e742076657273696f6e2073696e676c65746f6e","id":5563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4376:51:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_9dc9a10edab1874abef9a9c77005f5a05ad475d8be3baa69a3d577fe20976bdc","typeString":"literal_string \"L2 singleton must match current version singleton\""},"value":"L2 singleton must match current version singleton"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9dc9a10edab1874abef9a9c77005f5a05ad475d8be3baa69a3d577fe20976bdc","typeString":"literal_string \"L2 singleton must match current version singleton\""}],"id":5559,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4324:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4324:104:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5565,"nodeType":"ExpressionStatement","src":"4324:104:42"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":5574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5567,"name":"newSingletonVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5547,"src":"4580:19:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"hexValue":"312e332e30","id":5571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4630:7:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a08c3e203132c561752255a4d52ffae85bb9c5d33cb3291520dea1b84356389","typeString":"literal_string \"1.3.0\""},"value":"1.3.0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6a08c3e203132c561752255a4d52ffae85bb9c5d33cb3291520dea1b84356389","typeString":"literal_string \"1.3.0\""}],"expression":{"id":5569,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4613:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"4613:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4613:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5568,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4603:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4603:36:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4580:59:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":5582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5575,"name":"newSingletonVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5547,"src":"4643:19:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"hexValue":"312e342e31","id":5579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4693:7:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_7015c1a48403d132ad83884b326109f1b309c42f752b2abd1db79522ee074673","typeString":"literal_string \"1.4.1\""},"value":"1.4.1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7015c1a48403d132ad83884b326109f1b309c42f752b2abd1db79522ee074673","typeString":"literal_string \"1.4.1\""}],"expression":{"id":5577,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4676:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"4676:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4676:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5576,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4666:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4666:36:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4643:59:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4580:122:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"50726f76696465642073696e676c65746f6e2076657273696f6e206973206e6f7420737570706f72746564","id":5584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4716:45:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_7e6daceb567f95bea6657cbbf48177e5396c012dd13311882189d6fc154ba686","typeString":"literal_string \"Provided singleton version is not supported\""},"value":"Provided singleton version is not supported"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7e6daceb567f95bea6657cbbf48177e5396c012dd13311882189d6fc154ba686","typeString":"literal_string \"Provided singleton version is not supported\""}],"id":5566,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4559:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4559:212:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5586,"nodeType":"ExpressionStatement","src":"4559:212:42"},{"assignments":[5588],"declarations":[{"constant":false,"id":5588,"mutability":"mutable","name":"functionData","nodeType":"VariableDeclaration","scope":5600,"src":"4848:25:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5587,"name":"bytes","nodeType":"ElementaryTypeName","src":"4848:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5594,"initialValue":{"arguments":[{"hexValue":"30786566323632346165","id":5591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4899:10:42","typeDescriptions":{"typeIdentifier":"t_rational_4012254382_by_1","typeString":"int_const 4012254382"},"value":"0xef2624ae"},{"id":5592,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5515,"src":"4911:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_4012254382_by_1","typeString":"int_const 4012254382"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5589,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4876:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4876:22:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":5593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4876:47:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4848:75:42"},{"expression":{"arguments":[{"id":5596,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5515,"src":"4941:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5597,"name":"functionData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5588,"src":"4954:12:42","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":5595,"name":"migrate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5512,"src":"4933:7:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":5598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4933:34:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5599,"nodeType":"ExpressionStatement","src":"4933:34:42"}]},"documentation":{"id":5513,"nodeType":"StructuredDocumentation","src":"3540:370:42","text":" @notice Migrate from Safe 1.3.0/1.4.1 Singleton (L1) to the same version provided L2 singleton\n Safe is required to have nonce 0 so backend can support it after the migration\n @dev This function should only be called via a delegatecall to perform the upgrade.\n Singletons versions will be compared, so it implies that contracts exist"},"functionSelector":"ef2624ae","id":5601,"implemented":true,"kind":"function","modifiers":[{"id":5518,"modifierName":{"id":5517,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5448,"src":"3966:16:42","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3966:16:42"},{"id":5520,"modifierName":{"id":5519,"name":"onlyNonceZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5460,"src":"3983:13:42","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3983:13:42"}],"name":"migrateToL2","nodeType":"FunctionDefinition","parameters":{"id":5516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5515,"mutability":"mutable","name":"l2Singleton","nodeType":"VariableDeclaration","scope":5601,"src":"3936:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5514,"name":"address","nodeType":"ElementaryTypeName","src":"3936:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3935:21:42"},"returnParameters":{"id":5521,"nodeType":"ParameterList","parameters":[],"src":"3997:0:42"},"scope":5797,"src":"3915:1059:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5720,"nodeType":"Block","src":"5533:1159:42","statements":[{"expression":{"arguments":[{"arguments":[{"id":5615,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"5562:15:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5614,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5738,"src":"5551:10:42","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":5616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5551:27:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"66616c6c6261636b48616e646c6572206973206e6f74206120636f6e7472616374","id":5617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5580:35:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_31f454e636bf23bd4e937292dcde92832e9c4d775e936c60a66a0fb9022cabb9","typeString":"literal_string \"fallbackHandler is not a contract\""},"value":"fallbackHandler is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31f454e636bf23bd4e937292dcde92832e9c4d775e936c60a66a0fb9022cabb9","typeString":"literal_string \"fallbackHandler is not a contract\""}],"id":5613,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5543:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5543:73:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5619,"nodeType":"ExpressionStatement","src":"5543:73:42"},{"assignments":[5621],"declarations":[{"constant":false,"id":5621,"mutability":"mutable","name":"oldSingletonVersion","nodeType":"VariableDeclaration","scope":5720,"src":"5627:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5620,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5627:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5632,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":5626,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"5690:9:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5625,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5374,"src":"5684:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$5374_$","typeString":"type(contract ISafe)"}},"id":5627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5684:16:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"}},"id":5628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"VERSION","nodeType":"MemberAccess","referencedDeclaration":5368,"src":"5684:24:42","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":5629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5684:26:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":5623,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5667:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5624,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5667:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5667:44:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5622,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5657:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5657:55:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5627:85:42"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":5641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5634,"name":"oldSingletonVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5621,"src":"5730:19:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"hexValue":"312e312e31","id":5638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5780:7:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_9dd6d964e72a376a8989d1d2720ab48ff4f2ad77466fb517dabc84f4a79478d4","typeString":"literal_string \"1.1.1\""},"value":"1.1.1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9dd6d964e72a376a8989d1d2720ab48ff4f2ad77466fb517dabc84f4a79478d4","typeString":"literal_string \"1.1.1\""}],"expression":{"id":5636,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5763:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5763:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5763:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5635,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5753:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5753:36:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5730:59:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"50726f76696465642073696e676c65746f6e2076657273696f6e206973206e6f7420737570706f72746564","id":5642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5791:45:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_7e6daceb567f95bea6657cbbf48177e5396c012dd13311882189d6fc154ba686","typeString":"literal_string \"Provided singleton version is not supported\""},"value":"Provided singleton version is not supported"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7e6daceb567f95bea6657cbbf48177e5396c012dd13311882189d6fc154ba686","typeString":"literal_string \"Provided singleton version is not supported\""}],"id":5633,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5722:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5722:115:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5644,"nodeType":"ExpressionStatement","src":"5722:115:42"},{"assignments":[5646],"declarations":[{"constant":false,"id":5646,"mutability":"mutable","name":"newSingletonVersion","nodeType":"VariableDeclaration","scope":5720,"src":"5848:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5645,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5848:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5657,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":5651,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5604,"src":"5911:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5650,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5374,"src":"5905:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$5374_$","typeString":"type(contract ISafe)"}},"id":5652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5905:18:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"}},"id":5653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"VERSION","nodeType":"MemberAccess","referencedDeclaration":5368,"src":"5905:26:42","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":5654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5905:28:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":5648,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5888:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5649,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5888:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5888:46:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5647,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5878:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5878:57:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5848:87:42"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":5666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5659,"name":"newSingletonVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5646,"src":"5966:19:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"hexValue":"312e332e30","id":5663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6016:7:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a08c3e203132c561752255a4d52ffae85bb9c5d33cb3291520dea1b84356389","typeString":"literal_string \"1.3.0\""},"value":"1.3.0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6a08c3e203132c561752255a4d52ffae85bb9c5d33cb3291520dea1b84356389","typeString":"literal_string \"1.3.0\""}],"expression":{"id":5661,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5999:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5662,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5999:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5999:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5660,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5989:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5989:36:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5966:59:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":5674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5667,"name":"newSingletonVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5646,"src":"6029:19:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"hexValue":"312e342e31","id":5671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6079:7:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_7015c1a48403d132ad83884b326109f1b309c42f752b2abd1db79522ee074673","typeString":"literal_string \"1.4.1\""},"value":"1.4.1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7015c1a48403d132ad83884b326109f1b309c42f752b2abd1db79522ee074673","typeString":"literal_string \"1.4.1\""}],"expression":{"id":5669,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6062:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"6062:16:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6062:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5668,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6052:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6052:36:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6029:59:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5966:122:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"50726f76696465642073696e676c65746f6e2076657273696f6e206973206e6f7420737570706f72746564","id":5676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6102:45:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_7e6daceb567f95bea6657cbbf48177e5396c012dd13311882189d6fc154ba686","typeString":"literal_string \"Provided singleton version is not supported\""},"value":"Provided singleton version is not supported"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7e6daceb567f95bea6657cbbf48177e5396c012dd13311882189d6fc154ba686","typeString":"literal_string \"Provided singleton version is not supported\""}],"id":5658,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5945:7:42","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5945:212:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5678,"nodeType":"ExpressionStatement","src":"5945:212:42"},{"assignments":[5680],"declarations":[{"constant":false,"id":5680,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":5720,"src":"6168:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"},"typeName":{"id":5679,"name":"ISafe","nodeType":"UserDefinedTypeName","referencedDeclaration":5374,"src":"6168:5:42","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"}},"visibility":"internal"}],"id":5687,"initialValue":{"arguments":[{"arguments":[{"id":5684,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6195:4:42","typeDescriptions":{"typeIdentifier":"t_contract$_SafeToL2Migration_$5797","typeString":"contract SafeToL2Migration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeToL2Migration_$5797","typeString":"contract SafeToL2Migration"}],"id":5683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6187:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5682,"name":"address","nodeType":"ElementaryTypeName","src":"6187:7:42","typeDescriptions":{}}},"id":5685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6187:13:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5681,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5374,"src":"6181:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$5374_$","typeString":"type(contract ISafe)"}},"id":5686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6181:20:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"}},"nodeType":"VariableDeclarationStatement","src":"6168:33:42"},{"expression":{"arguments":[{"id":5691,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"6235:15:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5688,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5680,"src":"6211:4:42","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$5374","typeString":"contract ISafe"}},"id":5690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setFallbackHandler","nodeType":"MemberAccess","referencedDeclaration":5373,"src":"6211:23:42","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":5692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6211:40:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5693,"nodeType":"ExpressionStatement","src":"6211:40:42"},{"eventCall":{"arguments":[{"id":5695,"name":"MIGRATION_SINGLETON","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"6387:19:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":5696,"name":"getOwners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5796,"src":"6408:9:42","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6408:11:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":5698,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"6421:9:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":5701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6440:1:42","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":5700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6432:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5699,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:42","typeDescriptions":{}}},"id":5702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6432:10:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":5703,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"6444:15:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5694,"name":"SafeSetup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"6377:9:42","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address[] memory,uint256,address,address)"}},"id":5704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6377:83:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5705,"nodeType":"EmitStatement","src":"6372:88:42"},{"assignments":[5707],"declarations":[{"constant":false,"id":5707,"mutability":"mutable","name":"functionData","nodeType":"VariableDeclaration","scope":5720,"src":"6549:25:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5706,"name":"bytes","nodeType":"ElementaryTypeName","src":"6549:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5714,"initialValue":{"arguments":[{"hexValue":"30786439613230383132","id":5710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6600:10:42","typeDescriptions":{"typeIdentifier":"t_rational_3651274770_by_1","typeString":"int_const 3651274770"},"value":"0xd9a20812"},{"id":5711,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5604,"src":"6612:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5712,"name":"fallbackHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"6625:15:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_3651274770_by_1","typeString":"int_const 3651274770"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5708,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6577:3:42","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"6577:22:42","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":5713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6577:64:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6549:92:42"},{"expression":{"arguments":[{"id":5716,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5604,"src":"6659:11:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5717,"name":"functionData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5707,"src":"6672:12:42","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":5715,"name":"migrate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5512,"src":"6651:7:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":5718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6651:34:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5719,"nodeType":"ExpressionStatement","src":"6651:34:42"}]},"documentation":{"id":5602,"nodeType":"StructuredDocumentation","src":"4980:437:42","text":" @notice Migrate from Safe 1.1.1 Singleton to 1.3.0 or 1.4.1 L2\n Safe is required to have nonce 0 so backend can support it after the migration\n @dev This function should only be called via a delegatecall to perform the upgrade.\n Singletons version will be checked, so it implies that contracts exist.\n A valid and compatible fallbackHandler needs to be provided, only existence will be checked."},"functionSelector":"d9a20812","id":5721,"implemented":true,"kind":"function","modifiers":[{"id":5609,"modifierName":{"id":5608,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5448,"src":"5502:16:42","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"5502:16:42"},{"id":5611,"modifierName":{"id":5610,"name":"onlyNonceZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5460,"src":"5519:13:42","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"5519:13:42"}],"name":"migrateFromV111","nodeType":"FunctionDefinition","parameters":{"id":5607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5604,"mutability":"mutable","name":"l2Singleton","nodeType":"VariableDeclaration","scope":5721,"src":"5447:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5603,"name":"address","nodeType":"ElementaryTypeName","src":"5447:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5606,"mutability":"mutable","name":"fallbackHandler","nodeType":"VariableDeclaration","scope":5721,"src":"5468:23:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5605,"name":"address","nodeType":"ElementaryTypeName","src":"5468:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5446:46:42"},"returnParameters":{"id":5612,"nodeType":"ParameterList","parameters":[],"src":"5533:0:42"},"scope":5797,"src":"5422:1270:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5737,"nodeType":"Block","src":"7390:271:42","statements":[{"assignments":[5730],"declarations":[{"constant":false,"id":5730,"mutability":"mutable","name":"size","nodeType":"VariableDeclaration","scope":5737,"src":"7400:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5729,"name":"uint256","nodeType":"ElementaryTypeName","src":"7400:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5731,"nodeType":"VariableDeclarationStatement","src":"7400:12:42"},{"AST":{"nodeType":"YulBlock","src":"7487:52:42","statements":[{"nodeType":"YulAssignment","src":"7501:28:42","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"7521:7:42"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"7509:11:42"},"nodeType":"YulFunctionCall","src":"7509:20:42"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"7501:4:42"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5724,"isOffset":false,"isSlot":false,"src":"7521:7:42","valueSize":1},{"declaration":5730,"isOffset":false,"isSlot":false,"src":"7501:4:42","valueSize":1}],"id":5732,"nodeType":"InlineAssembly","src":"7478:61:42"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5733,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5730,"src":"7646:4:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7653:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7646:8:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5728,"id":5736,"nodeType":"Return","src":"7639:15:42"}]},"documentation":{"id":5722,"nodeType":"StructuredDocumentation","src":"6698:621:42","text":" @notice Checks whether an Ethereum address corresponds to a contract or an externally owned account (EOA).\n @param account The Ethereum address to be checked.\n @return A boolean value indicating whether the address is associated with a contract (true) or an EOA (false).\n @dev This function relies on the `extcodesize` assembly opcode to determine whether an address is a contract.\n It may return incorrect results in some edge cases (see documentation for details).\n Developers should use caution when relying on the results of this function for critical decision-making."},"id":5738,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nodeType":"FunctionDefinition","parameters":{"id":5725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5724,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":5738,"src":"7344:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5723,"name":"address","nodeType":"ElementaryTypeName","src":"7344:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7343:17:42"},"returnParameters":{"id":5728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5727,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5738,"src":"7384:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5726,"name":"bool","nodeType":"ElementaryTypeName","src":"7384:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7383:6:42"},"scope":5797,"src":"7324:337:42","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5795,"nodeType":"Block","src":"8222:421:42","statements":[{"assignments":[5749],"declarations":[{"constant":false,"id":5749,"mutability":"mutable","name":"array","nodeType":"VariableDeclaration","scope":5795,"src":"8232:22:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5747,"name":"address","nodeType":"ElementaryTypeName","src":"8232:7:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5748,"nodeType":"ArrayTypeName","src":"8232:9:42","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":5755,"initialValue":{"arguments":[{"id":5753,"name":"ownerCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5340,"src":"8271:10:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8257:13:42","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":5750,"name":"address","nodeType":"ElementaryTypeName","src":"8261:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5751,"nodeType":"ArrayTypeName","src":"8261:9:42","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":5754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8257:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8232:50:42"},{"assignments":[5757],"declarations":[{"constant":false,"id":5757,"mutability":"mutable","name":"sentinelOwners","nodeType":"VariableDeclaration","scope":5795,"src":"8292:22:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5756,"name":"address","nodeType":"ElementaryTypeName","src":"8292:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5762,"initialValue":{"arguments":[{"hexValue":"307831","id":5760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8325:3:42","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":5759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8317:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5758,"name":"address","nodeType":"ElementaryTypeName","src":"8317:7:42","typeDescriptions":{}}},"id":5761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8317:12:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"8292:37:42"},{"assignments":[5764],"declarations":[{"constant":false,"id":5764,"mutability":"mutable","name":"index","nodeType":"VariableDeclaration","scope":5795,"src":"8372:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5763,"name":"uint256","nodeType":"ElementaryTypeName","src":"8372:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5766,"initialValue":{"hexValue":"30","id":5765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8388:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8372:17:42"},{"assignments":[5768],"declarations":[{"constant":false,"id":5768,"mutability":"mutable","name":"currentOwner","nodeType":"VariableDeclaration","scope":5795,"src":"8399:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5767,"name":"address","nodeType":"ElementaryTypeName","src":"8399:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5772,"initialValue":{"baseExpression":{"id":5769,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5338,"src":"8422:6:42","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":5771,"indexExpression":{"id":5770,"name":"sentinelOwners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5757,"src":"8429:14:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8422:22:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8399:45:42"},{"body":{"id":5791,"nodeType":"Block","src":"8493:122:42","statements":[{"expression":{"id":5780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5776,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5749,"src":"8507:5:42","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":5778,"indexExpression":{"id":5777,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5764,"src":"8513:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8507:12:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5779,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5768,"src":"8522:12:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8507:27:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5781,"nodeType":"ExpressionStatement","src":"8507:27:42"},{"expression":{"id":5786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5782,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5768,"src":"8548:12:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5783,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5338,"src":"8563:6:42","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":5785,"indexExpression":{"id":5784,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5768,"src":"8570:12:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8563:20:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8548:35:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5787,"nodeType":"ExpressionStatement","src":"8548:35:42"},{"expression":{"id":5789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8597:7:42","subExpression":{"id":5788,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5764,"src":"8597:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5790,"nodeType":"ExpressionStatement","src":"8597:7:42"}]},"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5773,"name":"currentOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5768,"src":"8461:12:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5774,"name":"sentinelOwners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5757,"src":"8477:14:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8461:30:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5792,"nodeType":"WhileStatement","src":"8454:161:42"},{"expression":{"id":5793,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5749,"src":"8631:5:42","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":5744,"id":5794,"nodeType":"Return","src":"8624:12:42"}]},"documentation":{"id":5739,"nodeType":"StructuredDocumentation","src":"7667:488:42","text":" @notice Returns a list of Safe owners.\n @dev This function is copied from `OwnerManager.sol` and takes advantage of the fact that\n migration happens with a `DELEGATECALL` in the context of the migrating account, which allows\n us to read the owners directly from storage and avoid the additional overhead of a `CALL`\n into the account implementation. Note that we can rely on the memory layout of the {owners}\n @return Array of Safe owners."},"id":5796,"implemented":true,"kind":"function","modifiers":[],"name":"getOwners","nodeType":"FunctionDefinition","parameters":{"id":5740,"nodeType":"ParameterList","parameters":[],"src":"8178:2:42"},"returnParameters":{"id":5744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5743,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5796,"src":"8204:16:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5741,"name":"address","nodeType":"ElementaryTypeName","src":"8204:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5742,"nodeType":"ArrayTypeName","src":"8204:9:42","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"8203:18:42"},"scope":5797,"src":"8160:483:42","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5798,"src":"885:7760:42"}],"src":"86:8560:42"},"id":42},"contracts/libraries/SafeToL2Setup.sol":{"ast":{"absolutePath":"contracts/libraries/SafeToL2Setup.sol","exportedSymbols":{"SafeStorage":[5357],"SafeToL2Setup":[5914]},"id":5915,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5799,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:43"},{"absolutePath":"contracts/libraries/SafeStorage.sol","file":"../libraries/SafeStorage.sol","id":5801,"nodeType":"ImportDirective","scope":5915,"sourceUnit":5358,"src":"75:57:43","symbolAliases":[{"foreign":{"id":5800,"name":"SafeStorage","nodeType":"Identifier","overloadedDeclarations":[],"src":"83:11:43","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5803,"name":"SafeStorage","nodeType":"UserDefinedTypeName","referencedDeclaration":5357,"src":"639:11:43","typeDescriptions":{"typeIdentifier":"t_contract$_SafeStorage_$5357","typeString":"contract SafeStorage"}},"id":5804,"nodeType":"InheritanceSpecifier","src":"639:11:43"}],"contractDependencies":[5357],"contractKind":"contract","documentation":{"id":5802,"nodeType":"StructuredDocumentation","src":"134:478:43","text":" @title Safe to L2 Setup Contract\n @dev This contract expects the singleton to be the {Safe} by default. Even if there are more\n {SafeL2} proxies deployed, the average gas cost on L2s is significantly lower, making the\n current design more economically efficient overall.\n @notice This contract facilitates the deployment of a Safe to the same address on all networks by\n         automatically changing the singleton to the L2 version when not on chain ID 1."},"fullyImplemented":true,"id":5914,"linearizedBaseContracts":[5914,5357],"name":"SafeToL2Setup","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":5805,"nodeType":"StructuredDocumentation","src":"657:133:43","text":" @dev Address of the contract.\n      This is used to ensure that the contract is only ever `DELEGATECALL`-ed."},"id":5807,"mutability":"immutable","name":"SELF","nodeType":"VariableDeclaration","scope":5914,"src":"795:30:43","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5806,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":5808,"nodeType":"StructuredDocumentation","src":"832:124:43","text":" @notice Event indicating a change of master copy address.\n @param singleton New master copy address"},"id":5812,"name":"ChangedMasterCopy","nodeType":"EventDefinition","parameters":{"id":5811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5810,"indexed":false,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":5812,"src":"985:17:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5809,"name":"address","nodeType":"ElementaryTypeName","src":"985:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"984:19:43"},"src":"961:43:43"},{"body":{"id":5823,"nodeType":"Block","src":"1099:37:43","statements":[{"expression":{"id":5821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5816,"name":"SELF","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5807,"src":"1109:4:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5819,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1124:4:43","typeDescriptions":{"typeIdentifier":"t_contract$_SafeToL2Setup_$5914","typeString":"contract SafeToL2Setup"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeToL2Setup_$5914","typeString":"contract SafeToL2Setup"}],"id":5818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1116:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5817,"name":"address","nodeType":"ElementaryTypeName","src":"1116:7:43","typeDescriptions":{}}},"id":5820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1116:13:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1109:20:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5822,"nodeType":"ExpressionStatement","src":"1109:20:43"}]},"documentation":{"id":5813,"nodeType":"StructuredDocumentation","src":"1010:70:43","text":" @notice Initializes a new {SafeToL2Setup} instance."},"id":5824,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":5814,"nodeType":"ParameterList","parameters":[],"src":"1096:2:43"},"returnParameters":{"id":5815,"nodeType":"ParameterList","parameters":[],"src":"1099:0:43"},"scope":5914,"src":"1085:51:43","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5838,"nodeType":"Block","src":"1286:114:43","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5830,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1312:4:43","typeDescriptions":{"typeIdentifier":"t_contract$_SafeToL2Setup_$5914","typeString":"contract SafeToL2Setup"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeToL2Setup_$5914","typeString":"contract SafeToL2Setup"}],"id":5829,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1304:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5828,"name":"address","nodeType":"ElementaryTypeName","src":"1304:7:43","typeDescriptions":{}}},"id":5831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1304:13:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5832,"name":"SELF","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5807,"src":"1321:4:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1304:21:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665546f4c3253657475702073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c","id":5834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1327:54:43","typeDescriptions":{"typeIdentifier":"t_stringliteral_acfae9b160e1888774c1005df7aa4807d81dbc8427673a1bc4b0c4ce270458a7","typeString":"literal_string \"SafeToL2Setup should only be called via delegatecall\""},"value":"SafeToL2Setup should only be called via delegatecall"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_acfae9b160e1888774c1005df7aa4807d81dbc8427673a1bc4b0c4ce270458a7","typeString":"literal_string \"SafeToL2Setup should only be called via delegatecall\""}],"id":5827,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1296:7:43","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1296:86:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5836,"nodeType":"ExpressionStatement","src":"1296:86:43"},{"id":5837,"nodeType":"PlaceholderStatement","src":"1392:1:43"}]},"documentation":{"id":5825,"nodeType":"StructuredDocumentation","src":"1142:111:43","text":" @notice Modifier ensure a function is only called via `DELEGATECALL`. Will revert otherwise."},"id":5839,"name":"onlyDelegateCall","nodeType":"ModifierDefinition","parameters":{"id":5826,"nodeType":"ParameterList","parameters":[],"src":"1283:2:43"},"src":"1258:142:43","virtual":false,"visibility":"internal"},{"body":{"id":5850,"nodeType":"Block","src":"1507:85:43","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5843,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5344,"src":"1525:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1534:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1525:10:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665206d7573742068617665206e6f7420657865637574656420616e79207478","id":5846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1537:36:43","typeDescriptions":{"typeIdentifier":"t_stringliteral_b0e3decb9a6d33b925edb996a8f3c6042a3c1eccb7d98c013e5d874314a96f46","typeString":"literal_string \"Safe must have not executed any tx\""},"value":"Safe must have not executed any tx"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b0e3decb9a6d33b925edb996a8f3c6042a3c1eccb7d98c013e5d874314a96f46","typeString":"literal_string \"Safe must have not executed any tx\""}],"id":5842,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1517:7:43","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1517:57:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5848,"nodeType":"ExpressionStatement","src":"1517:57:43"},{"id":5849,"nodeType":"PlaceholderStatement","src":"1584:1:43"}]},"documentation":{"id":5840,"nodeType":"StructuredDocumentation","src":"1406:71:43","text":" @notice Modifier to prevent using initialized Safes."},"id":5851,"name":"onlyNonceZero","nodeType":"ModifierDefinition","parameters":{"id":5841,"nodeType":"ParameterList","parameters":[],"src":"1504:2:43"},"src":"1482:110:43","virtual":false,"visibility":"internal"},{"body":{"id":5866,"nodeType":"Block","src":"1736:91:43","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5858,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5854,"src":"1763:7:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5857,"name":"codeSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5913,"src":"1754:8:43","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":5859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1754:17:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1775:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1754:22:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4163636f756e7420646f65736e277420636f6e7461696e20636f6465","id":5862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1778:30:43","typeDescriptions":{"typeIdentifier":"t_stringliteral_7acf77287f4e05b3209093d0e6a94ce34ed0271eae609ed6ec7ad05ca0c3a665","typeString":"literal_string \"Account doesn't contain code\""},"value":"Account doesn't contain code"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7acf77287f4e05b3209093d0e6a94ce34ed0271eae609ed6ec7ad05ca0c3a665","typeString":"literal_string \"Account doesn't contain code\""}],"id":5856,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1746:7:43","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1746:63:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5864,"nodeType":"ExpressionStatement","src":"1746:63:43"},{"id":5865,"nodeType":"PlaceholderStatement","src":"1819:1:43"}]},"documentation":{"id":5852,"nodeType":"StructuredDocumentation","src":"1598:94:43","text":" @notice Modifier to ensure that the specified account is a contract."},"id":5867,"name":"onlyContract","nodeType":"ModifierDefinition","parameters":{"id":5855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5854,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":5867,"src":"1719:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5853,"name":"address","nodeType":"ElementaryTypeName","src":"1719:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1718:17:43"},"src":"1697:130:43","virtual":false,"visibility":"internal"},{"body":{"id":5894,"nodeType":"Block","src":"2168:133:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":5880,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5903,"src":"2182:7:43","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":5881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2182:9:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":5882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2195:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2182:14:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5893,"nodeType":"IfStatement","src":"2178:117:43","trueBody":{"id":5892,"nodeType":"Block","src":"2198:97:43","statements":[{"expression":{"id":5886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5884,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"2212:9:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5885,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5870,"src":"2224:11:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2212:23:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5887,"nodeType":"ExpressionStatement","src":"2212:23:43"},{"eventCall":{"arguments":[{"id":5889,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5870,"src":"2272:11:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5888,"name":"ChangedMasterCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5812,"src":"2254:17:43","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2254:30:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5891,"nodeType":"EmitStatement","src":"2249:35:43"}]}}]},"documentation":{"id":5868,"nodeType":"StructuredDocumentation","src":"1833:224:43","text":" @notice Setup the Safe with the provided L2 singleton if needed.\n @dev This function checks that the chain ID is not 1, and if it isn't updates the singleton\n      to the provided L2 singleton."},"functionSelector":"fe51f643","id":5895,"implemented":true,"kind":"function","modifiers":[{"id":5873,"modifierName":{"id":5872,"name":"onlyDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"2111:16:43","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2111:16:43"},{"id":5875,"modifierName":{"id":5874,"name":"onlyNonceZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5851,"src":"2128:13:43","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2128:13:43"},{"arguments":[{"id":5877,"name":"l2Singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5870,"src":"2155:11:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5878,"modifierName":{"id":5876,"name":"onlyContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"2142:12:43","typeDescriptions":{"typeIdentifier":"t_modifier$_t_address_$","typeString":"modifier (address)"}},"nodeType":"ModifierInvocation","src":"2142:25:43"}],"name":"setupToL2","nodeType":"FunctionDefinition","parameters":{"id":5871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5870,"mutability":"mutable","name":"l2Singleton","nodeType":"VariableDeclaration","scope":5895,"src":"2081:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5869,"name":"address","nodeType":"ElementaryTypeName","src":"2081:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2080:21:43"},"returnParameters":{"id":5879,"nodeType":"ParameterList","parameters":[],"src":"2168:0:43"},"scope":5914,"src":"2062:239:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5902,"nodeType":"Block","src":"2425:208:43","statements":[{"AST":{"nodeType":"YulBlock","src":"2536:43:43","statements":[{"nodeType":"YulAssignment","src":"2550:19:43","value":{"arguments":[],"functionName":{"name":"chainid","nodeType":"YulIdentifier","src":"2560:7:43"},"nodeType":"YulFunctionCall","src":"2560:9:43"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"2550:6:43"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5899,"isOffset":false,"isSlot":false,"src":"2550:6:43","valueSize":1}],"id":5901,"nodeType":"InlineAssembly","src":"2527:52:43"}]},"documentation":{"id":5896,"nodeType":"StructuredDocumentation","src":"2307:56:43","text":" @notice Returns the current chain ID."},"id":5903,"implemented":true,"kind":"function","modifiers":[],"name":"chainId","nodeType":"FunctionDefinition","parameters":{"id":5897,"nodeType":"ParameterList","parameters":[],"src":"2384:2:43"},"returnParameters":{"id":5900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5899,"mutability":"mutable","name":"result","nodeType":"VariableDeclaration","scope":5903,"src":"2409:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5898,"name":"uint256","nodeType":"ElementaryTypeName","src":"2409:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2408:16:43"},"scope":5914,"src":"2368:265:43","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":5912,"nodeType":"Block","src":"2792:219:43","statements":[{"AST":{"nodeType":"YulBlock","src":"2903:54:43","statements":[{"nodeType":"YulAssignment","src":"2917:30:43","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"2939:7:43"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"2927:11:43"},"nodeType":"YulFunctionCall","src":"2927:20:43"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"2917:6:43"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5906,"isOffset":false,"isSlot":false,"src":"2939:7:43","valueSize":1},{"declaration":5909,"isOffset":false,"isSlot":false,"src":"2917:6:43","valueSize":1}],"id":5911,"nodeType":"InlineAssembly","src":"2894:63:43"}]},"documentation":{"id":5904,"nodeType":"StructuredDocumentation","src":"2639:74:43","text":" @notice Returns the code size of the specified account."},"id":5913,"implemented":true,"kind":"function","modifiers":[],"name":"codeSize","nodeType":"FunctionDefinition","parameters":{"id":5907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5906,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":5913,"src":"2736:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5905,"name":"address","nodeType":"ElementaryTypeName","src":"2736:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2735:17:43"},"returnParameters":{"id":5910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5909,"mutability":"mutable","name":"result","nodeType":"VariableDeclaration","scope":5913,"src":"2776:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5908,"name":"uint256","nodeType":"ElementaryTypeName","src":"2776:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2775:16:43"},"scope":5914,"src":"2718:293:43","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5915,"src":"613:2400:43"}],"src":"42:2972:43"},"id":43},"contracts/libraries/SignMessageLib.sol":{"ast":{"absolutePath":"contracts/libraries/SignMessageLib.sol","exportedSymbols":{"BaseGuard":[2711],"Enum":[3717],"Executor":[2583],"FallbackManager":[2645],"Guard":[2685],"GuardManager":[2773],"IERC165":[4992],"ISignatureValidator":[5011],"ISignatureValidatorConstants":[4998],"ModuleManager":[3197],"NativeCurrencyPaymentFallback":[3739],"OwnerManager":[3710],"Safe":[2325],"SafeMath":[4501],"SafeStorage":[5357],"SecuredTokenTransfer":[3766],"SelfAuthorized":[3792],"SignMessageLib":[5999],"SignatureDecoder":[3812],"Singleton":[3818],"StorageAccessible":[3867]},"id":6000,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":5916,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:44"},{"absolutePath":"contracts/libraries/SafeStorage.sol","file":"./SafeStorage.sol","id":5917,"nodeType":"ImportDirective","scope":6000,"sourceUnit":5358,"src":"75:27:44","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Safe.sol","file":"../Safe.sol","id":5918,"nodeType":"ImportDirective","scope":6000,"sourceUnit":2326,"src":"103:21:44","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5920,"name":"SafeStorage","nodeType":"UserDefinedTypeName","referencedDeclaration":5357,"src":"309:11:44","typeDescriptions":{"typeIdentifier":"t_contract$_SafeStorage_$5357","typeString":"contract SafeStorage"}},"id":5921,"nodeType":"InheritanceSpecifier","src":"309:11:44"}],"contractDependencies":[5357],"contractKind":"contract","documentation":{"id":5919,"nodeType":"StructuredDocumentation","src":"126:155:44","text":" @title SignMessageLib - Allows to sign messages on-chain by writing the signed message hashes on-chain.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":true,"id":5999,"linearizedBaseContracts":[5999,5357],"name":"SignMessageLib","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":5924,"mutability":"constant","name":"SAFE_MSG_TYPEHASH","nodeType":"VariableDeclaration","scope":5999,"src":"375:111:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5922,"name":"bytes32","nodeType":"ElementaryTypeName","src":"375:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307836306233636266386234613232336436386436343162336236646466396132393865376633333731306366336433613964313134366235613631353066626361","id":5923,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"420:66:44","typeDescriptions":{"typeIdentifier":"t_rational_43739706848186989041152069077571617734008543096732098246335109361212071148490_by_1","typeString":"int_const 4373...(69 digits omitted)...8490"},"value":"0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca"},"visibility":"private"},{"anonymous":false,"id":5928,"name":"SignMsg","nodeType":"EventDefinition","parameters":{"id":5927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5926,"indexed":true,"mutability":"mutable","name":"msgHash","nodeType":"VariableDeclaration","scope":5928,"src":"507:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5925,"name":"bytes32","nodeType":"ElementaryTypeName","src":"507:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"506:25:44"},"src":"493:39:44"},{"body":{"id":5950,"nodeType":"Block","src":"904:124:44","statements":[{"assignments":[5935],"declarations":[{"constant":false,"id":5935,"mutability":"mutable","name":"msgHash","nodeType":"VariableDeclaration","scope":5950,"src":"914:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5934,"name":"bytes32","nodeType":"ElementaryTypeName","src":"914:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5939,"initialValue":{"arguments":[{"id":5937,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5931,"src":"947:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":5936,"name":"getMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5998,"src":"932:14:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) view returns (bytes32)"}},"id":5938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"932:21:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"914:39:44"},{"expression":{"id":5944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5940,"name":"signedMessages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5350,"src":"963:14:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":5942,"indexExpression":{"id":5941,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5935,"src":"978:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"963:23:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":5943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"989:1:44","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"963:27:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5945,"nodeType":"ExpressionStatement","src":"963:27:44"},{"eventCall":{"arguments":[{"id":5947,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5935,"src":"1013:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5946,"name":"SignMsg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5928,"src":"1005:7:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":5948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1005:16:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5949,"nodeType":"EmitStatement","src":"1000:21:44"}]},"documentation":{"id":5929,"nodeType":"StructuredDocumentation","src":"538:309:44","text":" @notice Marks a message (`_data`) as signed.\n @dev Can be verified using EIP-1271 validation method by passing the pre-image of the message hash and empty bytes as the signature.\n @param _data Arbitrary length data that should be marked as signed on the behalf of address(this)."},"functionSelector":"85a5affe","id":5951,"implemented":true,"kind":"function","modifiers":[],"name":"signMessage","nodeType":"FunctionDefinition","parameters":{"id":5932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5931,"mutability":"mutable","name":"_data","nodeType":"VariableDeclaration","scope":5951,"src":"873:20:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5930,"name":"bytes","nodeType":"ElementaryTypeName","src":"873:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"872:22:44"},"returnParameters":{"id":5933,"nodeType":"ParameterList","parameters":[],"src":"904:0:44"},"scope":5999,"src":"852:176:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5997,"nodeType":"Block","src":"1276:240:44","statements":[{"assignments":[5960],"declarations":[{"constant":false,"id":5960,"mutability":"mutable","name":"safeMessageHash","nodeType":"VariableDeclaration","scope":5997,"src":"1286:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5959,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1286:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5970,"initialValue":{"arguments":[{"arguments":[{"id":5964,"name":"SAFE_MSG_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5924,"src":"1333:17:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":5966,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"1362:7:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5965,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1352:9:44","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1352:18:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":5962,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1322:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1322:10:44","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1322:49:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5961,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1312:9:44","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1312:60:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1286:86:44"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30783139","id":5976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1423:4:44","typeDescriptions":{"typeIdentifier":"t_rational_25_by_1","typeString":"int_const 25"},"value":"0x19"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_25_by_1","typeString":"int_const 25"}],"id":5975,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1416:6:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5974,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1416:6:44","typeDescriptions":{}}},"id":5977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1416:12:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"arguments":[{"hexValue":"30783031","id":5980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1437:4:44","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":5979,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1430:6:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5978,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1430:6:44","typeDescriptions":{}}},"id":5981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1430:12:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"arguments":[{"id":5987,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1465:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_SignMessageLib_$5999","typeString":"contract SignMessageLib"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SignMessageLib_$5999","typeString":"contract SignMessageLib"}],"id":5986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1457:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5985,"name":"address","nodeType":"ElementaryTypeName","src":"1457:7:44","typeDescriptions":{}}},"id":5988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1457:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5984,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1449:8:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":5983,"name":"address","nodeType":"ElementaryTypeName","src":"1449:8:44","stateMutability":"payable","typeDescriptions":{}}},"id":5989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1449:22:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5982,"name":"Safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2325,"src":"1444:4:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Safe_$2325_$","typeString":"type(contract Safe)"}},"id":5990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1444:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Safe_$2325","typeString":"contract Safe"}},"id":5991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"domainSeparator","nodeType":"MemberAccess","referencedDeclaration":2219,"src":"1444:44:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":5992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1444:46:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5993,"name":"safeMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5960,"src":"1492:15:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":5972,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1399:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1399:16:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1399:109:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5971,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1389:9:44","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1389:120:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":5958,"id":5996,"nodeType":"Return","src":"1382:127:44"}]},"documentation":{"id":5952,"nodeType":"StructuredDocumentation","src":"1034:161:44","text":" @dev Returns hash of a message that can be signed by owners.\n @param message Message that should be hashed.\n @return Message hash."},"functionSelector":"0a1028c4","id":5998,"implemented":true,"kind":"function","modifiers":[],"name":"getMessageHash","nodeType":"FunctionDefinition","parameters":{"id":5955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5954,"mutability":"mutable","name":"message","nodeType":"VariableDeclaration","scope":5998,"src":"1224:20:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5953,"name":"bytes","nodeType":"ElementaryTypeName","src":"1224:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1223:22:44"},"returnParameters":{"id":5958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5957,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5998,"src":"1267:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5956,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1267:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1266:9:44"},"scope":5999,"src":"1200:316:44","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":6000,"src":"282:1236:44"}],"src":"42:1477:44"},"id":44},"contracts/proxies/IProxyCreationCallback.sol":{"ast":{"absolutePath":"contracts/proxies/IProxyCreationCallback.sol","exportedSymbols":{"IProxy":[6025],"IProxyCreationCallback":[6016],"SafeProxy":[6056]},"id":6017,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":6001,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:45"},{"absolutePath":"contracts/proxies/SafeProxy.sol","file":"./SafeProxy.sol","id":6002,"nodeType":"ImportDirective","scope":6017,"sourceUnit":6057,"src":"74:25:45","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":6003,"nodeType":"StructuredDocumentation","src":"101:167:45","text":" @title IProxyCreationCallback\n @dev An interface for a contract that implements a callback function to be executed after the creation of a proxy instance."},"fullyImplemented":false,"id":6016,"linearizedBaseContracts":[6016],"name":"IProxyCreationCallback","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6004,"nodeType":"StructuredDocumentation","src":"308:384:45","text":" @dev Function to be called after the creation of a SafeProxy instance.\n @param proxy The newly created SafeProxy instance.\n @param _singleton The address of the singleton contract used to create the proxy.\n @param initializer The initializer function call data.\n @param saltNonce The nonce used to generate the salt for the proxy deployment."},"functionSelector":"1e52b518","id":6015,"implemented":false,"kind":"function","modifiers":[],"name":"proxyCreated","nodeType":"FunctionDefinition","parameters":{"id":6013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6006,"mutability":"mutable","name":"proxy","nodeType":"VariableDeclaration","scope":6015,"src":"719:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},"typeName":{"id":6005,"name":"SafeProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":6056,"src":"719:9:45","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"visibility":"internal"},{"constant":false,"id":6008,"mutability":"mutable","name":"_singleton","nodeType":"VariableDeclaration","scope":6015,"src":"736:18:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6007,"name":"address","nodeType":"ElementaryTypeName","src":"736:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6010,"mutability":"mutable","name":"initializer","nodeType":"VariableDeclaration","scope":6015,"src":"756:26:45","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":6009,"name":"bytes","nodeType":"ElementaryTypeName","src":"756:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6012,"mutability":"mutable","name":"saltNonce","nodeType":"VariableDeclaration","scope":6015,"src":"784:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6011,"name":"uint256","nodeType":"ElementaryTypeName","src":"784:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"718:84:45"},"returnParameters":{"id":6014,"nodeType":"ParameterList","parameters":[],"src":"811:0:45"},"scope":6016,"src":"697:115:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6017,"src":"269:545:45"}],"src":"42:773:45"},"id":45},"contracts/proxies/SafeProxy.sol":{"ast":{"absolutePath":"contracts/proxies/SafeProxy.sol","exportedSymbols":{"IProxy":[6025],"SafeProxy":[6056]},"id":6057,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":6018,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:46"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":6019,"nodeType":"StructuredDocumentation","src":"75:139:46","text":" @title IProxy - Helper interface to access the singleton address of the Proxy on-chain.\n @author Richard Meissner - @rmeissner"},"fullyImplemented":false,"id":6025,"linearizedBaseContracts":[6025],"name":"IProxy","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a619486e","id":6024,"implemented":false,"kind":"function","modifiers":[],"name":"masterCopy","nodeType":"FunctionDefinition","parameters":{"id":6020,"nodeType":"ParameterList","parameters":[],"src":"257:2:46"},"returnParameters":{"id":6023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6022,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":6024,"src":"283:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6021,"name":"address","nodeType":"ElementaryTypeName","src":"283:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"282:9:46"},"scope":6025,"src":"238:54:46","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6057,"src":"215:79:46"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":6026,"nodeType":"StructuredDocumentation","src":"296:223:46","text":" @title SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\n @author Stefan George - <stefan@gnosis.io>\n @author Richard Meissner - <richard@gnosis.io>"},"fullyImplemented":true,"id":6056,"linearizedBaseContracts":[6056],"name":"SafeProxy","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6028,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":6056,"src":"800:26:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6027,"name":"address","nodeType":"ElementaryTypeName","src":"800:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":6048,"nodeType":"Block","src":"997:120:46","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6035,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6031,"src":"1015:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1037:1:46","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":6037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1029:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6036,"name":"address","nodeType":"ElementaryTypeName","src":"1029:7:46","typeDescriptions":{}}},"id":6039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1029:10:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1015:24:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564","id":6041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1041:36:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_f4a46125d24bcf992f3a005546c0f3eafebe1847b2ccd7a103878ded65e88250","typeString":"literal_string \"Invalid singleton address provided\""},"value":"Invalid singleton address provided"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f4a46125d24bcf992f3a005546c0f3eafebe1847b2ccd7a103878ded65e88250","typeString":"literal_string \"Invalid singleton address provided\""}],"id":6034,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1007:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1007:71:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6043,"nodeType":"ExpressionStatement","src":"1007:71:46"},{"expression":{"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6044,"name":"singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6028,"src":"1088:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6045,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6031,"src":"1100:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1088:22:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6047,"nodeType":"ExpressionStatement","src":"1088:22:46"}]},"documentation":{"id":6029,"nodeType":"StructuredDocumentation","src":"833:127:46","text":" @notice Constructor function sets address of singleton contract.\n @param _singleton Singleton address."},"id":6049,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":6032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6031,"mutability":"mutable","name":"_singleton","nodeType":"VariableDeclaration","scope":6049,"src":"977:18:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6030,"name":"address","nodeType":"ElementaryTypeName","src":"977:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"976:20:46"},"returnParameters":{"id":6033,"nodeType":"ParameterList","parameters":[],"src":"997:0:46"},"scope":6056,"src":"965:152:46","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6054,"nodeType":"Block","src":"1246:780:46","statements":[{"AST":{"nodeType":"YulBlock","src":"1321:699:46","statements":[{"nodeType":"YulVariableDeclaration","src":"1335:75:46","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1363:1:46","type":"","value":"0"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"1357:5:46"},"nodeType":"YulFunctionCall","src":"1357:8:46"},{"kind":"number","nodeType":"YulLiteral","src":"1367:42:46","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1353:3:46"},"nodeType":"YulFunctionCall","src":"1353:57:46"},"variables":[{"name":"_singleton","nodeType":"YulTypedName","src":"1339:10:46","type":""}]},{"body":{"nodeType":"YulBlock","src":"1613:85:46","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1638:1:46","type":"","value":"0"},{"name":"_singleton","nodeType":"YulIdentifier","src":"1641:10:46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1631:6:46"},"nodeType":"YulFunctionCall","src":"1631:21:46"},"nodeType":"YulExpressionStatement","src":"1631:21:46"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1676:1:46","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1679:4:46","type":"","value":"0x20"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"1669:6:46"},"nodeType":"YulFunctionCall","src":"1669:15:46"},"nodeType":"YulExpressionStatement","src":"1669:15:46"}]},"condition":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1541:1:46","type":"","value":"0"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1528:12:46"},"nodeType":"YulFunctionCall","src":"1528:15:46"},{"kind":"number","nodeType":"YulLiteral","src":"1545:66:46","type":"","value":"0xa619486e00000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1525:2:46"},"nodeType":"YulFunctionCall","src":"1525:87:46"},"nodeType":"YulIf","src":"1522:2:46"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1724:1:46","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1727:1:46","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1730:12:46"},"nodeType":"YulFunctionCall","src":"1730:14:46"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1711:12:46"},"nodeType":"YulFunctionCall","src":"1711:34:46"},"nodeType":"YulExpressionStatement","src":"1711:34:46"},{"nodeType":"YulVariableDeclaration","src":"1758:71:46","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1786:3:46"},"nodeType":"YulFunctionCall","src":"1786:5:46"},{"name":"_singleton","nodeType":"YulIdentifier","src":"1793:10:46"},{"kind":"number","nodeType":"YulLiteral","src":"1805:1:46","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1808:12:46"},"nodeType":"YulFunctionCall","src":"1808:14:46"},{"kind":"number","nodeType":"YulLiteral","src":"1824:1:46","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1827:1:46","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"1773:12:46"},"nodeType":"YulFunctionCall","src":"1773:56:46"},"variables":[{"name":"success","nodeType":"YulTypedName","src":"1762:7:46","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1857:1:46","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1860:1:46","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1863:14:46"},"nodeType":"YulFunctionCall","src":"1863:16:46"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1842:14:46"},"nodeType":"YulFunctionCall","src":"1842:38:46"},"nodeType":"YulExpressionStatement","src":"1842:38:46"},{"body":{"nodeType":"YulBlock","src":"1911:59:46","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1936:1:46","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1939:14:46"},"nodeType":"YulFunctionCall","src":"1939:16:46"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1929:6:46"},"nodeType":"YulFunctionCall","src":"1929:27:46"},"nodeType":"YulExpressionStatement","src":"1929:27:46"}]},"condition":{"arguments":[{"name":"success","nodeType":"YulIdentifier","src":"1899:7:46"},{"kind":"number","nodeType":"YulLiteral","src":"1908:1:46","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1896:2:46"},"nodeType":"YulFunctionCall","src":"1896:14:46"},"nodeType":"YulIf","src":"1893:2:46"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1990:1:46","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1993:14:46"},"nodeType":"YulFunctionCall","src":"1993:16:46"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"1983:6:46"},"nodeType":"YulFunctionCall","src":"1983:27:46"},"nodeType":"YulExpressionStatement","src":"1983:27:46"}]},"evmVersion":"istanbul","externalReferences":[],"id":6053,"nodeType":"InlineAssembly","src":"1312:708:46"}]},"documentation":{"id":6050,"nodeType":"StructuredDocumentation","src":"1123:90:46","text":"@dev Fallback function forwards all transactions and returns all received return data."},"id":6055,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":6051,"nodeType":"ParameterList","parameters":[],"src":"1226:2:46"},"returnParameters":{"id":6052,"nodeType":"ParameterList","parameters":[],"src":"1246:0:46"},"scope":6056,"src":"1218:808:46","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":6057,"src":"520:1508:46"}],"src":"42:1987:46"},"id":46},"contracts/proxies/SafeProxyFactory.sol":{"ast":{"absolutePath":"contracts/proxies/SafeProxyFactory.sol","exportedSymbols":{"IProxy":[6025],"IProxyCreationCallback":[6016],"SafeProxy":[6056],"SafeProxyFactory":[6301]},"id":6302,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":6058,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:47"},{"absolutePath":"contracts/proxies/SafeProxy.sol","file":"./SafeProxy.sol","id":6059,"nodeType":"ImportDirective","scope":6302,"sourceUnit":6057,"src":"75:25:47","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/proxies/IProxyCreationCallback.sol","file":"./IProxyCreationCallback.sol","id":6060,"nodeType":"ImportDirective","scope":6302,"sourceUnit":6017,"src":"101:38:47","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[6056],"contractKind":"contract","documentation":{"id":6061,"nodeType":"StructuredDocumentation","src":"141:176:47","text":" @title Proxy Factory - Allows to create a new proxy contract and execute a message call to the new proxy within one transaction.\n @author Stefan George - @Georgi87"},"fullyImplemented":true,"id":6301,"linearizedBaseContracts":[6301],"name":"SafeProxyFactory","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":6067,"name":"ProxyCreation","nodeType":"EventDefinition","parameters":{"id":6066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6063,"indexed":true,"mutability":"mutable","name":"proxy","nodeType":"VariableDeclaration","scope":6067,"src":"370:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},"typeName":{"id":6062,"name":"SafeProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":6056,"src":"370:9:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"visibility":"internal"},{"constant":false,"id":6065,"indexed":false,"mutability":"mutable","name":"singleton","nodeType":"VariableDeclaration","scope":6067,"src":"395:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6064,"name":"address","nodeType":"ElementaryTypeName","src":"395:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"369:44:47"},"src":"350:64:47"},{"body":{"id":6078,"nodeType":"Block","src":"629:52:47","statements":[{"expression":{"expression":{"arguments":[{"id":6074,"name":"SafeProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6056,"src":"651:9:47","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeProxy_$6056_$","typeString":"type(contract SafeProxy)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_SafeProxy_$6056_$","typeString":"type(contract SafeProxy)"}],"id":6073,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"646:4:47","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":6075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"646:15:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_SafeProxy_$6056","typeString":"type(contract SafeProxy)"}},"id":6076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"creationCode","nodeType":"MemberAccess","src":"646:28:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6072,"id":6077,"nodeType":"Return","src":"639:35:47"}]},"documentation":{"id":6068,"nodeType":"StructuredDocumentation","src":"420:140:47","text":"@dev Allows to retrieve the creation code used for the Proxy deployment. With this it is easily possible to calculate predicted address."},"functionSelector":"53e5d935","id":6079,"implemented":true,"kind":"function","modifiers":[],"name":"proxyCreationCode","nodeType":"FunctionDefinition","parameters":{"id":6069,"nodeType":"ParameterList","parameters":[],"src":"591:2:47"},"returnParameters":{"id":6072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6071,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":6079,"src":"615:12:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6070,"name":"bytes","nodeType":"ElementaryTypeName","src":"615:5:47","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"614:14:47"},"scope":6301,"src":"565:116:47","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":6136,"nodeType":"Block","src":"1301:742:47","statements":[{"expression":{"arguments":[{"arguments":[{"id":6093,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6082,"src":"1330:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6092,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6287,"src":"1319:10:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":6094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1319:22:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53696e676c65746f6e20636f6e7472616374206e6f74206465706c6f796564","id":6095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1343:33:47","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2ba483bd2b1da1fc5392b3b0709ef2a51e36fb5e3bb98c4c0d07f707ddf973","typeString":"literal_string \"Singleton contract not deployed\""},"value":"Singleton contract not deployed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2ba483bd2b1da1fc5392b3b0709ef2a51e36fb5e3bb98c4c0d07f707ddf973","typeString":"literal_string \"Singleton contract not deployed\""}],"id":6091,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1311:7:47","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1311:66:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6097,"nodeType":"ExpressionStatement","src":"1311:66:47"},{"assignments":[6099],"declarations":[{"constant":false,"id":6099,"mutability":"mutable","name":"deploymentData","nodeType":"VariableDeclaration","scope":6136,"src":"1388:27:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6098,"name":"bytes","nodeType":"ElementaryTypeName","src":"1388:5:47","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6114,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":6103,"name":"SafeProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6056,"src":"1440:9:47","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeProxy_$6056_$","typeString":"type(contract SafeProxy)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_SafeProxy_$6056_$","typeString":"type(contract SafeProxy)"}],"id":6102,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1435:4:47","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":6104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1435:15:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_SafeProxy_$6056","typeString":"type(contract SafeProxy)"}},"id":6105,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"creationCode","nodeType":"MemberAccess","src":"1435:28:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"arguments":[{"id":6110,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6082,"src":"1481:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1473:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":6108,"name":"uint160","nodeType":"ElementaryTypeName","src":"1473:7:47","typeDescriptions":{}}},"id":6111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1473:19:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":6107,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1465:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6106,"name":"uint256","nodeType":"ElementaryTypeName","src":"1465:7:47","typeDescriptions":{}}},"id":6112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1465:28:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6100,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1418:3:47","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1418:16:47","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1418:76:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1388:106:47"},{"AST":{"nodeType":"YulBlock","src":"1569:101:47","statements":[{"nodeType":"YulAssignment","src":"1583:77:47","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1600:3:47","type":"","value":"0x0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1609:4:47","type":"","value":"0x20"},{"name":"deploymentData","nodeType":"YulIdentifier","src":"1615:14:47"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1605:3:47"},"nodeType":"YulFunctionCall","src":"1605:25:47"},{"arguments":[{"name":"deploymentData","nodeType":"YulIdentifier","src":"1638:14:47"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1632:5:47"},"nodeType":"YulFunctionCall","src":"1632:21:47"},{"name":"salt","nodeType":"YulIdentifier","src":"1655:4:47"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"1592:7:47"},"nodeType":"YulFunctionCall","src":"1592:68:47"},"variableNames":[{"name":"proxy","nodeType":"YulIdentifier","src":"1583:5:47"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":6099,"isOffset":false,"isSlot":false,"src":"1615:14:47","valueSize":1},{"declaration":6099,"isOffset":false,"isSlot":false,"src":"1638:14:47","valueSize":1},{"declaration":6089,"isOffset":false,"isSlot":false,"src":"1583:5:47","valueSize":1},{"declaration":6086,"isOffset":false,"isSlot":false,"src":"1655:4:47","valueSize":1}],"id":6115,"nodeType":"InlineAssembly","src":"1560:110:47"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"id":6125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6119,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6089,"src":"1695:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}],"id":6118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1687:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6117,"name":"address","nodeType":"ElementaryTypeName","src":"1687:7:47","typeDescriptions":{}}},"id":6120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1687:14:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1713: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":6122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1705:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6121,"name":"address","nodeType":"ElementaryTypeName","src":"1705:7:47","typeDescriptions":{}}},"id":6124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1705:10:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1687:28:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"437265617465322063616c6c206661696c6564","id":6126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1717:21:47","typeDescriptions":{"typeIdentifier":"t_stringliteral_d7c71a0bdd2eb2834ad042153c811dd478e4ee2324e3003b9522e03e7b3735dc","typeString":"literal_string \"Create2 call failed\""},"value":"Create2 call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d7c71a0bdd2eb2834ad042153c811dd478e4ee2324e3003b9522e03e7b3735dc","typeString":"literal_string \"Create2 call failed\""}],"id":6116,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1679:7:47","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1679:60:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6128,"nodeType":"ExpressionStatement","src":"1679:60:47"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6129,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6084,"src":"1754:11:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1754:18:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1775:1:47","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1754:22:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6135,"nodeType":"IfStatement","src":"1750:287:47","trueBody":{"id":6134,"nodeType":"Block","src":"1778:259:47","statements":[{"AST":{"nodeType":"YulBlock","src":"1861:166:47","statements":[{"body":{"nodeType":"YulBlock","src":"1961:52:47","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1990:1:47","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1993:1:47","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1983:6:47"},"nodeType":"YulFunctionCall","src":"1983:12:47"},"nodeType":"YulExpressionStatement","src":"1983:12:47"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1890:3:47"},"nodeType":"YulFunctionCall","src":"1890:5:47"},{"name":"proxy","nodeType":"YulIdentifier","src":"1897:5:47"},{"kind":"number","nodeType":"YulLiteral","src":"1904:1:47","type":"","value":"0"},{"arguments":[{"name":"initializer","nodeType":"YulIdentifier","src":"1911:11:47"},{"kind":"number","nodeType":"YulLiteral","src":"1924:4:47","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1907:3:47"},"nodeType":"YulFunctionCall","src":"1907:22:47"},{"arguments":[{"name":"initializer","nodeType":"YulIdentifier","src":"1937:11:47"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1931:5:47"},"nodeType":"YulFunctionCall","src":"1931:18:47"},{"kind":"number","nodeType":"YulLiteral","src":"1951:1:47","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1954:1:47","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"1885:4:47"},"nodeType":"YulFunctionCall","src":"1885:71:47"},{"kind":"number","nodeType":"YulLiteral","src":"1958:1:47","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1882:2:47"},"nodeType":"YulFunctionCall","src":"1882:78:47"},"nodeType":"YulIf","src":"1879:2:47"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":6084,"isOffset":false,"isSlot":false,"src":"1911:11:47","valueSize":1},{"declaration":6084,"isOffset":false,"isSlot":false,"src":"1937:11:47","valueSize":1},{"declaration":6089,"isOffset":false,"isSlot":false,"src":"1897:5:47","valueSize":1}],"id":6133,"nodeType":"InlineAssembly","src":"1852:175:47"}]}}]},"documentation":{"id":6080,"nodeType":"StructuredDocumentation","src":"687:493:47","text":" @notice Internal method to create a new proxy contract using CREATE2. Optionally executes an initializer call to a new proxy.\n @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n @param initializer (Optional) Payload for a message call to be sent to a new proxy contract.\n @param salt Create2 salt to use for calculating the address of the new proxy contract.\n @return proxy Address of the new proxy contract."},"id":6137,"implemented":true,"kind":"function","modifiers":[],"name":"deployProxy","nodeType":"FunctionDefinition","parameters":{"id":6087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6082,"mutability":"mutable","name":"_singleton","nodeType":"VariableDeclaration","scope":6137,"src":"1206:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6081,"name":"address","nodeType":"ElementaryTypeName","src":"1206:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6084,"mutability":"mutable","name":"initializer","nodeType":"VariableDeclaration","scope":6137,"src":"1226:24:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6083,"name":"bytes","nodeType":"ElementaryTypeName","src":"1226:5:47","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6086,"mutability":"mutable","name":"salt","nodeType":"VariableDeclaration","scope":6137,"src":"1252:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6085,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1252:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1205:60:47"},"returnParameters":{"id":6090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6089,"mutability":"mutable","name":"proxy","nodeType":"VariableDeclaration","scope":6137,"src":"1284:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},"typeName":{"id":6088,"name":"SafeProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":6056,"src":"1284:9:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"visibility":"internal"}],"src":"1283:17:47"},"scope":6301,"src":"1185:858:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6174,"nodeType":"Block","src":"2643:343:47","statements":[{"assignments":[6150],"declarations":[{"constant":false,"id":6150,"mutability":"mutable","name":"salt","nodeType":"VariableDeclaration","scope":6174,"src":"2795:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6149,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2795:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":6160,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":6155,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"2847:11:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6154,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2837:9:47","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2837:22:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6157,"name":"saltNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"2861:9:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6152,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2820:3:47","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"2820:16:47","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2820:51:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6151,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2810:9:47","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2810:62:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2795:77:47"},{"expression":{"id":6167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6161,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6147,"src":"2882:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6163,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6140,"src":"2902:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6164,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"2914:11:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6165,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6150,"src":"2927:4:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6162,"name":"deployProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6137,"src":"2890:11:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_contract$_SafeProxy_$6056_$","typeString":"function (address,bytes memory,bytes32) returns (contract SafeProxy)"}},"id":6166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2890:42:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"src":"2882:50:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"id":6168,"nodeType":"ExpressionStatement","src":"2882:50:47"},{"eventCall":{"arguments":[{"id":6170,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6147,"src":"2961:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},{"id":6171,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6140,"src":"2968:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6169,"name":"ProxyCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6067,"src":"2947:13:47","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_SafeProxy_$6056_$_t_address_$returns$__$","typeString":"function (contract SafeProxy,address)"}},"id":6172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2947:32:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6173,"nodeType":"EmitStatement","src":"2942:37:47"}]},"documentation":{"id":6138,"nodeType":"StructuredDocumentation","src":"2049:461:47","text":" @notice Deploys a new proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\n @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n @param initializer Payload for a message call to be sent to a new proxy contract.\n @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract."},"functionSelector":"1688f0b9","id":6175,"implemented":true,"kind":"function","modifiers":[],"name":"createProxyWithNonce","nodeType":"FunctionDefinition","parameters":{"id":6145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6140,"mutability":"mutable","name":"_singleton","nodeType":"VariableDeclaration","scope":6175,"src":"2545:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6139,"name":"address","nodeType":"ElementaryTypeName","src":"2545:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6142,"mutability":"mutable","name":"initializer","nodeType":"VariableDeclaration","scope":6175,"src":"2565:24:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6141,"name":"bytes","nodeType":"ElementaryTypeName","src":"2565:5:47","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6144,"mutability":"mutable","name":"saltNonce","nodeType":"VariableDeclaration","scope":6175,"src":"2591:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6143,"name":"uint256","nodeType":"ElementaryTypeName","src":"2591:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2544:65:47"},"returnParameters":{"id":6148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6147,"mutability":"mutable","name":"proxy","nodeType":"VariableDeclaration","scope":6175,"src":"2626:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},"typeName":{"id":6146,"name":"SafeProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":6056,"src":"2626:9:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"visibility":"internal"}],"src":"2625:17:47"},"scope":6301,"src":"2515:471:47","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6214,"nodeType":"Block","src":"3913:357:47","statements":[{"assignments":[6188],"declarations":[{"constant":false,"id":6188,"mutability":"mutable","name":"salt","nodeType":"VariableDeclaration","scope":6214,"src":"4065:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6187,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4065:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":6200,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":6193,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"4117:11:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6192,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4107:9:47","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4107:22:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6195,"name":"saltNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6182,"src":"4131:9:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":6196,"name":"getChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6300,"src":"4142:10:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":6197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4142:12:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6190,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4090:3:47","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"4090:16:47","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4090:65:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6189,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4080:9:47","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4080:76:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4065:91:47"},{"expression":{"id":6207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6201,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6185,"src":"4166:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6203,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"4186:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6204,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"4198:11:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6205,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6188,"src":"4211:4:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6202,"name":"deployProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6137,"src":"4174:11:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_contract$_SafeProxy_$6056_$","typeString":"function (address,bytes memory,bytes32) returns (contract SafeProxy)"}},"id":6206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4174:42:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"src":"4166:50:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"id":6208,"nodeType":"ExpressionStatement","src":"4166:50:47"},{"eventCall":{"arguments":[{"id":6210,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6185,"src":"4245:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},{"id":6211,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"4252:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6209,"name":"ProxyCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6067,"src":"4231:13:47","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_SafeProxy_$6056_$_t_address_$returns$__$","typeString":"function (contract SafeProxy,address)"}},"id":6212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4231:32:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6213,"nodeType":"EmitStatement","src":"4226:37:47"}]},"documentation":{"id":6176,"nodeType":"StructuredDocumentation","src":"2992:745:47","text":" @notice Deploys a new chain-specific proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\n @dev Allows to create a new proxy contract that should exist only on 1 network (e.g. specific governance or admin accounts)\n      by including the chain id in the create2 salt. Such proxies cannot be created on other networks by replaying the transaction.\n @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n @param initializer Payload for a message call to be sent to a new proxy contract.\n @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract."},"functionSelector":"ec9e80bb","id":6215,"implemented":true,"kind":"function","modifiers":[],"name":"createChainSpecificProxyWithNonce","nodeType":"FunctionDefinition","parameters":{"id":6183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6178,"mutability":"mutable","name":"_singleton","nodeType":"VariableDeclaration","scope":6215,"src":"3794:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6177,"name":"address","nodeType":"ElementaryTypeName","src":"3794:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6180,"mutability":"mutable","name":"initializer","nodeType":"VariableDeclaration","scope":6215,"src":"3822:24:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6179,"name":"bytes","nodeType":"ElementaryTypeName","src":"3822:5:47","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6182,"mutability":"mutable","name":"saltNonce","nodeType":"VariableDeclaration","scope":6215,"src":"3856:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6181,"name":"uint256","nodeType":"ElementaryTypeName","src":"3856:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3784:95:47"},"returnParameters":{"id":6186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6185,"mutability":"mutable","name":"proxy","nodeType":"VariableDeclaration","scope":6215,"src":"3896:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},"typeName":{"id":6184,"name":"SafeProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":6056,"src":"3896:9:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"visibility":"internal"}],"src":"3895:17:47"},"scope":6301,"src":"3742:528:47","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6269,"nodeType":"Block","src":"5138:303:47","statements":[{"assignments":[6230],"declarations":[{"constant":false,"id":6230,"mutability":"mutable","name":"saltNonceWithCallback","nodeType":"VariableDeclaration","scope":6269,"src":"5148:29:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6229,"name":"uint256","nodeType":"ElementaryTypeName","src":"5148:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6241,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":6236,"name":"saltNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6222,"src":"5215:9:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6237,"name":"callback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6224,"src":"5226:8:47","typeDescriptions":{"typeIdentifier":"t_contract$_IProxyCreationCallback_$6016","typeString":"contract IProxyCreationCallback"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProxyCreationCallback_$6016","typeString":"contract IProxyCreationCallback"}],"expression":{"id":6234,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5198:3:47","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5198:16:47","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5198:37:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6233,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5188:9:47","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5188:48:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5180:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6231,"name":"uint256","nodeType":"ElementaryTypeName","src":"5180:7:47","typeDescriptions":{}}},"id":6240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5180:57:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5148:89:47"},{"expression":{"id":6248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6242,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6227,"src":"5247:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6244,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6218,"src":"5276:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6245,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6220,"src":"5288:11:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6246,"name":"saltNonceWithCallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6230,"src":"5301:21:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6243,"name":"createProxyWithNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6175,"src":"5255:20:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_contract$_SafeProxy_$6056_$","typeString":"function (address,bytes memory,uint256) returns (contract SafeProxy)"}},"id":6247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5255:68:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"src":"5247:76:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"id":6249,"nodeType":"ExpressionStatement","src":"5247:76:47"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6252,"name":"callback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6224,"src":"5345:8:47","typeDescriptions":{"typeIdentifier":"t_contract$_IProxyCreationCallback_$6016","typeString":"contract IProxyCreationCallback"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProxyCreationCallback_$6016","typeString":"contract IProxyCreationCallback"}],"id":6251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5337:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6250,"name":"address","nodeType":"ElementaryTypeName","src":"5337:7:47","typeDescriptions":{}}},"id":6253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5337:17:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5366: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":6255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5358:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6254,"name":"address","nodeType":"ElementaryTypeName","src":"5358:7:47","typeDescriptions":{}}},"id":6257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5358:10:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"5337:31:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6268,"nodeType":"IfStatement","src":"5333:101:47","trueBody":{"expression":{"arguments":[{"id":6262,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6227,"src":"5392:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},{"id":6263,"name":"_singleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6218,"src":"5399:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6264,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6220,"src":"5411:11:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6265,"name":"saltNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6222,"src":"5424:9:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6259,"name":"callback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6224,"src":"5370:8:47","typeDescriptions":{"typeIdentifier":"t_contract$_IProxyCreationCallback_$6016","typeString":"contract IProxyCreationCallback"}},"id":6261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"proxyCreated","nodeType":"MemberAccess","referencedDeclaration":6015,"src":"5370:21:47","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_SafeProxy_$6056_$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (contract SafeProxy,address,bytes memory,uint256) external"}},"id":6266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5370:64:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6267,"nodeType":"ExpressionStatement","src":"5370:64:47"}}]},"documentation":{"id":6216,"nodeType":"StructuredDocumentation","src":"4276:655:47","text":" @notice Deploy a new proxy with `_singleton` singleton and `saltNonce` salt.\n         Optionally executes an initializer call to a new proxy and calls a specified callback address `callback`.\n @param _singleton Address of singleton contract. Must be deployed at the time of execution.\n @param initializer Payload for a message call to be sent to a new proxy contract.\n @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\n @param callback Callback that will be invoked after the new proxy contract has been successfully deployed and initialized."},"functionSelector":"d18af54d","id":6270,"implemented":true,"kind":"function","modifiers":[],"name":"createProxyWithCallback","nodeType":"FunctionDefinition","parameters":{"id":6225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6218,"mutability":"mutable","name":"_singleton","nodeType":"VariableDeclaration","scope":6270,"src":"4978:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6217,"name":"address","nodeType":"ElementaryTypeName","src":"4978:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6220,"mutability":"mutable","name":"initializer","nodeType":"VariableDeclaration","scope":6270,"src":"5006:24:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6219,"name":"bytes","nodeType":"ElementaryTypeName","src":"5006:5:47","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6222,"mutability":"mutable","name":"saltNonce","nodeType":"VariableDeclaration","scope":6270,"src":"5040:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6221,"name":"uint256","nodeType":"ElementaryTypeName","src":"5040:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6224,"mutability":"mutable","name":"callback","nodeType":"VariableDeclaration","scope":6270,"src":"5067:31:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProxyCreationCallback_$6016","typeString":"contract IProxyCreationCallback"},"typeName":{"id":6223,"name":"IProxyCreationCallback","nodeType":"UserDefinedTypeName","referencedDeclaration":6016,"src":"5067:22:47","typeDescriptions":{"typeIdentifier":"t_contract$_IProxyCreationCallback_$6016","typeString":"contract IProxyCreationCallback"}},"visibility":"internal"}],"src":"4968:136:47"},"returnParameters":{"id":6228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6227,"mutability":"mutable","name":"proxy","nodeType":"VariableDeclaration","scope":6270,"src":"5121:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"},"typeName":{"id":6226,"name":"SafeProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":6056,"src":"5121:9:47","typeDescriptions":{"typeIdentifier":"t_contract$_SafeProxy_$6056","typeString":"contract SafeProxy"}},"visibility":"internal"}],"src":"5120:17:47"},"scope":6301,"src":"4936:505:47","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6286,"nodeType":"Block","src":"5859:180:47","statements":[{"assignments":[6279],"declarations":[{"constant":false,"id":6279,"mutability":"mutable","name":"size","nodeType":"VariableDeclaration","scope":6286,"src":"5869:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6278,"name":"uint256","nodeType":"ElementaryTypeName","src":"5869:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6280,"nodeType":"VariableDeclarationStatement","src":"5869:12:47"},{"AST":{"nodeType":"YulBlock","src":"5956:52:47","statements":[{"nodeType":"YulAssignment","src":"5970:28:47","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"5990:7:47"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"5978:11:47"},"nodeType":"YulFunctionCall","src":"5978:20:47"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"5970:4:47"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":6273,"isOffset":false,"isSlot":false,"src":"5990:7:47","valueSize":1},{"declaration":6279,"isOffset":false,"isSlot":false,"src":"5970:4:47","valueSize":1}],"id":6281,"nodeType":"InlineAssembly","src":"5947:61:47"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6282,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6279,"src":"6024:4:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6031:1:47","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6024:8:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6277,"id":6285,"nodeType":"Return","src":"6017:15:47"}]},"documentation":{"id":6271,"nodeType":"StructuredDocumentation","src":"5447:341:47","text":" @notice Returns true if `account` is a contract.\n @dev This function will return false if invoked during the constructor of a contract,\n      as the code is not actually created until after the constructor finishes.\n @param account The address being queried\n @return True if `account` is a contract"},"id":6287,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nodeType":"FunctionDefinition","parameters":{"id":6274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6273,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":6287,"src":"5813:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6272,"name":"address","nodeType":"ElementaryTypeName","src":"5813:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5812:17:47"},"returnParameters":{"id":6277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6276,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":6287,"src":"5853:4:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6275,"name":"bool","nodeType":"ElementaryTypeName","src":"5853:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5852:6:47"},"scope":6301,"src":"5793:246:47","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6299,"nodeType":"Block","src":"6252:159:47","statements":[{"assignments":[6294],"declarations":[{"constant":false,"id":6294,"mutability":"mutable","name":"id","nodeType":"VariableDeclaration","scope":6299,"src":"6262:10:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6293,"name":"uint256","nodeType":"ElementaryTypeName","src":"6262:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6295,"nodeType":"VariableDeclarationStatement","src":"6262:10:47"},{"AST":{"nodeType":"YulBlock","src":"6347:39:47","statements":[{"nodeType":"YulAssignment","src":"6361:15:47","value":{"arguments":[],"functionName":{"name":"chainid","nodeType":"YulIdentifier","src":"6367:7:47"},"nodeType":"YulFunctionCall","src":"6367:9:47"},"variableNames":[{"name":"id","nodeType":"YulIdentifier","src":"6361:2:47"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":6294,"isOffset":false,"isSlot":false,"src":"6361:2:47","valueSize":1}],"id":6296,"nodeType":"InlineAssembly","src":"6338:48:47"},{"expression":{"id":6297,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6294,"src":"6402:2:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6292,"id":6298,"nodeType":"Return","src":"6395:9:47"}]},"documentation":{"id":6288,"nodeType":"StructuredDocumentation","src":"6045:150:47","text":" @notice Returns the ID of the chain the contract is currently deployed on.\n @return The ID of the current chain as a uint256."},"functionSelector":"3408e470","id":6300,"implemented":true,"kind":"function","modifiers":[],"name":"getChainId","nodeType":"FunctionDefinition","parameters":{"id":6289,"nodeType":"ParameterList","parameters":[],"src":"6219:2:47"},"returnParameters":{"id":6292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6291,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":6300,"src":"6243:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6290,"name":"uint256","nodeType":"ElementaryTypeName","src":"6243:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6242:9:47"},"scope":6301,"src":"6200:211:47","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":6302,"src":"318:6095:47"}],"src":"42:6372:47"},"id":47},"contracts/test/4337/Test4337ModuleAndHandler.sol":{"ast":{"absolutePath":"contracts/test/4337/Test4337ModuleAndHandler.sol","exportedSymbols":{"ISafe":[6342],"SafeStorage":[5357],"Test4337ModuleAndHandler":[6490],"UserOperation":[6328]},"id":6491,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":6303,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:48"},{"id":6304,"literals":["abicoder","v2"],"nodeType":"PragmaDirective","src":"74:19:48"},{"absolutePath":"contracts/libraries/SafeStorage.sol","file":"../../libraries/SafeStorage.sol","id":6305,"nodeType":"ImportDirective","scope":6491,"sourceUnit":5358,"src":"95:41:48","symbolAliases":[],"unitAlias":""},{"canonicalName":"UserOperation","id":6328,"members":[{"constant":false,"id":6307,"mutability":"mutable","name":"sender","nodeType":"VariableDeclaration","scope":6328,"src":"165:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6306,"name":"address","nodeType":"ElementaryTypeName","src":"165:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6309,"mutability":"mutable","name":"nonce","nodeType":"VariableDeclaration","scope":6328,"src":"185:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6308,"name":"uint256","nodeType":"ElementaryTypeName","src":"185:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6311,"mutability":"mutable","name":"initCode","nodeType":"VariableDeclaration","scope":6328,"src":"204:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":6310,"name":"bytes","nodeType":"ElementaryTypeName","src":"204:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6313,"mutability":"mutable","name":"callData","nodeType":"VariableDeclaration","scope":6328,"src":"224:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":6312,"name":"bytes","nodeType":"ElementaryTypeName","src":"224:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6315,"mutability":"mutable","name":"callGasLimit","nodeType":"VariableDeclaration","scope":6328,"src":"244:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6314,"name":"uint256","nodeType":"ElementaryTypeName","src":"244:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6317,"mutability":"mutable","name":"verificationGasLimit","nodeType":"VariableDeclaration","scope":6328,"src":"270:28:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6316,"name":"uint256","nodeType":"ElementaryTypeName","src":"270:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6319,"mutability":"mutable","name":"preVerificationGas","nodeType":"VariableDeclaration","scope":6328,"src":"304:26:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6318,"name":"uint256","nodeType":"ElementaryTypeName","src":"304:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6321,"mutability":"mutable","name":"maxFeePerGas","nodeType":"VariableDeclaration","scope":6328,"src":"336:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6320,"name":"uint256","nodeType":"ElementaryTypeName","src":"336:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6323,"mutability":"mutable","name":"maxPriorityFeePerGas","nodeType":"VariableDeclaration","scope":6328,"src":"362:28:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6322,"name":"uint256","nodeType":"ElementaryTypeName","src":"362:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6325,"mutability":"mutable","name":"paymasterAndData","nodeType":"VariableDeclaration","scope":6328,"src":"396:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":6324,"name":"bytes","nodeType":"ElementaryTypeName","src":"396:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6327,"mutability":"mutable","name":"signature","nodeType":"VariableDeclaration","scope":6328,"src":"424:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":6326,"name":"bytes","nodeType":"ElementaryTypeName","src":"424:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"UserOperation","nodeType":"StructDefinition","scope":6491,"src":"138:304:48","visibility":"public"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6342,"linearizedBaseContracts":[6342],"name":"ISafe","nodeType":"ContractDefinition","nodes":[{"functionSelector":"468721a7","id":6341,"implemented":false,"kind":"function","modifiers":[],"name":"execTransactionFromModule","nodeType":"FunctionDefinition","parameters":{"id":6337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6330,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":6341,"src":"501:10:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6329,"name":"address","nodeType":"ElementaryTypeName","src":"501:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6332,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":6341,"src":"513:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6331,"name":"uint256","nodeType":"ElementaryTypeName","src":"513:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6334,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":6341,"src":"528:17:48","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6333,"name":"bytes","nodeType":"ElementaryTypeName","src":"528:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6336,"mutability":"mutable","name":"operation","nodeType":"VariableDeclaration","scope":6341,"src":"547:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6335,"name":"uint8","nodeType":"ElementaryTypeName","src":"547:5:48","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"500:63:48"},"returnParameters":{"id":6340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6339,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":6341,"src":"582:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6338,"name":"bool","nodeType":"ElementaryTypeName","src":"582:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"581:14:48"},"scope":6342,"src":"466:130:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6491,"src":"444:154:48"},{"abstract":false,"baseContracts":[{"baseName":{"id":6344,"name":"SafeStorage","nodeType":"UserDefinedTypeName","referencedDeclaration":5357,"src":"940:11:48","typeDescriptions":{"typeIdentifier":"t_contract$_SafeStorage_$5357","typeString":"contract SafeStorage"}},"id":6345,"nodeType":"InheritanceSpecifier","src":"940:11:48"}],"contractDependencies":[5357],"contractKind":"contract","documentation":{"id":6343,"nodeType":"StructuredDocumentation","src":"600:303:48","text":"@dev A Dummy 4337 Module/Handler for testing purposes\n      ⚠️ ⚠️ ⚠️ DO NOT USE IN PRODUCTION ⚠️ ⚠️ ⚠️\n      The module does not perform ANY validation, it just executes validateUserOp and execTransaction\n      to perform the opcode level compliance by the bundler."},"fullyImplemented":true,"id":6490,"linearizedBaseContracts":[6490,5357],"name":"Test4337ModuleAndHandler","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"26b85ee1","id":6347,"mutability":"immutable","name":"myAddress","nodeType":"VariableDeclaration","scope":6490,"src":"958:34:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6346,"name":"address","nodeType":"ElementaryTypeName","src":"958:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"b0d691fe","id":6349,"mutability":"immutable","name":"entryPoint","nodeType":"VariableDeclaration","scope":6490,"src":"998:35:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6348,"name":"address","nodeType":"ElementaryTypeName","src":"998:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":true,"id":6355,"mutability":"constant","name":"SENTINEL_MODULES","nodeType":"VariableDeclaration","scope":6490,"src":"1040:57:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6350,"name":"address","nodeType":"ElementaryTypeName","src":"1040:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"307831","id":6353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1093:3:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":6352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1085:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6351,"name":"address","nodeType":"ElementaryTypeName","src":"1085:7:48","typeDescriptions":{}}},"id":6354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1085:12:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"body":{"id":6371,"nodeType":"Block","src":"1143:82:48","statements":[{"expression":{"id":6362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6360,"name":"entryPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6349,"src":"1153:10:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6361,"name":"entryPointAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"1166:17:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1153:30:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6363,"nodeType":"ExpressionStatement","src":"1153:30:48"},{"expression":{"id":6369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6364,"name":"myAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6347,"src":"1193:9:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6367,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1213:4:48","typeDescriptions":{"typeIdentifier":"t_contract$_Test4337ModuleAndHandler_$6490","typeString":"contract Test4337ModuleAndHandler"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Test4337ModuleAndHandler_$6490","typeString":"contract Test4337ModuleAndHandler"}],"id":6366,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1205:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6365,"name":"address","nodeType":"ElementaryTypeName","src":"1205:7:48","typeDescriptions":{}}},"id":6368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1205:13:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1193:25:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6370,"nodeType":"ExpressionStatement","src":"1193:25:48"}]},"id":6372,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":6358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6357,"mutability":"mutable","name":"entryPointAddress","nodeType":"VariableDeclaration","scope":6372,"src":"1116:25:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6356,"name":"address","nodeType":"ElementaryTypeName","src":"1116:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1115:27:48"},"returnParameters":{"id":6359,"nodeType":"ParameterList","parameters":[],"src":"1143:0:48"},"scope":6490,"src":"1104:121:48","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6413,"nodeType":"Block","src":"1366:276:48","statements":[{"assignments":[6384],"declarations":[{"constant":false,"id":6384,"mutability":"mutable","name":"safeAddress","nodeType":"VariableDeclaration","scope":6413,"src":"1376:27:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6383,"name":"address","nodeType":"ElementaryTypeName","src":"1376:15:48","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"id":6390,"initialValue":{"arguments":[{"expression":{"id":6387,"name":"userOp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6374,"src":"1414:6:48","typeDescriptions":{"typeIdentifier":"t_struct$_UserOperation_$6328_calldata_ptr","typeString":"struct UserOperation calldata"}},"id":6388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":6307,"src":"1414:13:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6386,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1406:8:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":6385,"name":"address","nodeType":"ElementaryTypeName","src":"1406:8:48","stateMutability":"payable","typeDescriptions":{}}},"id":6389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1406:22:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"1376:52:48"},{"assignments":[6392],"declarations":[{"constant":false,"id":6392,"mutability":"mutable","name":"senderSafe","nodeType":"VariableDeclaration","scope":6413,"src":"1438:16:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"},"typeName":{"id":6391,"name":"ISafe","nodeType":"UserDefinedTypeName","referencedDeclaration":6342,"src":"1438:5:48","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"}},"visibility":"internal"}],"id":6396,"initialValue":{"arguments":[{"id":6394,"name":"safeAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6384,"src":"1463:11:48","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":6393,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6342,"src":"1457:5:48","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$6342_$","typeString":"type(contract ISafe)"}},"id":6395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1457:18:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"}},"nodeType":"VariableDeclarationStatement","src":"1438:37:48"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6397,"name":"missingAccountFunds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6378,"src":"1490:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1513:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1490:24:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6410,"nodeType":"IfStatement","src":"1486:131:48","trueBody":{"id":6409,"nodeType":"Block","src":"1516:101:48","statements":[{"expression":{"arguments":[{"id":6403,"name":"entryPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6349,"src":"1567:10:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6404,"name":"missingAccountFunds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6378,"src":"1579:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":6405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1600:2:48","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"hexValue":"30","id":6406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1604:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":6400,"name":"senderSafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6392,"src":"1530:10:48","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"}},"id":6402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"execTransactionFromModule","nodeType":"MemberAccess","referencedDeclaration":6341,"src":"1530:36:48","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint8_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,uint8) external returns (bool)"}},"id":6407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1530:76:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6408,"nodeType":"ExpressionStatement","src":"1530:76:48"}]}},{"expression":{"hexValue":"30","id":6411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1634:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":6382,"id":6412,"nodeType":"Return","src":"1627:8:48"}]},"functionSelector":"3a871cdd","id":6414,"implemented":true,"kind":"function","modifiers":[],"name":"validateUserOp","nodeType":"FunctionDefinition","parameters":{"id":6379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6374,"mutability":"mutable","name":"userOp","nodeType":"VariableDeclaration","scope":6414,"src":"1255:29:48","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UserOperation_$6328_calldata_ptr","typeString":"struct UserOperation"},"typeName":{"id":6373,"name":"UserOperation","nodeType":"UserDefinedTypeName","referencedDeclaration":6328,"src":"1255:13:48","typeDescriptions":{"typeIdentifier":"t_struct$_UserOperation_$6328_storage_ptr","typeString":"struct UserOperation"}},"visibility":"internal"},{"constant":false,"id":6376,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":6414,"src":"1286:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6375,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1286:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6378,"mutability":"mutable","name":"missingAccountFunds","nodeType":"VariableDeclaration","scope":6414,"src":"1295:27:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6377,"name":"uint256","nodeType":"ElementaryTypeName","src":"1295:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1254:69:48"},"returnParameters":{"id":6382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6381,"mutability":"mutable","name":"validationData","nodeType":"VariableDeclaration","scope":6414,"src":"1342:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:24:48"},"scope":6490,"src":"1231:411:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6448,"nodeType":"Block","src":"1738:189:48","statements":[{"assignments":[6424],"declarations":[{"constant":false,"id":6424,"mutability":"mutable","name":"safeAddress","nodeType":"VariableDeclaration","scope":6448,"src":"1748:27:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6423,"name":"address","nodeType":"ElementaryTypeName","src":"1748:15:48","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"id":6430,"initialValue":{"arguments":[{"expression":{"id":6427,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1786:3:48","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1786:10:48","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":6426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1778:8:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":6425,"name":"address","nodeType":"ElementaryTypeName","src":"1778:8:48","stateMutability":"payable","typeDescriptions":{}}},"id":6429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1778:19:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"1748:49:48"},{"assignments":[6432],"declarations":[{"constant":false,"id":6432,"mutability":"mutable","name":"safe","nodeType":"VariableDeclaration","scope":6448,"src":"1807:10:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"},"typeName":{"id":6431,"name":"ISafe","nodeType":"UserDefinedTypeName","referencedDeclaration":6342,"src":"1807:5:48","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"}},"visibility":"internal"}],"id":6436,"initialValue":{"arguments":[{"id":6434,"name":"safeAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6424,"src":"1826:11:48","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":6433,"name":"ISafe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6342,"src":"1820:5:48","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISafe_$6342_$","typeString":"type(contract ISafe)"}},"id":6435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1820:18:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"}},"nodeType":"VariableDeclarationStatement","src":"1807:31:48"},{"expression":{"arguments":[{"arguments":[{"id":6440,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6416,"src":"1887:2:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6441,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6418,"src":"1891:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6442,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6420,"src":"1898:4:48","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"30","id":6443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1904:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":6438,"name":"safe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6432,"src":"1856:4:48","typeDescriptions":{"typeIdentifier":"t_contract$_ISafe_$6342","typeString":"contract ISafe"}},"id":6439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"execTransactionFromModule","nodeType":"MemberAccess","referencedDeclaration":6341,"src":"1856:30:48","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint8_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,uint8) external returns (bool)"}},"id":6444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1856:50:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7478206661696c6564","id":6445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1908:11:48","typeDescriptions":{"typeIdentifier":"t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2","typeString":"literal_string \"tx failed\""},"value":"tx failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2","typeString":"literal_string \"tx failed\""}],"id":6437,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1848:7:48","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1848:72:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6447,"nodeType":"ExpressionStatement","src":"1848:72:48"}]},"functionSelector":"ab4ed83e","id":6449,"implemented":true,"kind":"function","modifiers":[],"name":"execTransaction","nodeType":"FunctionDefinition","parameters":{"id":6421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6416,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":6449,"src":"1673:10:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6415,"name":"address","nodeType":"ElementaryTypeName","src":"1673:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6418,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":6449,"src":"1685:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6417,"name":"uint256","nodeType":"ElementaryTypeName","src":"1685:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6420,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":6449,"src":"1700:19:48","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":6419,"name":"bytes","nodeType":"ElementaryTypeName","src":"1700:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1672:48:48"},"returnParameters":{"id":6422,"nodeType":"ParameterList","parameters":[],"src":"1738:0:48"},"scope":6490,"src":"1648:279:48","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":6488,"nodeType":"Block","src":"1964:290:48","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6453,"name":"myAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6347,"src":"1982:9:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":6456,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2003:4:48","typeDescriptions":{"typeIdentifier":"t_contract$_Test4337ModuleAndHandler_$6490","typeString":"contract Test4337ModuleAndHandler"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Test4337ModuleAndHandler_$6490","typeString":"contract Test4337ModuleAndHandler"}],"id":6455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1995:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6454,"name":"address","nodeType":"ElementaryTypeName","src":"1995:7:48","typeDescriptions":{}}},"id":6457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1995:13:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1982:26:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"596f75206e65656420746f2044454c454741544543414c4c2c20736972","id":6459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2010:31:48","typeDescriptions":{"typeIdentifier":"t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467","typeString":"literal_string \"You need to DELEGATECALL, sir\""},"value":"You need to DELEGATECALL, sir"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467","typeString":"literal_string \"You need to DELEGATECALL, sir\""}],"id":6452,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1974:7:48","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1974:68:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6461,"nodeType":"ExpressionStatement","src":"1974:68:48"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":6463,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"2102:7:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":6465,"indexExpression":{"id":6464,"name":"myAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6347,"src":"2110:9:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2102:18:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2132:1:48","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":6467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2124:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6466,"name":"address","nodeType":"ElementaryTypeName","src":"2124:7:48","typeDescriptions":{}}},"id":6469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2124:10:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2102:32:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4753313032","id":6471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2136:7:48","typeDescriptions":{"typeIdentifier":"t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12","typeString":"literal_string \"GS102\""},"value":"GS102"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12","typeString":"literal_string \"GS102\""}],"id":6462,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2094:7:48","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2094:50:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6473,"nodeType":"ExpressionStatement","src":"2094:50:48"},{"expression":{"id":6480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6474,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"2154:7:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":6476,"indexExpression":{"id":6475,"name":"myAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6347,"src":"2162:9:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2154:18:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":6477,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"2175:7:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":6479,"indexExpression":{"id":6478,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6355,"src":"2183:16:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2175:25:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2154:46:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6481,"nodeType":"ExpressionStatement","src":"2154:46:48"},{"expression":{"id":6486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6482,"name":"modules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"2210:7:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":6484,"indexExpression":{"id":6483,"name":"SENTINEL_MODULES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6355,"src":"2218:16:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2210:25:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6485,"name":"myAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6347,"src":"2238:9:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2210:37:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6487,"nodeType":"ExpressionStatement","src":"2210:37:48"}]},"functionSelector":"a798b2b1","id":6489,"implemented":true,"kind":"function","modifiers":[],"name":"enableMyself","nodeType":"FunctionDefinition","parameters":{"id":6450,"nodeType":"ParameterList","parameters":[],"src":"1954:2:48"},"returnParameters":{"id":6451,"nodeType":"ParameterList","parameters":[],"src":"1964:0:48"},"scope":6490,"src":"1933:321:48","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":6491,"src":"903:1353:48"}],"src":"42:2215:48"},"id":48},"contracts/test/ERC1155Token.sol":{"ast":{"absolutePath":"contracts/test/ERC1155Token.sol","exportedSymbols":{"ERC1155Token":[6727],"ERC1155TokenReceiver":[4942],"SafeMath":[4501]},"id":6728,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":6492,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:49"},{"absolutePath":"contracts/interfaces/ERC1155TokenReceiver.sol","file":"../interfaces/ERC1155TokenReceiver.sol","id":6493,"nodeType":"ImportDirective","scope":6728,"sourceUnit":4943,"src":"75:48:49","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/external/SafeMath.sol","file":"../external/SafeMath.sol","id":6494,"nodeType":"ImportDirective","scope":6728,"sourceUnit":4502,"src":"124:34:49","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":6495,"nodeType":"StructuredDocumentation","src":"160:62:49","text":" @title ERC1155Token - A test ERC1155 token contract"},"fullyImplemented":true,"id":6727,"linearizedBaseContracts":[6727],"name":"ERC1155Token","nodeType":"ContractDefinition","nodes":[{"id":6498,"libraryName":{"id":6496,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":4501,"src":"257:8:49","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$4501","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"251:27:49","typeName":{"id":6497,"name":"uint256","nodeType":"ElementaryTypeName","src":"270:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":6504,"mutability":"mutable","name":"_balances","nodeType":"VariableDeclaration","scope":6727,"src":"331:65:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"},"typeName":{"id":6503,"keyType":{"id":6499,"name":"uint256","nodeType":"ElementaryTypeName","src":"339:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"331:47:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"},"valueType":{"id":6502,"keyType":{"id":6500,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"350:27:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":6501,"name":"uint256","nodeType":"ElementaryTypeName","src":"369:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":6510,"mutability":"mutable","name":"_operatorApprovals","nodeType":"VariableDeclaration","scope":6727,"src":"451:71:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"},"typeName":{"id":6509,"keyType":{"id":6505,"name":"address","nodeType":"ElementaryTypeName","src":"459:7:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"451:44:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"},"valueType":{"id":6508,"keyType":{"id":6506,"name":"address","nodeType":"ElementaryTypeName","src":"478:7:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"470:24:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":6507,"name":"bool","nodeType":"ElementaryTypeName","src":"489:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}},"visibility":"private"},{"body":{"id":6536,"nodeType":"Block","src":"845:129:49","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6521,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6513,"src":"863:5:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"880:1:49","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":6523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"872:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6522,"name":"address","nodeType":"ElementaryTypeName","src":"872:7:49","typeDescriptions":{}}},"id":6525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"872:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"863:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373","id":6527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"884:45:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f4de6a436172e7f7b1540476031cb037fc18ede9cc346a56da1697cbd352aa9","typeString":"literal_string \"ERC1155: balance query for the zero address\""},"value":"ERC1155: balance query for the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f4de6a436172e7f7b1540476031cb037fc18ede9cc346a56da1697cbd352aa9","typeString":"literal_string \"ERC1155: balance query for the zero address\""}],"id":6520,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"855:7:49","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"855:75:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6529,"nodeType":"ExpressionStatement","src":"855:75:49"},{"expression":{"baseExpression":{"baseExpression":{"id":6530,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6504,"src":"947:9:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":6532,"indexExpression":{"id":6531,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6515,"src":"957:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"947:13:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6534,"indexExpression":{"id":6533,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6513,"src":"961:5:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"947:20:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6519,"id":6535,"nodeType":"Return","src":"940:27:49"}]},"documentation":{"id":6511,"nodeType":"StructuredDocumentation","src":"529:235:49","text":" @dev Get the specified address' balance for token with specified ID.\n @param owner The address of the token holder\n @param id ID of the token\n @return The owner's balance of the token type requested"},"functionSelector":"00fdd58e","id":6537,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nodeType":"FunctionDefinition","parameters":{"id":6516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6513,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":6537,"src":"788:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6512,"name":"address","nodeType":"ElementaryTypeName","src":"788:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6515,"mutability":"mutable","name":"id","nodeType":"VariableDeclaration","scope":6537,"src":"803:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6514,"name":"uint256","nodeType":"ElementaryTypeName","src":"803:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"787:27:49"},"returnParameters":{"id":6519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6518,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":6537,"src":"836:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6517,"name":"uint256","nodeType":"ElementaryTypeName","src":"836:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"835:9:49"},"scope":6727,"src":"769:205:49","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":6616,"nodeType":"Block","src":"1649:460:49","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6552,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"1667:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1681:1:49","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":6554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1673:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6553,"name":"address","nodeType":"ElementaryTypeName","src":"1673:7:49","typeDescriptions":{}}},"id":6556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1673:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1667:16:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f","id":6558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1685:42:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_27e9709d7b383cbb3da52b4dd7d393e8e9934271a7b9c0afe05a8be1f2b0321f","typeString":"literal_string \"ERC1155: target address must be non-zero\""},"value":"ERC1155: target address must be non-zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_27e9709d7b383cbb3da52b4dd7d393e8e9934271a7b9c0afe05a8be1f2b0321f","typeString":"literal_string \"ERC1155: target address must be non-zero\""}],"id":6551,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1659:7:49","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1659:69:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6560,"nodeType":"ExpressionStatement","src":"1659:69:49"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6562,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6540,"src":"1759:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":6563,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1767:3:49","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1767:10:49","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1759:18:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":6566,"name":"_operatorApprovals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6510,"src":"1781:18:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":6568,"indexExpression":{"id":6567,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6540,"src":"1800:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1781:24:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":6571,"indexExpression":{"expression":{"id":6569,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1806:3:49","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1806:10:49","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1781:36:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":6572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1821:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1781:44:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1759:66:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e","id":6575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1839:58:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_d24e8bd2be59f2f2cd9e29721be8ace2141eaffefd4f01fbcbae98946443b091","typeString":"literal_string \"ERC1155: need operator approval for 3rd party transfers.\""},"value":"ERC1155: need operator approval for 3rd party transfers."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d24e8bd2be59f2f2cd9e29721be8ace2141eaffefd4f01fbcbae98946443b091","typeString":"literal_string \"ERC1155: need operator approval for 3rd party transfers.\""}],"id":6561,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1738:7:49","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1738:169:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6577,"nodeType":"ExpressionStatement","src":"1738:169:49"},{"expression":{"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":6578,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6504,"src":"1918:9:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":6581,"indexExpression":{"id":6579,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6544,"src":"1928:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1918:13:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6582,"indexExpression":{"id":6580,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6540,"src":"1932:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1918:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":6583,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6504,"src":"1940:9:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":6585,"indexExpression":{"id":6584,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6544,"src":"1950:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1940:13:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6587,"indexExpression":{"id":6586,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6540,"src":"1954:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1940:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6588,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6546,"src":"1962:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1940:27:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1918:49:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6591,"nodeType":"ExpressionStatement","src":"1918:49:49"},{"expression":{"id":6604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":6592,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6504,"src":"1977:9:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":6595,"indexExpression":{"id":6593,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6544,"src":"1987:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1977:13:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6596,"indexExpression":{"id":6594,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"1991:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1977:17:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6546,"src":"1997:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"baseExpression":{"id":6598,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6504,"src":"2005:9:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":6600,"indexExpression":{"id":6599,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6544,"src":"2015:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2005:13:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6602,"indexExpression":{"id":6601,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"2019:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2005:17:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1997:25:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1977:45:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6605,"nodeType":"ExpressionStatement","src":"1977:45:49"},{"expression":{"arguments":[{"expression":{"id":6607,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2064:3:49","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2064:10:49","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":6609,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6540,"src":"2076:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6610,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"2082:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6611,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6544,"src":"2086:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6612,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6546,"src":"2090:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6613,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6548,"src":"2097:4:49","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":6606,"name":"_doSafeTransferAcceptanceCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6726,"src":"2033:30:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint256,bytes memory)"}},"id":6614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2033:69:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6615,"nodeType":"ExpressionStatement","src":"2033:69:49"}]},"documentation":{"id":6538,"nodeType":"StructuredDocumentation","src":"980:555:49","text":" @notice Transfers `value` amount of an `id` from the `from` address to the `to` address specified.\n         Caller must be approved to manage the tokens being transferred out of the `from` account.\n         If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\n @param from Source address\n @param to Target address\n @param id ID of the token type\n @param value Transfer amount\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver"},"functionSelector":"f242432a","id":6617,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nodeType":"FunctionDefinition","parameters":{"id":6549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6540,"mutability":"mutable","name":"from","nodeType":"VariableDeclaration","scope":6617,"src":"1566:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6539,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6542,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":6617,"src":"1580:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6541,"name":"address","nodeType":"ElementaryTypeName","src":"1580:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6544,"mutability":"mutable","name":"id","nodeType":"VariableDeclaration","scope":6617,"src":"1592:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6543,"name":"uint256","nodeType":"ElementaryTypeName","src":"1592:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6546,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":6617,"src":"1604:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6545,"name":"uint256","nodeType":"ElementaryTypeName","src":"1604:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6548,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":6617,"src":"1619:19:49","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":6547,"name":"bytes","nodeType":"ElementaryTypeName","src":"1619:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1565:74:49"},"returnParameters":{"id":6550,"nodeType":"ParameterList","parameters":[],"src":"1649:0:49"},"scope":6727,"src":"1540:569:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6666,"nodeType":"Block","src":"2534:221:49","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6630,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6620,"src":"2552:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2566:1:49","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":6632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2558:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6631,"name":"address","nodeType":"ElementaryTypeName","src":"2558:7:49","typeDescriptions":{}}},"id":6634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2558:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2552:16:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313135353a206d696e7420746f20746865207a65726f2061646472657373","id":6636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2570:35:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebf031a1b7ee1d0b3a7752b450a3268e8b6c334561b48c1c0ba0f5bac05749f2","typeString":"literal_string \"ERC1155: mint to the zero address\""},"value":"ERC1155: mint to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ebf031a1b7ee1d0b3a7752b450a3268e8b6c334561b48c1c0ba0f5bac05749f2","typeString":"literal_string \"ERC1155: mint to the zero address\""}],"id":6629,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2544:7:49","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2544:62:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6638,"nodeType":"ExpressionStatement","src":"2544:62:49"},{"expression":{"id":6651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":6639,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6504,"src":"2617:9:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":6642,"indexExpression":{"id":6640,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6622,"src":"2627:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2617:13:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6643,"indexExpression":{"id":6641,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6620,"src":"2631:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2617:17:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6624,"src":"2637:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"baseExpression":{"id":6645,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6504,"src":"2645:9:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":6647,"indexExpression":{"id":6646,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6622,"src":"2655:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2645:13:49","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6649,"indexExpression":{"id":6648,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6620,"src":"2659:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2645:17:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2637:25:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2617:45:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6652,"nodeType":"ExpressionStatement","src":"2617:45:49"},{"expression":{"arguments":[{"expression":{"id":6654,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2704:3:49","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2704:10:49","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"arguments":[{"hexValue":"30","id":6658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2724:1:49","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":6657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2716:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6656,"name":"address","nodeType":"ElementaryTypeName","src":"2716:7:49","typeDescriptions":{}}},"id":6659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2716:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":6660,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6620,"src":"2728:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6661,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6622,"src":"2732:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6662,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6624,"src":"2736:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6663,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6626,"src":"2743:4:49","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":6653,"name":"_doSafeTransferAcceptanceCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6726,"src":"2673:30:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint256,bytes memory)"}},"id":6664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2673:75:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6665,"nodeType":"ExpressionStatement","src":"2673:75:49"}]},"documentation":{"id":6618,"nodeType":"StructuredDocumentation","src":"2115:331:49","text":" @dev Test function to mint an amount of a token with the given ID\n @param to The address that will own the minted token\n @param id ID of the token to be minted\n @param value Amount of the token to be minted\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver"},"functionSelector":"731133e9","id":6667,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nodeType":"FunctionDefinition","parameters":{"id":6627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6620,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":6667,"src":"2465:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6619,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6622,"mutability":"mutable","name":"id","nodeType":"VariableDeclaration","scope":6667,"src":"2477:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6621,"name":"uint256","nodeType":"ElementaryTypeName","src":"2477:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6624,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":6667,"src":"2489:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6623,"name":"uint256","nodeType":"ElementaryTypeName","src":"2489:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6626,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":6667,"src":"2504:19:49","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":6625,"name":"bytes","nodeType":"ElementaryTypeName","src":"2504:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2464:60:49"},"returnParameters":{"id":6628,"nodeType":"ParameterList","parameters":[],"src":"2534:0:49"},"scope":6727,"src":"2451:304:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6683,"nodeType":"Block","src":"3173:180:49","statements":[{"assignments":[6676],"declarations":[{"constant":false,"id":6676,"mutability":"mutable","name":"size","nodeType":"VariableDeclaration","scope":6683,"src":"3183:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6675,"name":"uint256","nodeType":"ElementaryTypeName","src":"3183:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6677,"nodeType":"VariableDeclarationStatement","src":"3183:12:49"},{"AST":{"nodeType":"YulBlock","src":"3270:52:49","statements":[{"nodeType":"YulAssignment","src":"3284:28:49","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"3304:7:49"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"3292:11:49"},"nodeType":"YulFunctionCall","src":"3292:20:49"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"3284:4:49"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":6670,"isOffset":false,"isSlot":false,"src":"3304:7:49","valueSize":1},{"declaration":6676,"isOffset":false,"isSlot":false,"src":"3284:4:49","valueSize":1}],"id":6678,"nodeType":"InlineAssembly","src":"3261:61:49"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6679,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6676,"src":"3338:4:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3345:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3338:8:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6674,"id":6682,"nodeType":"Return","src":"3331:15:49"}]},"documentation":{"id":6668,"nodeType":"StructuredDocumentation","src":"2761:341:49","text":" @notice Returns true if `account` is a contract.\n @dev This function will return false if invoked during the constructor of a contract,\n      as the code is not actually created until after the constructor finishes.\n @param account The address being queried\n @return True if `account` is a contract"},"id":6684,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nodeType":"FunctionDefinition","parameters":{"id":6671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6670,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":6684,"src":"3127:15:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6669,"name":"address","nodeType":"ElementaryTypeName","src":"3127:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3126:17:49"},"returnParameters":{"id":6674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6673,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":6684,"src":"3167:4:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6672,"name":"bool","nodeType":"ElementaryTypeName","src":"3167:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3166:6:49"},"scope":6727,"src":"3107:246:49","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6725,"nodeType":"Block","src":"4127:319:49","statements":[{"condition":{"arguments":[{"id":6701,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6691,"src":"4152:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6700,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6684,"src":"4141:10:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":6702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4141:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6724,"nodeType":"IfStatement","src":"4137:303:49","trueBody":{"id":6723,"nodeType":"Block","src":"4157:283:49","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":6719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6708,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6687,"src":"4239:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6709,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6689,"src":"4249:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6710,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"4255:2:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6711,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"4259:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6712,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6697,"src":"4266:4:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":6705,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6691,"src":"4217:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6704,"name":"ERC1155TokenReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"4196:20:49","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1155TokenReceiver_$4942_$","typeString":"type(contract ERC1155TokenReceiver)"}},"id":6706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4196:24:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC1155TokenReceiver_$4942","typeString":"contract ERC1155TokenReceiver"}},"id":6707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"onERC1155Received","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"4196:42:49","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"}},"id":6713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4196:75:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"arguments":[{"id":6715,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6691,"src":"4316:2:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6714,"name":"ERC1155TokenReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"4295:20:49","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1155TokenReceiver_$4942_$","typeString":"type(contract ERC1155TokenReceiver)"}},"id":6716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4295:24:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC1155TokenReceiver_$4942","typeString":"contract ERC1155TokenReceiver"}},"id":6717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"onERC1155Received","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"4295:42:49","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"}},"id":6718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"4295:51:49","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"4196:150:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564","id":6720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4364:51:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed8e355e284874ab9344f5673b671de2fae4cbc95e3565b1501ffbb0f814cf6a","typeString":"literal_string \"ERC1155: got unknown value from onERC1155Received\""},"value":"ERC1155: got unknown value from onERC1155Received"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ed8e355e284874ab9344f5673b671de2fae4cbc95e3565b1501ffbb0f814cf6a","typeString":"literal_string \"ERC1155: got unknown value from onERC1155Received\""}],"id":6703,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4171:7:49","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4171:258:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6722,"nodeType":"ExpressionStatement","src":"4171:258:49"}]}}]},"documentation":{"id":6685,"nodeType":"StructuredDocumentation","src":"3359:570:49","text":" @dev Internal function to invoke `onERC1155Received` on a target address\n The call is not executed if the target address is not a contract\n @param operator  The address which initiated the transfer (i.e. msg.sender)\n @param from      The address which previously owned the token\n @param to        The address which will now own the token\n @param id        The id of the token being transferred\n @param value     The amount of tokens being transferred\n @param data      Additional data with no specified format"},"id":6726,"implemented":true,"kind":"function","modifiers":[],"name":"_doSafeTransferAcceptanceCheck","nodeType":"FunctionDefinition","parameters":{"id":6698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6687,"mutability":"mutable","name":"operator","nodeType":"VariableDeclaration","scope":6726,"src":"3983:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6686,"name":"address","nodeType":"ElementaryTypeName","src":"3983:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6689,"mutability":"mutable","name":"from","nodeType":"VariableDeclaration","scope":6726,"src":"4009:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6688,"name":"address","nodeType":"ElementaryTypeName","src":"4009:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6691,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":6726,"src":"4031:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6690,"name":"address","nodeType":"ElementaryTypeName","src":"4031:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6693,"mutability":"mutable","name":"id","nodeType":"VariableDeclaration","scope":6726,"src":"4051:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6692,"name":"uint256","nodeType":"ElementaryTypeName","src":"4051:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6695,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":6726,"src":"4071:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6694,"name":"uint256","nodeType":"ElementaryTypeName","src":"4071:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6697,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":6726,"src":"4094:17:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6696,"name":"bytes","nodeType":"ElementaryTypeName","src":"4094:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3973:144:49"},"returnParameters":{"id":6699,"nodeType":"ParameterList","parameters":[],"src":"4127:0:49"},"scope":6727,"src":"3934:512:49","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":6728,"src":"223:4225:49"}],"src":"42:4407:49"},"id":49},"contracts/test/ERC20Token.sol":{"ast":{"absolutePath":"contracts/test/ERC20Token.sol","exportedSymbols":{"Context":[1413],"ERC20":[1016],"ERC20Token":[6749],"IERC20":[1094],"SafeMath":[354]},"id":6750,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":6729,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"42:31:50"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":6730,"nodeType":"ImportDirective","scope":6750,"sourceUnit":1017,"src":"75:55:50","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6732,"name":"ERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":1016,"src":"279:5:50","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$1016","typeString":"contract ERC20"}},"id":6733,"nodeType":"InheritanceSpecifier","src":"279:5:50"}],"contractDependencies":[1016,1094,1413],"contractKind":"contract","documentation":{"id":6731,"nodeType":"StructuredDocumentation","src":"132:123:50","text":" @title ERC20Token\n @dev This contract is an ERC20 token contract that extends the OpenZeppelin ERC20 contract."},"fullyImplemented":true,"id":6749,"linearizedBaseContracts":[6749,1016,1094,1413],"name":"ERC20Token","nodeType":"ContractDefinition","nodes":[{"body":{"id":6747,"nodeType":"Block","src":"474:52:50","statements":[{"expression":{"arguments":[{"expression":{"id":6742,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"490:3:50","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"490:10:50","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"hexValue":"31303030303030303030303030303030","id":6744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"502:16:50","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000_by_1","typeString":"int_const 1000000000000000"},"value":"1000000000000000"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_rational_1000000000000000_by_1","typeString":"int_const 1000000000000000"}],"id":6741,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":892,"src":"484:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"484:35:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6746,"nodeType":"ExpressionStatement","src":"484:35:50"}]},"documentation":{"id":6734,"nodeType":"StructuredDocumentation","src":"291:132:50","text":" @dev Constructor that sets the name and symbol of the token and mints an initial supply to the contract deployer."},"id":6748,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"hexValue":"54657374546f6b656e","id":6737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"455:11:50","typeDescriptions":{"typeIdentifier":"t_stringliteral_98773c0a77836a29a7c5f4ab1a66bf2cd547cb12bf15ba74f84f027b91334da5","typeString":"literal_string \"TestToken\""},"value":"TestToken"},{"hexValue":"5454","id":6738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"468:4:50","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ac50a34f0da9360cfd7e529a34ccdaa61aa98e2a0ac0928bf981af8e73352ba","typeString":"literal_string \"TT\""},"value":"TT"}],"id":6739,"modifierName":{"id":6736,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1016,"src":"449:5:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20_$1016_$","typeString":"type(contract ERC20)"}},"nodeType":"ModifierInvocation","src":"449:24:50"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":6735,"nodeType":"ParameterList","parameters":[],"src":"439:2:50"},"returnParameters":{"id":6740,"nodeType":"ParameterList","parameters":[],"src":"474:0:50"},"scope":6749,"src":"428:98:50","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":6750,"src":"256:272:50"}],"src":"42:487:50"},"id":50},"contracts/test/Imports.sol":{"ast":{"absolutePath":"contracts/test/Imports.sol","exportedSymbols":{"UpgradeableProxy":[513]},"id":6754,"nodeType":"SourceUnit","nodes":[{"id":6751,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"0:31:51"},{"absolutePath":"@openzeppelin/contracts/proxy/UpgradeableProxy.sol","file":"@openzeppelin/contracts/proxy/UpgradeableProxy.sol","id":6753,"nodeType":"ImportDirective","scope":6754,"sourceUnit":514,"src":"79:84:51","symbolAliases":[{"foreign":{"id":6752,"name":"UpgradeableProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"87:16:51","typeDescriptions":{}}}],"unitAlias":""}],"src":"0:164:51"},"id":51},"contracts/test/TestHandler.sol":{"ast":{"absolutePath":"contracts/test/TestHandler.sol","exportedSymbols":{"HandlerContext":[4780],"TestHandler":[6775]},"id":6776,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":6755,"literals":["solidity",">=","0.7",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"42:31:52"},{"absolutePath":"contracts/handler/HandlerContext.sol","file":"../handler/HandlerContext.sol","id":6756,"nodeType":"ImportDirective","scope":6776,"sourceUnit":4781,"src":"75:39:52","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6758,"name":"HandlerContext","nodeType":"UserDefinedTypeName","referencedDeclaration":4780,"src":"204:14:52","typeDescriptions":{"typeIdentifier":"t_contract$_HandlerContext_$4780","typeString":"contract HandlerContext"}},"id":6759,"nodeType":"InheritanceSpecifier","src":"204:14:52"}],"contractDependencies":[4780],"contractKind":"contract","documentation":{"id":6757,"nodeType":"StructuredDocumentation","src":"116:63:52","text":" @title TestHandler - A test FallbackHandler contract"},"fullyImplemented":true,"id":6775,"linearizedBaseContracts":[6775,4780],"name":"TestHandler","nodeType":"ContractDefinition","nodes":[{"body":{"id":6773,"nodeType":"Block","src":"486:50:52","statements":[{"expression":{"components":[{"arguments":[],"expression":{"argumentTypes":[],"id":6767,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4769,"src":"504:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_address_$","typeString":"function () pure returns (address)"}},"id":6768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"504:12:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":6769,"name":"_manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4779,"src":"518:8:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":6770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"518:10:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6771,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"503:26:52","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"functionReturnParameters":6766,"id":6772,"nodeType":"Return","src":"496:33:52"}]},"documentation":{"id":6760,"nodeType":"StructuredDocumentation","src":"225:180:52","text":" @notice Returns the sender and manager address provided by the HandlerContext\n @return sender The sender address\n @return manager The manager address"},"functionSelector":"54955e59","id":6774,"implemented":true,"kind":"function","modifiers":[],"name":"dudududu","nodeType":"FunctionDefinition","parameters":{"id":6761,"nodeType":"ParameterList","parameters":[],"src":"427:2:52"},"returnParameters":{"id":6766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6763,"mutability":"mutable","name":"sender","nodeType":"VariableDeclaration","scope":6774,"src":"453:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6762,"name":"address","nodeType":"ElementaryTypeName","src":"453:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6765,"mutability":"mutable","name":"manager","nodeType":"VariableDeclaration","scope":6774,"src":"469:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6764,"name":"address","nodeType":"ElementaryTypeName","src":"469:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"452:33:52"},"scope":6775,"src":"410:126:52","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6776,"src":"180:358:52"}],"src":"42:497:52"},"id":52}},"contracts":{"@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":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122004d1f400257962ef1aaab8119178c66941d9c104b33ad62a7fe3f4e5d23f0a0264736f6c63430007060033","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 DIV 0xD1 DELEGATECALL STOP 0x25 PUSH26 0x62EF1AAAB8119178C66941D9C104B33AD62A7FE3F4E5D23F0A02 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"630:6594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122004d1f400257962ef1aaab8119178c66941d9c104b33ad62a7fe3f4e5d23f0a0264736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV 0xD1 DELEGATECALL STOP 0x25 PUSH26 0x62EF1AAAB8119178C66941D9C104B33AD62A7FE3F4E5D23F0A02 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"630:6594:0:-: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","tryAdd(uint256,uint256)":"infinite","tryDiv(uint256,uint256)":"infinite","tryMod(uint256,uint256)":"infinite","tryMul(uint256,uint256)":"infinite","trySub(uint256,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"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\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        uint256 c = a + b;\\n        if (c < a) return (false, 0);\\n        return (true, c);\\n    }\\n\\n    /**\\n     * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b > a) return (false, 0);\\n        return (true, a - b);\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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) return (true, 0);\\n        uint256 c = a * b;\\n        if (c / a != b) return (false, 0);\\n        return (true, c);\\n    }\\n\\n    /**\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b == 0) return (false, 0);\\n        return (true, a / b);\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b == 0) return (false, 0);\\n        return (true, a % b);\\n    }\\n\\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        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        require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n        return a - b;\\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        if (a == 0) return 0;\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers, reverting 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        require(b > 0, \\\"SafeMath: division by zero\\\");\\n        return a / b;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * reverting 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        require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n        return a % b;\\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     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {trySub}.\\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        return a - b;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {tryDiv}.\\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        return a / b;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * reverting with custom message when dividing by zero.\\n     *\\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {tryMod}.\\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\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 { revert(0, returndatasize()) }\\n            default { return(0, returndatasize()) }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback () external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive () external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overriden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {\\n    }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/UpgradeableProxy.sol":{"UpgradeableProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy. Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see {TransparentUpgradeableProxy}.","events":{"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{"constructor":{"details":"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor."}},"stateVariables":{"_IMPLEMENTATION_SLOT":{"details":"Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."}},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60806040526040516108383803806108388339818101604052604081101561002657600080fd5b81019080805190602001909291908051604051939291908464010000000082111561005057600080fd5b8382019150602082018581111561006657600080fd5b825186600182028301116401000000008211171561008357600080fd5b8083526020830192505050908051906020019080838360005b838110156100b757808201518184015260208101905061009c565b50505050905090810190601f1680156100e45780820380516001836020036101000a031916815260200191505b5060405250505060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c0360001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461014057fe5b61014f8261017660201b60201c565b60008151111561016f5761016d828261020d60201b6100371760201c565b505b5050610459565b6101898161024060201b6100641760201c565b6101de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806107dc6036913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181555050565b606061023883836040518060600160405280602781526020016107b56027913961025360201b60201c565b905092915050565b600080823b905060008111915050919050565b60606102648461024060201b60201c565b6102b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806108126026913960400191505060405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040518082805190602001908083835b6020831061030757805182526020820191506020810190506020830392506102e4565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610367576040519150601f19603f3d011682016040523d82523d6000602084013e61036c565b606091505b509150915061038282828661038d60201b60201c565b925050509392505050565b6060831561039d57829050610452565b6000835111156103b05782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156104175780820151818401526020810190506103fc565b50505050905090810190601f1680156104445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b61034d806104686000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610077565b610035610030610079565b6100aa565b565b606061005c83836040518060600160405280602781526020016102cb602791396100d0565b905092915050565b600080823b905060008111915050919050565b565b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050805491505090565b3660008037600080366000845af43d6000803e80600081146100cb573d6000f35b3d6000fd5b60606100db84610064565b610130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806102f26026913960400191505060405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040518082805190602001908083835b6020831061017e578051825260208201915060208101905060208303925061015b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101de576040519150601f19603f3d011682016040523d82523d6000602084013e6101e3565b606091505b50915091506101f38282866101fe565b925050509392505050565b6060831561020e578290506102c3565b6000835111156102215782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561028857808201518184015260208101905061026d565b50505050905090810190601f1680156102b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a264697066735822122036ffeec5964f760f8d23a72b97982be5f5ba929f68a45a43985de297419ecfc064736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x838 CODESIZE SUB DUP1 PUSH2 0x838 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x9C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE4 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 POP PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH1 0x0 SHR SUB PUSH1 0x0 SHL PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL EQ PUSH2 0x140 JUMPI INVALID JUMPDEST PUSH2 0x14F DUP3 PUSH2 0x176 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT ISZERO PUSH2 0x16F JUMPI PUSH2 0x16D DUP3 DUP3 PUSH2 0x20D PUSH1 0x20 SHL PUSH2 0x37 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP PUSH2 0x459 JUMP JUMPDEST PUSH2 0x189 DUP2 PUSH2 0x240 PUSH1 0x20 SHL PUSH2 0x64 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1DE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x36 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x7DC PUSH1 0x36 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x238 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7B5 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x253 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x264 DUP5 PUSH2 0x240 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x2B9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x812 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x307 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x2E4 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x367 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 0x36C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x382 DUP3 DUP3 DUP7 PUSH2 0x38D PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x39D JUMPI DUP3 SWAP1 POP PUSH2 0x452 JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH2 0x3B0 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 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 0x417 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3FC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x444 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 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x34D DUP1 PUSH2 0x468 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25 PUSH2 0x77 JUMP JUMPDEST PUSH2 0x35 PUSH2 0x30 PUSH2 0x79 JUMP JUMPDEST PUSH2 0xAA JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2CB PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xD0 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xDB DUP5 PUSH2 0x64 JUMP JUMPDEST PUSH2 0x130 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2F2 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x17E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x15B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1DE 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 0x1E3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1F3 DUP3 DUP3 DUP7 PUSH2 0x1FE JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x20E JUMPI DUP3 SWAP1 POP PUSH2 0x2C3 JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH2 0x221 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 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 0x288 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x26D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2B5 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 SWAP4 SWAP3 POP POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C65644164 PUSH5 0x726573733A KECCAK256 PUSH5 0x656C656761 PUSH21 0x652063616C6C20746F206E6F6E2D636F6E74726163 PUSH21 0xA264697066735822122036FFEEC5964F760F8D23A7 0x2B SWAP8 SWAP9 0x2B 0xE5 CREATE2 0xBA SWAP3 SWAP16 PUSH9 0xA45A43985DE297419E 0xCF 0xC0 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C65645570 PUSH8 0x7261646561626C65 POP PUSH19 0x6F78793A206E657720696D706C656D656E7461 PUSH21 0x696F6E206973206E6F74206120636F6E7472616374 COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH5 0x656C656761 PUSH21 0x652063616C6C20746F206E6F6E2D636F6E74726163 PUSH21 0x0 ","sourceMap":"638:2216:2:-:0;;;1019:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1184:1;1139:41;1131:50;;:54;1123:63;;1727:66;1099:20;;:87;1092:95;;;;1197:26;1216:6;1197:18;;;:26;;:::i;:::-;1251:1;1236:5;:12;:16;1233:89;;;1268:43;1297:6;1305:5;1268:28;;;;;:43;;:::i;:::-;;1233:89;1019:309;;638:2216;;2492:360;2573:37;2592:17;2573:18;;;;;:37;;:::i;:::-;2565:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2680:12;1727:66;2695:20;;2680:35;;2818:17;2812:4;2805:31;2791:55;;:::o;6284:198:5:-;6367:12;6398:77;6419:6;6427:4;6398:77;;;;;;;;;;;;;;;;;:20;;;:77;;:::i;:::-;6391:84;;6284:198;;;;:::o;726:413::-;786:4;989:12;1098:7;1086:20;1078:28;;1131:1;1124:4;:8;1117:15;;;726:413;;;:::o;6668:417::-;6779:12;6811:18;6822:6;6811:10;;;:18;;:::i;:::-;6803:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6943:12;6957:23;6984:6;:19;;7004:4;6984:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6942:67;;;;7026:52;7044:7;7053:10;7065:12;7026:17;;;:52;;:::i;:::-;7019:59;;;;6668:417;;;;;:::o;7091:725::-;7206:12;7234:7;7230:580;;;7264:10;7257:17;;;;7230:580;7395:1;7375:10;:17;:21;7371:429;;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7772:12;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7091:725;;;;;;:::o;638:2216:2:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052366100135761001161001d565b005b61001b61001d565b005b610025610077565b610035610030610079565b6100aa565b565b606061005c83836040518060600160405280602781526020016102cb602791396100d0565b905092915050565b600080823b905060008111915050919050565b565b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050805491505090565b3660008037600080366000845af43d6000803e80600081146100cb573d6000f35b3d6000fd5b60606100db84610064565b610130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806102f26026913960400191505060405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040518082805190602001908083835b6020831061017e578051825260208201915060208101905060208303925061015b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101de576040519150601f19603f3d011682016040523d82523d6000602084013e6101e3565b606091505b50915091506101f38282866101fe565b925050509392505050565b6060831561020e578290506102c3565b6000835111156102215782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561028857808201518184015260208101905061026d565b50505050905090810190601f1680156102b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a264697066735822122036ffeec5964f760f8d23a72b97982be5f5ba929f68a45a43985de297419ecfc064736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25 PUSH2 0x77 JUMP JUMPDEST PUSH2 0x35 PUSH2 0x30 PUSH2 0x79 JUMP JUMPDEST PUSH2 0xAA JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2CB PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xD0 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xDB DUP5 PUSH2 0x64 JUMP JUMPDEST PUSH2 0x130 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2F2 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x17E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x15B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1DE 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 0x1E3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1F3 DUP3 DUP3 DUP7 PUSH2 0x1FE JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x20E JUMPI DUP3 SWAP1 POP PUSH2 0x2C3 JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH2 0x221 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 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 0x288 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x26D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2B5 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 SWAP4 SWAP3 POP POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C65644164 PUSH5 0x726573733A KECCAK256 PUSH5 0x656C656761 PUSH21 0x652063616C6C20746F206E6F6E2D636F6E74726163 PUSH21 0xA264697066735822122036FFEEC5964F760F8D23A7 0x2B SWAP8 SWAP9 0x2B 0xE5 CREATE2 0xBA SWAP3 SWAP16 PUSH9 0xA45A43985DE297419E 0xCF 0xC0 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"638:2216:2:-:0;;;;;;2843:11:1;:9;:11::i;:::-;638:2216:2;;2619:11:1;:9;:11::i;:::-;638:2216:2;2265:110:1;2313:17;:15;:17::i;:::-;2340:28;2350:17;:15;:17::i;:::-;2340:9;:28::i;:::-;2265:110::o;6284:198:5:-;6367:12;6398:77;6419:6;6427:4;6398:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6391:84;;6284:198;;;;:::o;726:413::-;786:4;989:12;1098:7;1086:20;1078:28;;1131:1;1124:4;:8;1117:15;;;726:413;;;:::o;3142:51:1:-;:::o;1872:250:2:-;1939:12;1963;1727:66;1978:20;;1963:35;;2101:4;2095:11;2087:19;;2073:43;;:::o;891:895:1:-;1285:14;1282:1;1279;1266:34;1499:1;1496;1480:14;1477:1;1461:14;1454:5;1441:60;1575:16;1572:1;1569;1554:38;1613:6;1685:1;1680:38;;;;1751:16;1748:1;1741:27;1680:38;1699:16;1696:1;1689:27;6668:417:5;6779:12;6811:18;6822:6;6811:10;:18::i;:::-;6803:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6943:12;6957:23;6984:6;:19;;7004:4;6984:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6942:67;;;;7026:52;7044:7;7053:10;7065:12;7026:17;:52::i;:::-;7019:59;;;;6668:417;;;;;:::o;7091:725::-;7206:12;7234:7;7230:580;;;7264:10;7257:17;;;;7230:580;7395:1;7375:10;:17;:21;7371:429;;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7772:12;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7091:725;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"169000","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"},"internal":{"_implementation()":"842","_setImplementation(address)":"infinite","_upgradeTo(address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy. Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see {TransparentUpgradeableProxy}.\",\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"stateVariables\":{\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":\"UpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 { revert(0, returndatasize()) }\\n            default { return(0, returndatasize()) }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback () external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive () external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overriden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {\\n    }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) public payable {\\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n        _setImplementation(_logic);\\n        if(_data.length > 0) {\\n            Address.functionDelegateCall(_logic, _data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        bytes32 slot = _IMPLEMENTATION_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            impl := sload(slot)\\n        }\\n    }\\n\\n    /**\\n     * @dev Upgrades the proxy to a new implementation.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal virtual {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n        bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, newImplementation)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.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        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { size := extcodesize(account) }\\n        return size > 0;\\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        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: value }(data);\\n        return _verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return _verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return _verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\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\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"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":{"generatedSources":[],"linkReferences":{},"object":"60806040523480156200001157600080fd5b50604051620013af380380620013af833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040525050508160039080519060200190620001cd9291906200020b565b508060049080519060200190620001e69291906200020b565b506012600560006101000a81548160ff021916908360ff1602179055505050620002c1565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200024357600085556200028f565b82601f106200025e57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028e57825182559160200191906001019062000271565b5b5090506200029e9190620002a2565b5090565b5b80821115620002bd576000816000905550600101620002a3565b5090565b6110de80620002d16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461025857806370a08231146102bc57806395d89b4114610314578063a457c2d714610397578063a9059cbb146103fb578063dd62ed3e1461045f576100a9565b806306fdde03146100ae578063095ea7b31461013157806318160ddd1461019557806323b872dd146101b3578063313ce56714610237575b600080fd5b6100b66104d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f65780820151818401526020810190506100db565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561014757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610579565b60405180821515815260200191505060405180910390f35b61019d610597565b6040518082815260200191505060405180910390f35b61021f600480360360608110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105a1565b60405180821515815260200191505060405180910390f35b61023f61067a565b604051808260ff16815260200191505060405180910390f35b6102a46004803603604081101561026e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610691565b60405180821515815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610744565b6040518082815260200191505060405180910390f35b61031c61078c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061082e565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108fb565b60405180821515815260200191505060405180910390f35b6104c16004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610919565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058d6105866109a0565b84846109a8565b6001905092915050565b6000600254905090565b60006105ae848484610b9f565b61066f846105ba6109a0565b61066a8560405180606001604052806028815260200161101360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106206109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061073a61069e6109a0565b8461073585600160006106af6109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f1a90919063ffffffff16565b6109a8565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108f161083b6109a0565b846108ec8560405180606001604052806025815260200161108460259139600160006108656109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b6001905092915050565b600061090f6109086109a0565b8484610b9f565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610fcb6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061103b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610fa86023913960400191505060405180910390fd5b610cb6838383610fa2565b610d2181604051806060016040528060268152602001610fed602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f1a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ed2578082015181840152602081019050610eb7565b50505050905090810190601f168015610eff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015610f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e4dd8ddd9d95fda3dcf6c51af7ca2f806600f4b6fdba2f215e5995dfb394fd5264736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x13AF CODESIZE SUB DUP1 PUSH3 0x13AF DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x37 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 PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH3 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xC3 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH3 0xA6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xF1 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 PUSH3 0x115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH3 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x180 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH3 0x163 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1AE 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 POP DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x1CD SWAP3 SWAP2 SWAP1 PUSH3 0x20B JUMP JUMPDEST POP DUP1 PUSH1 0x4 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x1E6 SWAP3 SWAP2 SWAP1 PUSH3 0x20B JUMP JUMPDEST POP PUSH1 0x12 PUSH1 0x5 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP POP POP PUSH3 0x2C1 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 PUSH3 0x243 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x28F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x25E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x28F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x28F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x28E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x271 JUMP JUMPDEST JUMPDEST POP SWAP1 POP PUSH3 0x29E SWAP2 SWAP1 PUSH3 0x2A2 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x2BD JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH3 0x2A3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x10DE DUP1 PUSH3 0x2D1 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 0x258 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3FB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x45F JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x237 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x4D7 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0xF6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xDB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x123 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 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19D PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x21F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x23F PUSH2 0x67A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x31C PUSH2 0x78C JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x35C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x341 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x389 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 0x3E3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x447 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x919 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x56F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x544 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x56F 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 0x552 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58D PUSH2 0x586 PUSH2 0x9A0 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5AE DUP5 DUP5 DUP5 PUSH2 0xB9F JUMP JUMPDEST PUSH2 0x66F DUP5 PUSH2 0x5BA PUSH2 0x9A0 JUMP JUMPDEST PUSH2 0x66A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1013 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x620 PUSH2 0x9A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xE60 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x73A PUSH2 0x69E PUSH2 0x9A0 JUMP JUMPDEST DUP5 PUSH2 0x735 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x6AF PUSH2 0x9A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xF1A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x824 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x824 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 0x807 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F1 PUSH2 0x83B PUSH2 0x9A0 JUMP JUMPDEST DUP5 PUSH2 0x8EC DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1084 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x865 PUSH2 0x9A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xE60 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x90F PUSH2 0x908 PUSH2 0x9A0 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xB9F JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA2E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1060 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xAB4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFCB PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xC25 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x103B PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCAB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFA8 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xCB6 DUP4 DUP4 DUP4 PUSH2 0xFA2 JUMP JUMPDEST PUSH2 0xD21 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFED PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xE60 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0xDB4 DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xF1A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 GT ISZERO DUP3 SWAP1 PUSH2 0xF0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 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 0xED2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xEB7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xEFF 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 DUP3 DUP5 SUB SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xF98 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 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 0x7358221220E4DD DUP14 0xDD SWAP14 SWAP6 REVERT LOG3 0xDC 0xF6 0xC5 BYTE 0xF7 0xCA 0x2F DUP1 PUSH7 0xF4B6FDBA2F21 0x5E MSIZE SWAP6 0xDF 0xB3 SWAP5 REVERT MSTORE PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"1321:9474:3:-:0;;;1958:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2040:5;2032;:13;;;;;;;;;;;;:::i;:::-;;2065:7;2055;:17;;;;;;;;;;;;:::i;:::-;;2094:2;2082:9;;:14;;;;;;;;;;;;;;;;;;1958:145;;1321:9474;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461025857806370a08231146102bc57806395d89b4114610314578063a457c2d714610397578063a9059cbb146103fb578063dd62ed3e1461045f576100a9565b806306fdde03146100ae578063095ea7b31461013157806318160ddd1461019557806323b872dd146101b3578063313ce56714610237575b600080fd5b6100b66104d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f65780820151818401526020810190506100db565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561014757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610579565b60405180821515815260200191505060405180910390f35b61019d610597565b6040518082815260200191505060405180910390f35b61021f600480360360608110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105a1565b60405180821515815260200191505060405180910390f35b61023f61067a565b604051808260ff16815260200191505060405180910390f35b6102a46004803603604081101561026e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610691565b60405180821515815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610744565b6040518082815260200191505060405180910390f35b61031c61078c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061082e565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108fb565b60405180821515815260200191505060405180910390f35b6104c16004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610919565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058d6105866109a0565b84846109a8565b6001905092915050565b6000600254905090565b60006105ae848484610b9f565b61066f846105ba6109a0565b61066a8560405180606001604052806028815260200161101360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106206109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061073a61069e6109a0565b8461073585600160006106af6109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f1a90919063ffffffff16565b6109a8565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108f161083b6109a0565b846108ec8560405180606001604052806025815260200161108460259139600160006108656109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b6001905092915050565b600061090f6109086109a0565b8484610b9f565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610fcb6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061103b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610fa86023913960400191505060405180910390fd5b610cb6838383610fa2565b610d2181604051806060016040528060268152602001610fed602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f1a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ed2578082015181840152602081019050610eb7565b50505050905090810190601f168015610eff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015610f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e4dd8ddd9d95fda3dcf6c51af7ca2f806600f4b6fdba2f215e5995dfb394fd5264736f6c63430007060033","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 0x258 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3FB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x45F JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x237 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x4D7 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0xF6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xDB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x123 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 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19D PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x21F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x23F PUSH2 0x67A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x31C PUSH2 0x78C JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x35C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x341 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x389 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 0x3E3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x447 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x919 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x56F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x544 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x56F 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 0x552 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58D PUSH2 0x586 PUSH2 0x9A0 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5AE DUP5 DUP5 DUP5 PUSH2 0xB9F JUMP JUMPDEST PUSH2 0x66F DUP5 PUSH2 0x5BA PUSH2 0x9A0 JUMP JUMPDEST PUSH2 0x66A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1013 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x620 PUSH2 0x9A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xE60 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x73A PUSH2 0x69E PUSH2 0x9A0 JUMP JUMPDEST DUP5 PUSH2 0x735 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x6AF PUSH2 0x9A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xF1A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x824 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x824 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 0x807 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F1 PUSH2 0x83B PUSH2 0x9A0 JUMP JUMPDEST DUP5 PUSH2 0x8EC DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1084 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x865 PUSH2 0x9A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xE60 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x90F PUSH2 0x908 PUSH2 0x9A0 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xB9F JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA2E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1060 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xAB4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFCB PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xC25 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x103B PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCAB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFA8 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xCB6 DUP4 DUP4 DUP4 PUSH2 0xFA2 JUMP JUMPDEST PUSH2 0xD21 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFED PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xE60 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0xDB4 DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xF1A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 GT ISZERO DUP3 SWAP1 PUSH2 0xF0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 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 0xED2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xEB7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xEFF 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 DUP3 DUP5 SUB SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xF98 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 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 0x7358221220E4DD DUP14 0xDD SWAP14 SWAP6 REVERT LOG3 0xDC 0xF6 0xC5 BYTE 0xF7 0xCA 0x2F DUP1 PUSH7 0xF4B6FDBA2F21 0x5E MSIZE SWAP6 0xDF 0xB3 SWAP5 REVERT MSTORE PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"1321:9474:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4244:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3235:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4877:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3086:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5589:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3399:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2370:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6291:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3727:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3957:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2168:89;2213:13;2245:5;2238:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:89;:::o;4244:166::-;4327:4;4343:39;4352:12;:10;:12::i;:::-;4366:7;4375:6;4343:8;:39::i;:::-;4399:4;4392:11;;4244:166;;;;:::o;3235:106::-;3296:7;3322:12;;3315:19;;3235:106;:::o;4877:317::-;4983:4;4999:36;5009:6;5017:9;5028:6;4999:9;:36::i;:::-;5045:121;5054:6;5062:12;:10;:12::i;:::-;5076:89;5114:6;5076:89;;;;;;;;;;;;;;;;;:11;:19;5088:6;5076:19;;;;;;;;;;;;;;;:33;5096:12;:10;:12::i;:::-;5076:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5045:8;:121::i;:::-;5183:4;5176:11;;4877:317;;;;;:::o;3086:89::-;3135:5;3159:9;;;;;;;;;;;3152:16;;3086:89;:::o;5589:215::-;5677:4;5693:83;5702:12;:10;:12::i;:::-;5716:7;5725:50;5764:10;5725:11;:25;5737:12;:10;:12::i;:::-;5725:25;;;;;;;;;;;;;;;:34;5751:7;5725:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5693:8;:83::i;:::-;5793:4;5786:11;;5589:215;;;;:::o;3399:125::-;3473:7;3499:9;:18;3509:7;3499:18;;;;;;;;;;;;;;;;3492:25;;3399:125;;;:::o;2370:93::-;2417:13;2449:7;2442:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2370:93;:::o;6291:266::-;6384:4;6400:129;6409:12;:10;:12::i;:::-;6423:7;6432:96;6471:15;6432:96;;;;;;;;;;;;;;;;;:11;:25;6444:12;:10;:12::i;:::-;6432:25;;;;;;;;;;;;;;;:34;6458:7;6432:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6400:8;:129::i;:::-;6546:4;6539:11;;6291:266;;;;:::o;3727:172::-;3813:4;3829:42;3839:12;:10;:12::i;:::-;3853:9;3864:6;3829:9;:42::i;:::-;3888:4;3881:11;;3727:172;;;;:::o;3957:149::-;4046:7;4072:11;:18;4084:5;4072:18;;;;;;;;;;;;;;;:27;4091:7;4072:27;;;;;;;;;;;;;;;;4065:34;;3957:149;;;;:::o;598:104:6:-;651:15;685:10;678:17;;598:104;:::o;9355:340:3:-;9473:1;9456:19;;:5;:19;;;;9448:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9553:1;9534:21;;:7;:21;;;;9526:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9635:6;9605:11;:18;9617:5;9605:18;;;;;;;;;;;;;;;:27;9624:7;9605:27;;;;;;;;;;;;;;;:36;;;;9672:7;9656:32;;9665:5;9656:32;;;9681:6;9656:32;;;;;;;;;;;;;;;;;;9355:340;;;:::o;7031:530::-;7154:1;7136:20;;:6;:20;;;;7128:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7237:1;7216:23;;:9;:23;;;;7208:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7290:47;7311:6;7319:9;7330:6;7290:20;:47::i;:::-;7368:71;7390:6;7368:71;;;;;;;;;;;;;;;;;:9;:17;7378:6;7368:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7348:9;:17;7358:6;7348:17;;;;;;;;;;;;;;;:91;;;;7472:32;7497:6;7472:9;:20;7482:9;7472:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7449:9;:20;7459:9;7449:20;;;;;;;;;;;;;;;:55;;;;7536:9;7519:35;;7528:6;7519:35;;;7547:6;7519:35;;;;;;;;;;;;;;;;;;7031:530;;;:::o;5432:163:0:-;5518:7;5550:1;5545;:6;;5553:12;5537:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:1;5583;:5;5576:12;;5432:163;;;;;:::o;2690:175::-;2748:7;2767:9;2783:1;2779;:5;2767:17;;2807:1;2802;:6;;2794:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;2850:8;;;2690:175;;;;:::o;10701:92:3:-;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"863600","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"1431","approve(address,uint256)":"infinite","balanceOf(address)":"1218","decimals()":"1144","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"1058","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.6+commit.7338295f\"},\"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\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        uint256 c = a + b;\\n        if (c < a) return (false, 0);\\n        return (true, c);\\n    }\\n\\n    /**\\n     * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b > a) return (false, 0);\\n        return (true, a - b);\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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) return (true, 0);\\n        uint256 c = a * b;\\n        if (c / a != b) return (false, 0);\\n        return (true, c);\\n    }\\n\\n    /**\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b == 0) return (false, 0);\\n        return (true, a / b);\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b == 0) return (false, 0);\\n        return (true, a % b);\\n    }\\n\\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        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        require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n        return a - b;\\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        if (a == 0) return 0;\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers, reverting 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        require(b > 0, \\\"SafeMath: division by zero\\\");\\n        return a / b;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * reverting 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        require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n        return a % b;\\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     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {trySub}.\\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        return a - b;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {tryDiv}.\\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        return a / b;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * reverting with custom message when dividing by zero.\\n     *\\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {tryMod}.\\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\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../utils/Context.sol\\\";\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"../../math/SafeMath.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\\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_) public {\\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 virtual 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 virtual 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 virtual returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual 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     *\\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 virtual {\\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\":\"0xca0c2396dbeb3503b51abf4248ebf77a1461edad513c01529df51850a012bee3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":530,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":536,"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":538,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":540,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":542,"contract":"@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":544,"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":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"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.6+commit.7338295f\"},\"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\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"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":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c7ee8d7888310c9ca0024ec54d6da5a381ceeac4ed5cf801a001f5b853b78ab764736f6c63430007060033","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 0xC7 0xEE DUP14 PUSH25 0x88310C9CA0024EC54D6DA5A381CEEAC4ED5CF801A001F5B853 0xB7 DUP11 0xB7 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"134:7684:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c7ee8d7888310c9ca0024ec54d6da5a381ceeac4ed5cf801a001f5b853b78ab764736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 0xEE DUP14 PUSH25 0x88310C9CA0024EC54D6DA5A381CEEAC4ED5CF801A001F5B853 0xB7 DUP11 0xB7 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"134:7684:5:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"97","totalCost":"17297"},"internal":{"_verifyCallResult(bool,bytes memory,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","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"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\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.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        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { size := extcodesize(account) }\\n        return size > 0;\\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        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: value }(data);\\n        return _verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return _verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return _verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\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\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/Safe.sol":{"Safe":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"AddedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"approvedHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"ApproveHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"handler","type":"address"}],"name":"ChangedFallbackHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"guard","type":"address"}],"name":"ChangedGuard","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"ChangedThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"DisabledModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"EnabledModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"payment","type":"uint256"}],"name":"ExecutionFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"ExecutionFromModuleFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"ExecutionFromModuleSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"payment","type":"uint256"}],"name":"ExecutionSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"RemovedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":false,"internalType":"address[]","name":"owners","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"address","name":"initializer","type":"address"},{"indexed":false,"internalType":"address","name":"fallbackHandler","type":"address"}],"name":"SafeSetup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"msgHash","type":"bytes32"}],"name":"SignMsg","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"addOwnerWithThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hashToApprove","type":"bytes32"}],"name":"approveHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"approvedHashes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"changeThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"internalType":"uint256","name":"requiredSignatures","type":"uint256"}],"name":"checkNSignatures","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"checkSignatures","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"prevModule","type":"address"},{"internalType":"address","name":"module","type":"address"}],"name":"disableModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"module","type":"address"}],"name":"enableModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address","name":"refundReceiver","type":"address"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"encodeTransactionData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address payable","name":"refundReceiver","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"execTransaction","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"execTransactionFromModule","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"execTransactionFromModuleReturnData","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"start","type":"address"},{"internalType":"uint256","name":"pageSize","type":"uint256"}],"name":"getModulesPaginated","outputs":[{"internalType":"address[]","name":"array","type":"address[]"},{"internalType":"address","name":"next","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getStorageAt","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address","name":"refundReceiver","type":"address"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getTransactionHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"module","type":"address"}],"name":"isModuleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"handler","type":"address"}],"name":"setFallbackHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"guard","type":"address"}],"name":"setGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"fallbackHandler","type":"address"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"payment","type":"uint256"},{"internalType":"address payable","name":"paymentReceiver","type":"address"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"signedMessages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetContract","type":"address"},{"internalType":"bytes","name":"calldataPayload","type":"bytes"}],"name":"simulateAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"oldOwner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"swapOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Stefan George - @Georgi87Richard Meissner - @rmeissner","details":"Most important concepts:      - Threshold: Number of required confirmations for a Safe transaction.      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and        approve transactions. Managed in `OwnerManager`.      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.      - Nonce: Each transaction should have a different nonce to prevent replay attacks.      - Signature: A valid signature of an owner of the Safe for a transaction hash.      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/      For the events-based implementation see `SafeL2.sol`.","kind":"dev","methods":{"addOwnerWithThreshold(address,uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold.","owner":"New owner address."}},"approveHash(bytes32)":{"details":"This can be used with a pre-approved hash transaction signature.      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures","params":{"hashToApprove":"The hash to mark as approved for signatures that are verified by this contract."}},"changeThreshold(uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold."}},"checkNSignatures(bytes32,bytes,bytes,uint256)":{"details":"Since the EIP-1271 does an external call, be mindful of reentrancy attacks.","params":{"data":"That should be signed (this is passed to an external validator contract)","dataHash":"Hash of the data (could be either a message hash or transaction hash)","requiredSignatures":"Amount of required valid signatures.","signatures":"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash."}},"checkSignatures(bytes32,bytes,bytes)":{"params":{"data":"That should be signed (this is passed to an external validator contract)","dataHash":"Hash of the data (could be either a message hash or transaction hash)","signatures":"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash."}},"disableModule(address,address)":{"details":"This can only be done via a Safe transaction.","params":{"module":"Module to be removed.","prevModule":"Previous module in the modules linked list."}},"domainSeparator()":{"details":"Returns the domain separator for this contract, as defined in the EIP-712 standard.","returns":{"_0":"bytes32 The domain separator hash."}},"enableModule(address)":{"details":"This can only be done via a Safe transaction.","params":{"module":"Module to be whitelisted."}},"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"params":{"_nonce":"Transaction nonce.","baseGas":"Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)","data":"Data payload.","gasPrice":"Maximum gas price that should be used for this transaction.","gasToken":"Token address (or 0 if ETH) that is used for the payment.","operation":"Operation type.","refundReceiver":"Address of receiver of gas payment (or 0 if tx.origin).","safeTxGas":"Gas that should be used for the safe transaction.","to":"Destination address.","value":"Ether value."},"returns":{"_0":"Transaction hash bytes."}},"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":{"details":"The fees are always transferred, even if the user transaction fails.      This method doesn't perform any sanity check of the transaction, such as:      - if the contract at `to` address has code or not      - if the `gasToken` is a contract or not      It is the responsibility of the caller to perform such checks.","params":{"baseGas":"Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)","data":"Data payload of Safe transaction.","gasPrice":"Gas price that should be used for the payment calculation.","gasToken":"Token address (or 0 if ETH) that is used for the payment.","operation":"Operation type of Safe transaction.","refundReceiver":"Address of receiver of gas payment (or 0 if tx.origin).","safeTxGas":"Gas that should be used for the Safe transaction.","signatures":"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.","to":"Destination address of Safe transaction.","value":"Ether value of Safe transaction."},"returns":{"success":"Boolean indicating transaction's success."}},"execTransactionFromModule(address,uint256,bytes,uint8)":{"details":"Function is virtual to allow overriding for L2 singleton to emit an event for indexing.","params":{"data":"Data payload of module transaction.","operation":"Operation type of module transaction.","to":"Destination address of module transaction.","value":"Ether value of module transaction."},"returns":{"success":"Boolean flag indicating if the call succeeded."}},"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":{"params":{"data":"Data payload of module transaction.","operation":"Operation type of module transaction.","to":"Destination address of module transaction.","value":"Ether value of module transaction."},"returns":{"returnData":"Data returned by the call.","success":"Boolean flag indicating if the call succeeded."}},"getChainId()":{"returns":{"_0":"The ID of the current chain as a uint256."}},"getModulesPaginated(address,uint256)":{"params":{"pageSize":"Maximum number of modules that should be returned. Has to be > 0","start":"Start of the page. Has to be a module or start pointer (0x1 address)"},"returns":{"array":"Array of modules.","next":"Start of the next page."}},"getOwners()":{"returns":{"_0":"Array of Safe owners."}},"getStorageAt(uint256,uint256)":{"params":{"length":"- the number of words (32 bytes) of data to read","offset":"- the offset in the current contract's storage in words to start reading from"},"returns":{"_0":"the bytes that were read."}},"getThreshold()":{"returns":{"_0":"Threshold number."}},"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"params":{"_nonce":"Transaction nonce.","baseGas":"Gas costs for data used to trigger the safe transaction.","data":"Data payload.","gasPrice":"Maximum gas price that should be used for this transaction.","gasToken":"Token address (or 0 if ETH) that is used for the payment.","operation":"Operation type.","refundReceiver":"Address of receiver of gas payment (or 0 if tx.origin).","safeTxGas":"Fas that should be used for the safe transaction.","to":"Destination address.","value":"Ether value."},"returns":{"_0":"Transaction hash."}},"isModuleEnabled(address)":{"returns":{"_0":"True if the module is enabled"}},"isOwner(address)":{"returns":{"_0":"Boolean if owner is an owner of the Safe."}},"removeOwner(address,address,uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold.","owner":"Owner address to be removed.","prevOwner":"Owner that pointed to the owner to be removed in the linked list"}},"setFallbackHandler(address)":{"details":"Only fallback calls without value and with data will be forwarded.      This can only be done via a Safe transaction.      Cannot be set to the Safe itself.","params":{"handler":"contract to handle fallback calls."}},"setGuard(address)":{"details":"Set a guard that checks transactions before execution      This can only be done via a Safe transaction.      ⚠️ IMPORTANT: Since a guard has full power to block Safe transaction execution,        a broken guard can cause a denial of service for the Safe. Make sure to carefully        audit the guard code and design recovery mechanisms.","params":{"guard":"The address of the guard to be used or the 0 address to disable the guard"}},"setup(address[],uint256,address,bytes,address,address,uint256,address)":{"details":"This method can only be called once.      If a proxy was created without setting up, anyone can call setup and claim the proxy.","params":{"_owners":"List of Safe owners.","_threshold":"Number of required confirmations for a Safe transaction.","data":"Data payload for optional delegate call.","fallbackHandler":"Handler for fallback calls to this contract","payment":"Value that should be paid","paymentReceiver":"Address that should receive the payment (or 0 if tx.origin)","paymentToken":"Token that should be used for the payment (0 is ETH)","to":"Contract address for optional delegate call."}},"simulateAndRevert(address,bytes)":{"details":"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.","params":{"calldataPayload":"Calldata that should be sent to the target contract (encoded method name and arguments).","targetContract":"Address of the contract containing the code to execute."}},"swapOwner(address,address,address)":{"details":"This can only be done via a Safe transaction.","params":{"newOwner":"New owner address.","oldOwner":"Owner address to be replaced.","prevOwner":"Owner that pointed to the owner to be replaced in the linked list"}}},"title":"Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506001600481905550615c1b80620000296000396000f3fe6080604052600436106101d15760003560e01c8063affed0e0116100f7578063e19a9dd911610095578063f08a032311610064578063f08a03231461156b578063f698da25146115bc578063f8dc5dd9146115e7578063ffa1ad741461166257610226565b8063e19a9dd9146112bf578063e318b52b14611310578063e75235b8146113a1578063e86637db146113cc57610226565b8063cc2f8452116100d1578063cc2f84521461100c578063d4d9bdcd146110d9578063d8d11f7814611114578063e009cfde1461124e57610226565b8063affed0e014610d89578063b4faba0914610db4578063b63e800d14610e9c57610226565b80635624b25b1161016f5780636a7612021161013e5780636a761202146109895780637d83297414610b45578063934f3a1114610bb4578063a0e67e2b14610d1d57610226565b80635624b25b146107f05780635ae6bd37146108ae578063610b5925146108fd578063694e80c31461094e57610226565b80632f54bf6e116101ab5780632f54bf6e146104c85780633408e4701461052f578063468721a71461055a5780635229073f1461066f57610226565b80630d582f131461029357806312fb68e0146102ee5780632d9ad53d1461046157610226565b36610226573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023257600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061026757600080f35b36600080373360601b365260008060143601600080855af13d6000803e8061028e573d6000fd5b3d6000f35b34801561029f57600080fd5b506102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116f2565b005b3480156102fa57600080fd5b5061045f6004803603608081101561031157600080fd5b81019080803590602001909291908035906020019064010000000081111561033857600080fd5b82018360208201111561034a57600080fd5b8035906020019184600183028401116401000000008311171561036c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103cf57600080fd5b8201836020820111156103e157600080fd5b8035906020019184600183028401116401000000008311171561040357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611ad8565b005b34801561046d57600080fd5b506104b06004803603602081101561048457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d6565b60405180821515815260200191505060405180910390f35b3480156104d457600080fd5b50610517600480360360208110156104eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a8565b60405180821515815260200191505060405180910390f35b34801561053b57600080fd5b5061054461257a565b6040518082815260200191505060405180910390f35b34801561056657600080fd5b506106576004803603608081101561057d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460018302840111640100000000831117156105f857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050612587565b60405180821515815260200191505060405180910390f35b34801561067b57600080fd5b5061076c6004803603608081101561069257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184600183028401116401000000008311171561070d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff16906020019092919050505061278d565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107b4578082015181840152602081019050610799565b50505050905090810190601f1680156107e15780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156107fc57600080fd5b506108336004803603604081101561081357600080fd5b8101908080359060200190929190803590602001909291905050506127c3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610873578082015181840152602081019050610858565b50505050905090810190601f1680156108a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108ba57600080fd5b506108e7600480360360208110156108d157600080fd5b810190808035906020019092919050505061284a565b6040518082815260200191505060405180910390f35b34801561090957600080fd5b5061094c6004803603602081101561092057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612862565b005b34801561095a57600080fd5b506109876004803603602081101561097157600080fd5b8101908080359060200190929190505050612bea565b005b610b2d60048036036101408110156109a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109e757600080fd5b8201836020820111156109f957600080fd5b80359060200191846001830284011164010000000083111715610a1b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846001830284011164010000000083111715610adb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d24565b60405180821515815260200191505060405180910390f35b348015610b5157600080fd5b50610b9e60048036036040811015610b6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613253565b6040518082815260200191505060405180910390f35b348015610bc057600080fd5b50610d1b60048036036060811015610bd757600080fd5b810190808035906020019092919080359060200190640100000000811115610bfe57600080fd5b820183602082011115610c1057600080fd5b80359060200191846001830284011164010000000083111715610c3257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9557600080fd5b820183602082011115610ca757600080fd5b80359060200191846001830284011164010000000083111715610cc957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613278565b005b348015610d2957600080fd5b50610d32613307565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d75578082015181840152602081019050610d5a565b505050509050019250505060405180910390f35b348015610d9557600080fd5b50610d9e6134b0565b6040518082815260200191505060405180910390f35b348015610dc057600080fd5b50610e9a60048036036040811015610dd757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1457600080fd5b820183602082011115610e2657600080fd5b80359060200191846001830284011164010000000083111715610e4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506134b6565b005b348015610ea857600080fd5b5061100a6004803603610100811015610ec057600080fd5b8101908080359060200190640100000000811115610edd57600080fd5b820183602082011115610eef57600080fd5b80359060200191846020830284011164010000000083111715610f1157600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f5c57600080fd5b820183602082011115610f6e57600080fd5b80359060200191846001830284011164010000000083111715610f9057600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134d8565b005b34801561101857600080fd5b506110656004803603604081101561102f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613696565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156110c45780820151818401526020810190506110a9565b50505050905001935050505060405180910390f35b3480156110e557600080fd5b50611112600480360360208110156110fc57600080fd5b81019080803590602001909291905050506139f9565b005b34801561112057600080fd5b50611238600480360361014081101561113857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561117f57600080fd5b82018360208201111561119157600080fd5b803590602001918460018302840111640100000000831117156111b357600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613b98565b6040518082815260200191505060405180910390f35b34801561125a57600080fd5b506112bd6004803603604081101561127157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bc5565b005b3480156112cb57600080fd5b5061130e600480360360208110156112e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f4c565b005b34801561131c57600080fd5b5061139f6004803603606081101561133357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614138565b005b3480156113ad57600080fd5b506113b6614796565b6040518082815260200191505060405180910390f35b3480156113d857600080fd5b506114f060048036036101408110156113f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561143757600080fd5b82018360208201111561144957600080fd5b8035906020019184600183028401116401000000008311171561146b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506147a0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611530578082015181840152602081019050611515565b50505050905090810190601f16801561155d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561157757600080fd5b506115ba6004803603602081101561158e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614948565b005b3480156115c857600080fd5b506115d161499f565b6040518082815260200191505060405180910390f35b3480156115f357600080fd5b506116606004803603606081101561160a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614a1d565b005b34801561166e57600080fd5b50611677614e46565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156116b757808201518184015260208101905061169c565b50505050905090810190601f1680156116e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6116fa614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156117645750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561179c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61180e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a28060045414611ad457611ad381612bea565b5b5050565b611aec604182614f2290919063ffffffff16565b82511015611b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b868110156123ca57611b7e8882614f5c565b80945081955082965050505060008460ff1614156120035789898051906020012014611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323700000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8260001c9450611c2c604188614f2290919063ffffffff16565b8260001c1015611ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611cbd60208460001c614f8b90919063ffffffff16565b1115611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611d6782611d5960208760001c614f8b90919063ffffffff16565b614f8b90919063ffffffff16565b1115611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611e7d578082015181840152602081019050611e62565b50505050905090810190601f168015611eaa5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611ee3578082015181840152602081019050611ec8565b50505050905090810190601f168015611f105780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f2f57600080fd5b505afa158015611f43573d6000803e3d6000fd5b505050506040513d6020811015611f5957600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ffc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050612248565b60018460ff161415612117578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120a057506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b612112576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612247565b601e8460ff1611156121df5760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ce573d6000803e3d6000fd5b505050602060405103519450612246565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612239573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611801561230f5750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123485750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611b6c565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156124a15750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125735750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126525750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b6126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6126f1858585857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614faa565b90508015612741573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2612785565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000606061279d86868686612587565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff811180156127e157600080fd5b506040519080825280601f01601f1916602001820160405280156128145781602001600182028036833780820191505090505b50905060005b8381101561283f5780850154806020830260208501015250808060010191505061281a565b508091505092915050565b60076020528060005260406000206000915090505481565b61286a614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128d45750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612946576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844060405160405180910390a250565b612bf2614e7f565b600354811115612c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d3e8e8e8e8e8e8e8e8e8e8e6005546147a0565b905060056000815480929190600101919050555080805190602001209150612d67828286613278565b506000612d72614ff6565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612f58578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e1557fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612ee7578082015181840152602081019050612ecc565b50505050905090810190601f168015612f145780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f3f57600080fd5b505af1158015612f53573d6000803e3d6000fd5b505050505b6101f4612f7f6109c48b01603f60408d0281612f7057fe5b0461502790919063ffffffff16565b015a1015612ff5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a905061305e8f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14613053578e613059565b6109c45a035b614faa565b93506130735a8261504190919063ffffffff16565b90508380613082575060008a14155b8061308e575060008814155b613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561311a57613117828b8b8b8b615061565b90505b841561315d57837f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e826040518082815260200191505060405180910390a2613196565b837f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23826040518082815260200191505060405180910390a25b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613242578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561322957600080fd5b505af115801561323d573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b60006004549050600081116132f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61330184848484611ad8565b50505050565b6060600060035467ffffffffffffffff8111801561332457600080fd5b506040519080825280602002602001820160405280156133535781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146134a757808383815181106133fe57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506133bd565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135238a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505089615267565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135615761356084615767565b5b6135af8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615838565b60008211156135c9576135c782600060018685615061565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b60606000600173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806136da57506136d9846123d6565b5b61374c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083116137c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8267ffffffffffffffff811180156137d957600080fd5b506040519080825280602002602001820160405280156138085781602001602082028036833780820191505090505b5091506000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156138da5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138e557508381105b156139a057818382815181106138f757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508080600101915050613870565b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146139ee578260018203815181106139e357fe5b602002602001015191505b808352509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613afb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bad8c8c8c8c8c8c8c8c8c8c8c6147a0565b8051906020012090509b9a5050505050505050505050565b613bcd614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c375750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613ca9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427660405160405180910390a25050565b613f54614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146140c6578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060206040518083038186803b15801561401857600080fd5b505afa15801561402c573d6000803e3d6000fd5b505050506040513d602081101561404257600080fd5b81019080805190602001909291905050506140c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475333303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa260405160405180910390a25050565b614140614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156141aa5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156141e257503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b614254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614355576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156143bf5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614431576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a2505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561483157fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6148bd61499f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614950614e7f565b61495981615767565b8073ffffffffffffffffffffffffffffffffffffffff167f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b060405160405180910390a250565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6149cd61257a565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614a25614e7f565b806001600354031015614aa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015614b0a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614b7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614c7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28060045414614e4157614e4081612bea565b5b505050565b6040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614f20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614f355760009050614f56565b6000828402905082848281614f4657fe5b0414614f5157600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614fa057600080fd5b8091505092915050565b6000600180811115614fb857fe5b836001811115614fc457fe5b1415614fdd576000808551602087018986f49050614fed565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b6000818310156150375781615039565b825b905092915050565b60008282111561505057600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461509e57826150a0565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156151b85761510a3a86106150e7573a6150e9565b855b6150fc888a614f8b90919063ffffffff16565b614f2290919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050506151b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61525d565b6151dd856151cf888a614f8b90919063ffffffff16565b614f2290919063ffffffff16565b91506151ea848284615b0e565b61525c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146152df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156153cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156156d35760008482815181106153ed57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156154615750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561549957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156154d157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615543576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506153d6565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475334303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461593a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614615b0a576159f682615bd2565b615a68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615a978260008360017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614faa565b615b09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615bb55760208114615bbd5760009350615bc8565b819350615bc8565b600051158215171593505b5050509392505050565b600080823b90506000811191505091905056fea264697066735822122057398fa72884cf9a6cb78aab2fb58a6b927f0e9d97d75b015daaee0959a153bf64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH2 0x5C1B DUP1 PUSH3 0x29 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1D1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFFED0E0 GT PUSH2 0xF7 JUMPI DUP1 PUSH4 0xE19A9DD9 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xF08A0323 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF08A0323 EQ PUSH2 0x156B JUMPI DUP1 PUSH4 0xF698DA25 EQ PUSH2 0x15BC JUMPI DUP1 PUSH4 0xF8DC5DD9 EQ PUSH2 0x15E7 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x1662 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xE19A9DD9 EQ PUSH2 0x12BF JUMPI DUP1 PUSH4 0xE318B52B EQ PUSH2 0x1310 JUMPI DUP1 PUSH4 0xE75235B8 EQ PUSH2 0x13A1 JUMPI DUP1 PUSH4 0xE86637DB EQ PUSH2 0x13CC JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xCC2F8452 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xCC2F8452 EQ PUSH2 0x100C JUMPI DUP1 PUSH4 0xD4D9BDCD EQ PUSH2 0x10D9 JUMPI DUP1 PUSH4 0xD8D11F78 EQ PUSH2 0x1114 JUMPI DUP1 PUSH4 0xE009CFDE EQ PUSH2 0x124E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0xD89 JUMPI DUP1 PUSH4 0xB4FABA09 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH4 0xB63E800D EQ PUSH2 0xE9C JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B GT PUSH2 0x16F JUMPI DUP1 PUSH4 0x6A761202 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x6A761202 EQ PUSH2 0x989 JUMPI DUP1 PUSH4 0x7D832974 EQ PUSH2 0xB45 JUMPI DUP1 PUSH4 0x934F3A11 EQ PUSH2 0xBB4 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0xD1D JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0x5AE6BD37 EQ PUSH2 0x8AE JUMPI DUP1 PUSH4 0x610B5925 EQ PUSH2 0x8FD JUMPI DUP1 PUSH4 0x694E80C3 EQ PUSH2 0x94E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x2F54BF6E GT PUSH2 0x1AB JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x4C8 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0x468721A7 EQ PUSH2 0x55A JUMPI DUP1 PUSH4 0x5229073F EQ PUSH2 0x66F JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xD582F13 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x12FB68E0 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x2D9AD53D EQ PUSH2 0x461 JUMPI PUSH2 0x226 JUMP JUMPDEST CALLDATASIZE PUSH2 0x226 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3D0CE9BFC3ED7D6862DBB28B2DEA94561FE714A1B4D019AA8AF39730D1AD7C3D CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD DUP1 PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY CALLER PUSH1 0x60 SHL CALLDATASIZE MSTORE PUSH1 0x0 DUP1 PUSH1 0x14 CALLDATASIZE ADD PUSH1 0x0 DUP1 DUP6 GAS CALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH2 0x28E JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x16F2 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x34A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1AD8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x23D6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x517 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x24A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x544 PUSH2 0x257A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x657 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2587 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x278D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD 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 0x7B4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x799 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x7E1 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 SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x833 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x27C3 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x873 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x858 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8A0 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 0x8BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x284A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x94C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x920 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2862 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x987 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2BEA JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB2D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xADB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x2D24 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3253 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x3278 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD32 PUSH2 0x3307 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD75 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD5A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD9E PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xE26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xE48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x34B6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x100A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0xEC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xEEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x34D8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1065 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x102F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3696 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10C4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x10A9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1112 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x39F9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1238 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x1138 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3B98 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12BD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3BC5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x130E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3F4C JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x131C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x139F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4138 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B6 PUSH2 0x4796 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x13F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x146B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x47A0 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x1530 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1515 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x155D 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 0x1577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15BA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x158E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4948 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D1 PUSH2 0x499F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1660 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x160A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4A1D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1677 PUSH2 0x4E46 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x16B7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x169C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x16E4 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 0x16FA PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1764 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x179C JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x180E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x190F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x1AD4 JUMPI PUSH2 0x1AD3 DUP2 PUSH2 0x2BEA JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1AEC PUSH1 0x41 DUP3 PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD LT ISZERO PUSH2 0x1B62 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303230000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x23CA JUMPI PUSH2 0x1B7E DUP9 DUP3 PUSH2 0x4F5C JUMP JUMPDEST DUP1 SWAP5 POP DUP2 SWAP6 POP DUP3 SWAP7 POP POP POP POP PUSH1 0x0 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2003 JUMPI DUP10 DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x1C12 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303237000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SHR SWAP5 POP PUSH2 0x1C2C PUSH1 0x41 DUP9 PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 PUSH1 0x0 SHR LT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303231000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1CBD PUSH1 0x20 DUP5 PUSH1 0x0 SHR PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1D31 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303232000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 DUP11 ADD ADD MLOAD SWAP1 POP DUP9 MLOAD PUSH2 0x1D67 DUP3 PUSH2 0x1D59 PUSH1 0x20 DUP8 PUSH1 0x0 SHR PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303233000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x20 DUP5 DUP12 ADD ADD SWAP1 POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x20C13B0B DUP14 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 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 0x1E7D JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1E62 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EAA 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 DUP4 DUP2 SUB DUP3 MSTORE DUP5 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 0x1EE3 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1EC8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F10 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1FFC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303234000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH2 0x2248 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2117 JUMPI DUP3 PUSH1 0x0 SHR SWAP5 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x20A0 JUMPI POP PUSH1 0x0 PUSH1 0x8 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP13 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD EQ ISZERO JUMPDEST PUSH2 0x2112 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303235000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2247 JUMP JUMPDEST PUSH1 0x1E DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0x21DF JUMPI PUSH1 0x1 DUP11 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x4 DUP7 SUB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP PUSH2 0x2246 JUMP JUMPDEST PUSH1 0x1 DUP11 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2239 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP JUMPDEST JUMPDEST JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x230F JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x2348 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x23BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303236000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SWAP6 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x1B6C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x24A1 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2573 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 CHAINID SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x26C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26F1 DUP6 DUP6 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4FAA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2741 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x6895C13664AA4F67288B25D7A21D7AAA34916E355FB9B6FAE0A139A9085BECB8 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x2785 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xACD2C8702804128FDB0DB2BB49F6D127DD0181C13FD45DBFE16DE0930E2BD375 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x279D DUP7 DUP7 DUP7 DUP7 PUSH2 0x2587 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 MLOAD PUSH1 0x20 RETURNDATASIZE ADD DUP2 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP2 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY DUP1 SWAP2 POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x20 DUP4 MUL PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x27E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2814 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x283F JUMPI DUP1 DUP6 ADD SLOAD DUP1 PUSH1 0x20 DUP4 MUL PUSH1 0x20 DUP6 ADD ADD MSTORE POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x281A JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH2 0x286A PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x28D4 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x2946 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2A47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xECDF3A3EFFEA5783A3C4C2140E677577666428D44ED9D474A0B3A4C9943F8440 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x2BF2 PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 GT ISZERO PUSH2 0x2C6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2CE1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH32 0x610F7FF2B304AE8903C3DE74C60C6AB1F7D6226B3F52C5161905BB5AD4039C93 PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2D3E DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 PUSH1 0x5 SLOAD PUSH2 0x47A0 JUMP JUMPDEST SWAP1 POP PUSH1 0x5 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP PUSH2 0x2D67 DUP3 DUP3 DUP7 PUSH2 0x3278 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2D72 PUSH2 0x4FF6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2F58 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75F0BB52 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 CALLER PUSH1 0x40 MLOAD DUP14 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP11 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2E15 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP14 DUP14 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP6 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 0x2EE7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2ECC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2F14 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 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1F4 PUSH2 0x2F7F PUSH2 0x9C4 DUP12 ADD PUSH1 0x3F PUSH1 0x40 DUP14 MUL DUP2 PUSH2 0x2F70 JUMPI INVALID JUMPDEST DIV PUSH2 0x5027 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ADD GAS LT ISZERO PUSH2 0x2FF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303130000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 GAS SWAP1 POP PUSH2 0x305E DUP16 DUP16 DUP16 DUP16 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP15 PUSH1 0x0 DUP14 EQ PUSH2 0x3053 JUMPI DUP15 PUSH2 0x3059 JUMP JUMPDEST PUSH2 0x9C4 GAS SUB JUMPDEST PUSH2 0x4FAA JUMP JUMPDEST SWAP4 POP PUSH2 0x3073 GAS DUP3 PUSH2 0x5041 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP4 DUP1 PUSH2 0x3082 JUMPI POP PUSH1 0x0 DUP11 EQ ISZERO JUMPDEST DUP1 PUSH2 0x308E JUMPI POP PUSH1 0x0 DUP9 EQ ISZERO JUMPDEST PUSH2 0x3100 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303133000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP10 GT ISZERO PUSH2 0x311A JUMPI PUSH2 0x3117 DUP3 DUP12 DUP12 DUP12 DUP12 PUSH2 0x5061 JUMP JUMPDEST SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0x315D JUMPI DUP4 PUSH32 0x442E715F626346E8C54381002DA614F62BEE8D27386535B2521EC8540898556E DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x3196 JUMP JUMPDEST DUP4 PUSH32 0x23428B18ACFB3EA64B08DC0C1D296EA9C09702C09083CA5272E64D115B687D23 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3242 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x93271368 DUP4 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO 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 0x3229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x323D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x32F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3301 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1AD8 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3324 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 0x3353 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x34A7 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x33FE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x2 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x33BD JUMP JUMPDEST DUP3 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP6 GAS DELEGATECALL DUP1 PUSH1 0x0 MSTORE RETURNDATASIZE PUSH1 0x20 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x40 RETURNDATACOPY PUSH1 0x40 RETURNDATASIZE ADD PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3523 DUP11 DUP11 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP10 PUSH2 0x5267 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3561 JUMPI PUSH2 0x3560 DUP5 PUSH2 0x5767 JUMP JUMPDEST JUMPDEST PUSH2 0x35AF DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x5838 JUMP JUMPDEST PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x35C9 JUMPI PUSH2 0x35C7 DUP3 PUSH1 0x0 PUSH1 0x1 DUP7 DUP6 PUSH2 0x5061 JUMP JUMPDEST POP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x141DF868A6331AF528E38C83B7AA03EDC19BE66E37AE67F9285BF4F8E3C6A1A8 DUP12 DUP12 DUP12 DUP12 DUP10 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP8 DUP8 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x36DA JUMPI POP PUSH2 0x36D9 DUP5 PUSH2 0x23D6 JUMP JUMPDEST JUMPDEST PUSH2 0x374C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x37C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313036000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x37D9 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 0x3808 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x38DA JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x38E5 JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0x39A0 JUMPI DUP2 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x38F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x3870 JUMP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x39EE JUMPI DUP3 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH2 0x39E3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP JUMPDEST DUP1 DUP4 MSTORE POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3AFB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303330000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x8 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH32 0xF2A0EB156472D1440255B0D7C1E19CC07115D1051FE605B0DCE69ACFEC884D9C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BAD DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x47A0 JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3BCD PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x3C37 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x3CA9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3DA9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAAB4FA2B463F581B2B32CB3B7E3B704B9CE37CC209B5FB4D77E593ACE4054276 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x3F54 PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x40C6 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1FFC9A7 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x402C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x40C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753333030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST PUSH1 0x0 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1151116914515BC0891FF9047A6CB32CF902546F83066499BCF8BA33D2353FA2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x4140 PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x41AA JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x41E2 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4254 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4355 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x43BF JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4431 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4531 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xBB8310D486368DB6BD6F849402FDD73AD53D316B5A4B2644AD6EFE0F941286D8 PUSH1 0x0 SHL DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4831 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL PUSH2 0x48BD PUSH2 0x499F JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4950 PUSH2 0x4E7F JUMP JUMPDEST PUSH2 0x4959 DUP2 PUSH2 0x5767 JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x5AC6C46C93C8D0E53714BA3B53DB3E7C046DA994313D7ED0D192028BC7C228B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x47E79534A245952E8B16893A336B85A3D9EA9FA8C573F3D803AFB92A79469218 PUSH1 0x0 SHL PUSH2 0x49CD PUSH2 0x257A JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x4A25 PUSH2 0x4E7F JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x3 SLOAD SUB LT ISZERO PUSH2 0x4AA0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x4B0A JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4B7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4C7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 SWAP1 SUB SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x4E41 JUMPI PUSH2 0x4E40 DUP2 PUSH2 0x2BEA JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4F20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303331000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 EQ ISZERO PUSH2 0x4F35 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0x4F56 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MUL SWAP1 POP DUP3 DUP5 DUP3 DUP2 PUSH2 0x4F46 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x4F51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x41 MUL PUSH1 0x20 DUP2 ADD DUP7 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP2 ADD DUP7 ADD MLOAD SWAP2 POP PUSH1 0xFF PUSH1 0x41 DUP3 ADD DUP8 ADD MLOAD AND SWAP4 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x4FA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x4FB8 JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4FC4 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4FDD JUMPI PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP10 DUP7 DELEGATECALL SWAP1 POP PUSH2 0x4FED JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP9 DUP11 DUP8 CALL SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x5037 JUMPI DUP2 PUSH2 0x5039 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x5050 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 SUB SWAP1 POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x509E JUMPI DUP3 PUSH2 0x50A0 JUMP JUMPDEST ORIGIN JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x51B8 JUMPI PUSH2 0x510A GASPRICE DUP7 LT PUSH2 0x50E7 JUMPI GASPRICE PUSH2 0x50E9 JUMP JUMPDEST DUP6 JUMPDEST PUSH2 0x50FC DUP9 DUP11 PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP4 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP PUSH2 0x51B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303131000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x525D JUMP JUMPDEST PUSH2 0x51DD DUP6 PUSH2 0x51CF DUP9 DUP11 PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH2 0x51EA DUP5 DUP3 DUP5 PUSH2 0x5B0E JUMP JUMPDEST PUSH2 0x525C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303132000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD EQ PUSH2 0x52DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 GT ISZERO PUSH2 0x5356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x53CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x56D3 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x53ED JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x5461 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x5499 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x54D1 JUMPI POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x5543 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5644 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x53D6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 MLOAD PUSH1 0x3 DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x4 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5809 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753343030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x593A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5B0A JUMPI PUSH2 0x59F6 DUP3 PUSH2 0x5BD2 JUMP JUMPDEST PUSH2 0x5A68 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5A97 DUP3 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4FAA JUMP JUMPDEST PUSH2 0x5B09 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH1 0x20 PUSH1 0x0 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 DUP10 PUSH2 0x2710 GAS SUB CALL RETURNDATASIZE PUSH1 0x0 DUP2 EQ PUSH2 0x5BB5 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x5BBD JUMPI PUSH1 0x0 SWAP4 POP PUSH2 0x5BC8 JUMP JUMPDEST DUP2 SWAP4 POP PUSH2 0x5BC8 JUMP JUMPDEST PUSH1 0x0 MLOAD ISZERO DUP3 ISZERO OR ISZERO SWAP4 POP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI CODECOPY DUP16 0xA7 0x28 DUP5 0xCF SWAP11 PUSH13 0xB78AAB2FB58A6B927F0E9D97D7 JUMPDEST ADD 0x5D 0xAA 0xEE MULMOD MSIZE LOG1 MSTORE8 0xBF PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"1919:19946:7:-:0;;;3700:271;;;;;;;;;;3963:1;3951:9;:13;;;;1919:19946;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106101d15760003560e01c8063affed0e0116100f7578063e19a9dd911610095578063f08a032311610064578063f08a03231461156b578063f698da25146115bc578063f8dc5dd9146115e7578063ffa1ad741461166257610226565b8063e19a9dd9146112bf578063e318b52b14611310578063e75235b8146113a1578063e86637db146113cc57610226565b8063cc2f8452116100d1578063cc2f84521461100c578063d4d9bdcd146110d9578063d8d11f7814611114578063e009cfde1461124e57610226565b8063affed0e014610d89578063b4faba0914610db4578063b63e800d14610e9c57610226565b80635624b25b1161016f5780636a7612021161013e5780636a761202146109895780637d83297414610b45578063934f3a1114610bb4578063a0e67e2b14610d1d57610226565b80635624b25b146107f05780635ae6bd37146108ae578063610b5925146108fd578063694e80c31461094e57610226565b80632f54bf6e116101ab5780632f54bf6e146104c85780633408e4701461052f578063468721a71461055a5780635229073f1461066f57610226565b80630d582f131461029357806312fb68e0146102ee5780632d9ad53d1461046157610226565b36610226573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023257600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061026757600080f35b36600080373360601b365260008060143601600080855af13d6000803e8061028e573d6000fd5b3d6000f35b34801561029f57600080fd5b506102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116f2565b005b3480156102fa57600080fd5b5061045f6004803603608081101561031157600080fd5b81019080803590602001909291908035906020019064010000000081111561033857600080fd5b82018360208201111561034a57600080fd5b8035906020019184600183028401116401000000008311171561036c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103cf57600080fd5b8201836020820111156103e157600080fd5b8035906020019184600183028401116401000000008311171561040357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611ad8565b005b34801561046d57600080fd5b506104b06004803603602081101561048457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d6565b60405180821515815260200191505060405180910390f35b3480156104d457600080fd5b50610517600480360360208110156104eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a8565b60405180821515815260200191505060405180910390f35b34801561053b57600080fd5b5061054461257a565b6040518082815260200191505060405180910390f35b34801561056657600080fd5b506106576004803603608081101561057d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460018302840111640100000000831117156105f857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050612587565b60405180821515815260200191505060405180910390f35b34801561067b57600080fd5b5061076c6004803603608081101561069257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184600183028401116401000000008311171561070d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff16906020019092919050505061278d565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107b4578082015181840152602081019050610799565b50505050905090810190601f1680156107e15780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156107fc57600080fd5b506108336004803603604081101561081357600080fd5b8101908080359060200190929190803590602001909291905050506127c3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610873578082015181840152602081019050610858565b50505050905090810190601f1680156108a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108ba57600080fd5b506108e7600480360360208110156108d157600080fd5b810190808035906020019092919050505061284a565b6040518082815260200191505060405180910390f35b34801561090957600080fd5b5061094c6004803603602081101561092057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612862565b005b34801561095a57600080fd5b506109876004803603602081101561097157600080fd5b8101908080359060200190929190505050612bea565b005b610b2d60048036036101408110156109a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109e757600080fd5b8201836020820111156109f957600080fd5b80359060200191846001830284011164010000000083111715610a1b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846001830284011164010000000083111715610adb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d24565b60405180821515815260200191505060405180910390f35b348015610b5157600080fd5b50610b9e60048036036040811015610b6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613253565b6040518082815260200191505060405180910390f35b348015610bc057600080fd5b50610d1b60048036036060811015610bd757600080fd5b810190808035906020019092919080359060200190640100000000811115610bfe57600080fd5b820183602082011115610c1057600080fd5b80359060200191846001830284011164010000000083111715610c3257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9557600080fd5b820183602082011115610ca757600080fd5b80359060200191846001830284011164010000000083111715610cc957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613278565b005b348015610d2957600080fd5b50610d32613307565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d75578082015181840152602081019050610d5a565b505050509050019250505060405180910390f35b348015610d9557600080fd5b50610d9e6134b0565b6040518082815260200191505060405180910390f35b348015610dc057600080fd5b50610e9a60048036036040811015610dd757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1457600080fd5b820183602082011115610e2657600080fd5b80359060200191846001830284011164010000000083111715610e4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506134b6565b005b348015610ea857600080fd5b5061100a6004803603610100811015610ec057600080fd5b8101908080359060200190640100000000811115610edd57600080fd5b820183602082011115610eef57600080fd5b80359060200191846020830284011164010000000083111715610f1157600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f5c57600080fd5b820183602082011115610f6e57600080fd5b80359060200191846001830284011164010000000083111715610f9057600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134d8565b005b34801561101857600080fd5b506110656004803603604081101561102f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613696565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156110c45780820151818401526020810190506110a9565b50505050905001935050505060405180910390f35b3480156110e557600080fd5b50611112600480360360208110156110fc57600080fd5b81019080803590602001909291905050506139f9565b005b34801561112057600080fd5b50611238600480360361014081101561113857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561117f57600080fd5b82018360208201111561119157600080fd5b803590602001918460018302840111640100000000831117156111b357600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613b98565b6040518082815260200191505060405180910390f35b34801561125a57600080fd5b506112bd6004803603604081101561127157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bc5565b005b3480156112cb57600080fd5b5061130e600480360360208110156112e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f4c565b005b34801561131c57600080fd5b5061139f6004803603606081101561133357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614138565b005b3480156113ad57600080fd5b506113b6614796565b6040518082815260200191505060405180910390f35b3480156113d857600080fd5b506114f060048036036101408110156113f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561143757600080fd5b82018360208201111561144957600080fd5b8035906020019184600183028401116401000000008311171561146b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506147a0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611530578082015181840152602081019050611515565b50505050905090810190601f16801561155d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561157757600080fd5b506115ba6004803603602081101561158e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614948565b005b3480156115c857600080fd5b506115d161499f565b6040518082815260200191505060405180910390f35b3480156115f357600080fd5b506116606004803603606081101561160a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614a1d565b005b34801561166e57600080fd5b50611677614e46565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156116b757808201518184015260208101905061169c565b50505050905090810190601f1680156116e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6116fa614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156117645750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561179c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61180e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a28060045414611ad457611ad381612bea565b5b5050565b611aec604182614f2290919063ffffffff16565b82511015611b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b868110156123ca57611b7e8882614f5c565b80945081955082965050505060008460ff1614156120035789898051906020012014611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323700000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8260001c9450611c2c604188614f2290919063ffffffff16565b8260001c1015611ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611cbd60208460001c614f8b90919063ffffffff16565b1115611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611d6782611d5960208760001c614f8b90919063ffffffff16565b614f8b90919063ffffffff16565b1115611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611e7d578082015181840152602081019050611e62565b50505050905090810190601f168015611eaa5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611ee3578082015181840152602081019050611ec8565b50505050905090810190601f168015611f105780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f2f57600080fd5b505afa158015611f43573d6000803e3d6000fd5b505050506040513d6020811015611f5957600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ffc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050612248565b60018460ff161415612117578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120a057506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b612112576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612247565b601e8460ff1611156121df5760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ce573d6000803e3d6000fd5b505050602060405103519450612246565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612239573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611801561230f5750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123485750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611b6c565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156124a15750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125735750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126525750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b6126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6126f1858585857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614faa565b90508015612741573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2612785565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000606061279d86868686612587565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff811180156127e157600080fd5b506040519080825280601f01601f1916602001820160405280156128145781602001600182028036833780820191505090505b50905060005b8381101561283f5780850154806020830260208501015250808060010191505061281a565b508091505092915050565b60076020528060005260406000206000915090505481565b61286a614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128d45750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612946576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844060405160405180910390a250565b612bf2614e7f565b600354811115612c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d3e8e8e8e8e8e8e8e8e8e8e6005546147a0565b905060056000815480929190600101919050555080805190602001209150612d67828286613278565b506000612d72614ff6565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612f58578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e1557fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612ee7578082015181840152602081019050612ecc565b50505050905090810190601f168015612f145780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f3f57600080fd5b505af1158015612f53573d6000803e3d6000fd5b505050505b6101f4612f7f6109c48b01603f60408d0281612f7057fe5b0461502790919063ffffffff16565b015a1015612ff5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a905061305e8f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14613053578e613059565b6109c45a035b614faa565b93506130735a8261504190919063ffffffff16565b90508380613082575060008a14155b8061308e575060008814155b613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561311a57613117828b8b8b8b615061565b90505b841561315d57837f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e826040518082815260200191505060405180910390a2613196565b837f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23826040518082815260200191505060405180910390a25b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613242578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561322957600080fd5b505af115801561323d573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b60006004549050600081116132f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61330184848484611ad8565b50505050565b6060600060035467ffffffffffffffff8111801561332457600080fd5b506040519080825280602002602001820160405280156133535781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146134a757808383815181106133fe57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506133bd565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135238a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505089615267565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135615761356084615767565b5b6135af8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615838565b60008211156135c9576135c782600060018685615061565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b60606000600173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806136da57506136d9846123d6565b5b61374c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083116137c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8267ffffffffffffffff811180156137d957600080fd5b506040519080825280602002602001820160405280156138085781602001602082028036833780820191505090505b5091506000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156138da5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138e557508381105b156139a057818382815181106138f757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508080600101915050613870565b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146139ee578260018203815181106139e357fe5b602002602001015191505b808352509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613afb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bad8c8c8c8c8c8c8c8c8c8c8c6147a0565b8051906020012090509b9a5050505050505050505050565b613bcd614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c375750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613ca9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427660405160405180910390a25050565b613f54614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146140c6578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060206040518083038186803b15801561401857600080fd5b505afa15801561402c573d6000803e3d6000fd5b505050506040513d602081101561404257600080fd5b81019080805190602001909291905050506140c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475333303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa260405160405180910390a25050565b614140614e7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156141aa5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156141e257503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b614254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614355576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156143bf5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614431576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a2505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561483157fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6148bd61499f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614950614e7f565b61495981615767565b8073ffffffffffffffffffffffffffffffffffffffff167f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b060405160405180910390a250565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6149cd61257a565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614a25614e7f565b806001600354031015614aa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015614b0a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614b7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614c7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28060045414614e4157614e4081612bea565b5b505050565b6040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614f20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614f355760009050614f56565b6000828402905082848281614f4657fe5b0414614f5157600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614fa057600080fd5b8091505092915050565b6000600180811115614fb857fe5b836001811115614fc457fe5b1415614fdd576000808551602087018986f49050614fed565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b6000818310156150375781615039565b825b905092915050565b60008282111561505057600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461509e57826150a0565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156151b85761510a3a86106150e7573a6150e9565b855b6150fc888a614f8b90919063ffffffff16565b614f2290919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050506151b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61525d565b6151dd856151cf888a614f8b90919063ffffffff16565b614f2290919063ffffffff16565b91506151ea848284615b0e565b61525c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146152df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156153cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156156d35760008482815181106153ed57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156154615750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561549957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156154d157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615543576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506153d6565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475334303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461593a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614615b0a576159f682615bd2565b615a68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615a978260008360017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614faa565b615b09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615bb55760208114615bbd5760009350615bc8565b819350615bc8565b600051158215171593505b5050509392505050565b600080823b90506000811191505091905056fea264697066735822122057398fa72884cf9a6cb78aab2fb58a6b927f0e9d97d75b015daaee0959a153bf64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1D1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFFED0E0 GT PUSH2 0xF7 JUMPI DUP1 PUSH4 0xE19A9DD9 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xF08A0323 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF08A0323 EQ PUSH2 0x156B JUMPI DUP1 PUSH4 0xF698DA25 EQ PUSH2 0x15BC JUMPI DUP1 PUSH4 0xF8DC5DD9 EQ PUSH2 0x15E7 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x1662 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xE19A9DD9 EQ PUSH2 0x12BF JUMPI DUP1 PUSH4 0xE318B52B EQ PUSH2 0x1310 JUMPI DUP1 PUSH4 0xE75235B8 EQ PUSH2 0x13A1 JUMPI DUP1 PUSH4 0xE86637DB EQ PUSH2 0x13CC JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xCC2F8452 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xCC2F8452 EQ PUSH2 0x100C JUMPI DUP1 PUSH4 0xD4D9BDCD EQ PUSH2 0x10D9 JUMPI DUP1 PUSH4 0xD8D11F78 EQ PUSH2 0x1114 JUMPI DUP1 PUSH4 0xE009CFDE EQ PUSH2 0x124E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0xD89 JUMPI DUP1 PUSH4 0xB4FABA09 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH4 0xB63E800D EQ PUSH2 0xE9C JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B GT PUSH2 0x16F JUMPI DUP1 PUSH4 0x6A761202 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x6A761202 EQ PUSH2 0x989 JUMPI DUP1 PUSH4 0x7D832974 EQ PUSH2 0xB45 JUMPI DUP1 PUSH4 0x934F3A11 EQ PUSH2 0xBB4 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0xD1D JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0x5AE6BD37 EQ PUSH2 0x8AE JUMPI DUP1 PUSH4 0x610B5925 EQ PUSH2 0x8FD JUMPI DUP1 PUSH4 0x694E80C3 EQ PUSH2 0x94E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x2F54BF6E GT PUSH2 0x1AB JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x4C8 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0x468721A7 EQ PUSH2 0x55A JUMPI DUP1 PUSH4 0x5229073F EQ PUSH2 0x66F JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xD582F13 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x12FB68E0 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x2D9AD53D EQ PUSH2 0x461 JUMPI PUSH2 0x226 JUMP JUMPDEST CALLDATASIZE PUSH2 0x226 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3D0CE9BFC3ED7D6862DBB28B2DEA94561FE714A1B4D019AA8AF39730D1AD7C3D CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD DUP1 PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY CALLER PUSH1 0x60 SHL CALLDATASIZE MSTORE PUSH1 0x0 DUP1 PUSH1 0x14 CALLDATASIZE ADD PUSH1 0x0 DUP1 DUP6 GAS CALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH2 0x28E JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x16F2 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x34A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1AD8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x23D6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x517 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x24A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x544 PUSH2 0x257A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x657 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2587 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x278D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD 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 0x7B4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x799 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x7E1 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 SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x833 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x27C3 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x873 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x858 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8A0 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 0x8BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x284A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x94C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x920 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2862 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x987 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2BEA JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB2D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xADB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x2D24 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3253 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x3278 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD32 PUSH2 0x3307 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD75 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD5A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD9E PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xE26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xE48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x34B6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x100A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0xEC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xEEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x34D8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1065 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x102F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3696 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10C4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x10A9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1112 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x39F9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1238 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x1138 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3B98 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12BD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3BC5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x130E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3F4C JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x131C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x139F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4138 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B6 PUSH2 0x4796 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x13F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x146B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x47A0 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x1530 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1515 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x155D 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 0x1577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15BA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x158E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4948 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D1 PUSH2 0x499F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1660 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x160A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4A1D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1677 PUSH2 0x4E46 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x16B7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x169C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x16E4 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 0x16FA PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1764 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x179C JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x180E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x190F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x1AD4 JUMPI PUSH2 0x1AD3 DUP2 PUSH2 0x2BEA JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1AEC PUSH1 0x41 DUP3 PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD LT ISZERO PUSH2 0x1B62 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303230000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x23CA JUMPI PUSH2 0x1B7E DUP9 DUP3 PUSH2 0x4F5C JUMP JUMPDEST DUP1 SWAP5 POP DUP2 SWAP6 POP DUP3 SWAP7 POP POP POP POP PUSH1 0x0 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2003 JUMPI DUP10 DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x1C12 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303237000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SHR SWAP5 POP PUSH2 0x1C2C PUSH1 0x41 DUP9 PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 PUSH1 0x0 SHR LT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303231000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1CBD PUSH1 0x20 DUP5 PUSH1 0x0 SHR PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1D31 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303232000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 DUP11 ADD ADD MLOAD SWAP1 POP DUP9 MLOAD PUSH2 0x1D67 DUP3 PUSH2 0x1D59 PUSH1 0x20 DUP8 PUSH1 0x0 SHR PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303233000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x20 DUP5 DUP12 ADD ADD SWAP1 POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x20C13B0B DUP14 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 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 0x1E7D JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1E62 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EAA 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 DUP4 DUP2 SUB DUP3 MSTORE DUP5 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 0x1EE3 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1EC8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F10 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1FFC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303234000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH2 0x2248 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2117 JUMPI DUP3 PUSH1 0x0 SHR SWAP5 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x20A0 JUMPI POP PUSH1 0x0 PUSH1 0x8 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP13 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD EQ ISZERO JUMPDEST PUSH2 0x2112 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303235000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2247 JUMP JUMPDEST PUSH1 0x1E DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0x21DF JUMPI PUSH1 0x1 DUP11 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x4 DUP7 SUB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP PUSH2 0x2246 JUMP JUMPDEST PUSH1 0x1 DUP11 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2239 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP JUMPDEST JUMPDEST JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x230F JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x2348 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x23BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303236000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SWAP6 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x1B6C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x24A1 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2573 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 CHAINID SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x26C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26F1 DUP6 DUP6 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4FAA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2741 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x6895C13664AA4F67288B25D7A21D7AAA34916E355FB9B6FAE0A139A9085BECB8 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x2785 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xACD2C8702804128FDB0DB2BB49F6D127DD0181C13FD45DBFE16DE0930E2BD375 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x279D DUP7 DUP7 DUP7 DUP7 PUSH2 0x2587 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 MLOAD PUSH1 0x20 RETURNDATASIZE ADD DUP2 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP2 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY DUP1 SWAP2 POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x20 DUP4 MUL PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x27E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2814 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x283F JUMPI DUP1 DUP6 ADD SLOAD DUP1 PUSH1 0x20 DUP4 MUL PUSH1 0x20 DUP6 ADD ADD MSTORE POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x281A JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH2 0x286A PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x28D4 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x2946 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2A47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xECDF3A3EFFEA5783A3C4C2140E677577666428D44ED9D474A0B3A4C9943F8440 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x2BF2 PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 GT ISZERO PUSH2 0x2C6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2CE1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH32 0x610F7FF2B304AE8903C3DE74C60C6AB1F7D6226B3F52C5161905BB5AD4039C93 PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2D3E DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 PUSH1 0x5 SLOAD PUSH2 0x47A0 JUMP JUMPDEST SWAP1 POP PUSH1 0x5 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP PUSH2 0x2D67 DUP3 DUP3 DUP7 PUSH2 0x3278 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2D72 PUSH2 0x4FF6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2F58 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75F0BB52 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 CALLER PUSH1 0x40 MLOAD DUP14 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP11 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2E15 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP14 DUP14 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP6 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 0x2EE7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2ECC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2F14 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 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1F4 PUSH2 0x2F7F PUSH2 0x9C4 DUP12 ADD PUSH1 0x3F PUSH1 0x40 DUP14 MUL DUP2 PUSH2 0x2F70 JUMPI INVALID JUMPDEST DIV PUSH2 0x5027 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ADD GAS LT ISZERO PUSH2 0x2FF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303130000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 GAS SWAP1 POP PUSH2 0x305E DUP16 DUP16 DUP16 DUP16 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP15 PUSH1 0x0 DUP14 EQ PUSH2 0x3053 JUMPI DUP15 PUSH2 0x3059 JUMP JUMPDEST PUSH2 0x9C4 GAS SUB JUMPDEST PUSH2 0x4FAA JUMP JUMPDEST SWAP4 POP PUSH2 0x3073 GAS DUP3 PUSH2 0x5041 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP4 DUP1 PUSH2 0x3082 JUMPI POP PUSH1 0x0 DUP11 EQ ISZERO JUMPDEST DUP1 PUSH2 0x308E JUMPI POP PUSH1 0x0 DUP9 EQ ISZERO JUMPDEST PUSH2 0x3100 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303133000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP10 GT ISZERO PUSH2 0x311A JUMPI PUSH2 0x3117 DUP3 DUP12 DUP12 DUP12 DUP12 PUSH2 0x5061 JUMP JUMPDEST SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0x315D JUMPI DUP4 PUSH32 0x442E715F626346E8C54381002DA614F62BEE8D27386535B2521EC8540898556E DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x3196 JUMP JUMPDEST DUP4 PUSH32 0x23428B18ACFB3EA64B08DC0C1D296EA9C09702C09083CA5272E64D115B687D23 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3242 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x93271368 DUP4 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO 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 0x3229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x323D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x32F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3301 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1AD8 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3324 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 0x3353 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x34A7 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x33FE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x2 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x33BD JUMP JUMPDEST DUP3 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP6 GAS DELEGATECALL DUP1 PUSH1 0x0 MSTORE RETURNDATASIZE PUSH1 0x20 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x40 RETURNDATACOPY PUSH1 0x40 RETURNDATASIZE ADD PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3523 DUP11 DUP11 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP10 PUSH2 0x5267 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3561 JUMPI PUSH2 0x3560 DUP5 PUSH2 0x5767 JUMP JUMPDEST JUMPDEST PUSH2 0x35AF DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x5838 JUMP JUMPDEST PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x35C9 JUMPI PUSH2 0x35C7 DUP3 PUSH1 0x0 PUSH1 0x1 DUP7 DUP6 PUSH2 0x5061 JUMP JUMPDEST POP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x141DF868A6331AF528E38C83B7AA03EDC19BE66E37AE67F9285BF4F8E3C6A1A8 DUP12 DUP12 DUP12 DUP12 DUP10 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP8 DUP8 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x36DA JUMPI POP PUSH2 0x36D9 DUP5 PUSH2 0x23D6 JUMP JUMPDEST JUMPDEST PUSH2 0x374C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x37C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313036000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x37D9 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 0x3808 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x38DA JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x38E5 JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0x39A0 JUMPI DUP2 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x38F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x3870 JUMP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x39EE JUMPI DUP3 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH2 0x39E3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP JUMPDEST DUP1 DUP4 MSTORE POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3AFB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303330000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x8 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH32 0xF2A0EB156472D1440255B0D7C1E19CC07115D1051FE605B0DCE69ACFEC884D9C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BAD DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x47A0 JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3BCD PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x3C37 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x3CA9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3DA9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAAB4FA2B463F581B2B32CB3B7E3B704B9CE37CC209B5FB4D77E593ACE4054276 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x3F54 PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x40C6 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1FFC9A7 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x402C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x40C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753333030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST PUSH1 0x0 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1151116914515BC0891FF9047A6CB32CF902546F83066499BCF8BA33D2353FA2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x4140 PUSH2 0x4E7F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x41AA JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x41E2 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4254 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4355 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x43BF JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4431 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4531 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xBB8310D486368DB6BD6F849402FDD73AD53D316B5A4B2644AD6EFE0F941286D8 PUSH1 0x0 SHL DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4831 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL PUSH2 0x48BD PUSH2 0x499F JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4950 PUSH2 0x4E7F JUMP JUMPDEST PUSH2 0x4959 DUP2 PUSH2 0x5767 JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x5AC6C46C93C8D0E53714BA3B53DB3E7C046DA994313D7ED0D192028BC7C228B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x47E79534A245952E8B16893A336B85A3D9EA9FA8C573F3D803AFB92A79469218 PUSH1 0x0 SHL PUSH2 0x49CD PUSH2 0x257A JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x4A25 PUSH2 0x4E7F JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x3 SLOAD SUB LT ISZERO PUSH2 0x4AA0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x4B0A JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4B7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4C7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 SWAP1 SUB SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x4E41 JUMPI PUSH2 0x4E40 DUP2 PUSH2 0x2BEA JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4F20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303331000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 EQ ISZERO PUSH2 0x4F35 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0x4F56 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MUL SWAP1 POP DUP3 DUP5 DUP3 DUP2 PUSH2 0x4F46 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x4F51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x41 MUL PUSH1 0x20 DUP2 ADD DUP7 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP2 ADD DUP7 ADD MLOAD SWAP2 POP PUSH1 0xFF PUSH1 0x41 DUP3 ADD DUP8 ADD MLOAD AND SWAP4 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x4FA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x4FB8 JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4FC4 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4FDD JUMPI PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP10 DUP7 DELEGATECALL SWAP1 POP PUSH2 0x4FED JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP9 DUP11 DUP8 CALL SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x5037 JUMPI DUP2 PUSH2 0x5039 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x5050 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 SUB SWAP1 POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x509E JUMPI DUP3 PUSH2 0x50A0 JUMP JUMPDEST ORIGIN JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x51B8 JUMPI PUSH2 0x510A GASPRICE DUP7 LT PUSH2 0x50E7 JUMPI GASPRICE PUSH2 0x50E9 JUMP JUMPDEST DUP6 JUMPDEST PUSH2 0x50FC DUP9 DUP11 PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP4 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP PUSH2 0x51B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303131000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x525D JUMP JUMPDEST PUSH2 0x51DD DUP6 PUSH2 0x51CF DUP9 DUP11 PUSH2 0x4F8B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4F22 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH2 0x51EA DUP5 DUP3 DUP5 PUSH2 0x5B0E JUMP JUMPDEST PUSH2 0x525C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303132000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD EQ PUSH2 0x52DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 GT ISZERO PUSH2 0x5356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x53CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x56D3 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x53ED JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x5461 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x5499 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x54D1 JUMPI POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x5543 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5644 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x53D6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 MLOAD PUSH1 0x3 DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x4 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5809 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753343030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x593A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5B0A JUMPI PUSH2 0x59F6 DUP3 PUSH2 0x5BD2 JUMP JUMPDEST PUSH2 0x5A68 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5A97 DUP3 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4FAA JUMP JUMPDEST PUSH2 0x5B09 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH1 0x20 PUSH1 0x0 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 DUP10 PUSH2 0x2710 GAS SUB CALL RETURNDATASIZE PUSH1 0x0 DUP2 EQ PUSH2 0x5BB5 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x5BBD JUMPI PUSH1 0x0 SWAP4 POP PUSH2 0x5BC8 JUMP JUMPDEST DUP2 SWAP4 POP PUSH2 0x5BC8 JUMP JUMPDEST PUSH1 0x0 MLOAD ISZERO DUP3 ISZERO OR ISZERO SWAP4 POP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI CODECOPY DUP16 0xA7 0x28 DUP5 0xCF SWAP11 PUSH13 0xB78AAB2FB58A6B927F0E9D97D7 JUMPDEST ADD 0x5D 0xAA 0xEE MULMOD MSIZE LOG1 MSTORE8 0xBF PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"1919:19946:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:10:16;538:35;;;563:9;538:35;;;;;;;;;;;;;;;;;;1919:19946:7;;;;;;;;;;;;3193:12:11;479:66;3208:29;;3193:44;;3347:4;3341:11;3375:7;3365:2;;3412:1;3409;3402:12;3365:2;3460:14;3457:1;3454;3441:34;3697:8;3693:2;3689:17;3673:14;3666:41;3855:1;3852;3847:2;3831:14;3827:23;3824:1;3821;3812:7;3805:5;3800:57;3891:16;3888:1;3885;3870:38;3931:7;3921:2;;3968:16;3965:1;3958:27;3921:2;4022:16;4019:1;4012:27;2399:625:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13892:3837:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5780:151:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6140:138:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18522:211:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3622:594:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4707:959;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;785:464:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:49:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2001:426:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5398:360:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7433:3556:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3521:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12858:353;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6383:437:14;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3188:20:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1882:486:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4740:1151:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6437:1535:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18133:228:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21385:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2677:423:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1962:386:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4416:796:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5915:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19858:822:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2437:161:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18901:149:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3380:697:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2205:40:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2399:625:14;505:17:18;:15;:17::i;:::-;2592:1:14::1;2575:19;;:5;:19;;;;:47;;;;;687:3;2598:24;;:5;:24;;;;2575:47;:73;;;;;2643:4;2626:22;;:5;:22;;;;2575:73;2567:91;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2741:1;2716:27;;:6;:13;2723:5;2716:13;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;2708:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2779:6;:23;687:3;2779:23;;;;;;;;;;;;;;;;;;;;;;;;;2763:6;:13;2770:5;2763:13;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;2838:5;2812:6;:23;687:3;2812:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2853:10;;:12;;;;;;;;;;;;;2891:5;2880:17;;;;;;;;;;;;2978:10;2965:9;;:23;2961:56;;2990:27;3006:10;2990:15;:27::i;:::-;2961:56;2399:625:::0;;:::o;13892:3837:7:-;14126:26;14149:2;14126:18;:22;;:26;;;;:::i;:::-;14105:10;:17;:47;;14097:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14224:17;14264:20;14294:7;14311:9;14330;14349;14368:3355;14384:18;14380:1;:22;14368:3355;;;14435:29;14450:10;14462:1;14435:14;:29::i;:::-;14423:41;;;;;;;;;;;;14487:1;14482;:6;;;14478:3068;;;14535:8;14526:4;14516:15;;;;;;:27;14508:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14770:1;14762:10;;14731:43;;15175:26;15198:2;15175:18;:22;;:26;;;;:::i;:::-;15169:1;15161:10;;:40;;15153:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15373:10;:17;15351:18;15366:2;15359:1;15351:10;;:14;;:18;;;;:::i;:::-;:39;;15343:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15544:28;15739:4;15735:1;15723:10;15719:18;15715:29;15709:36;15685:60;;15836:10;:17;15788:44;15811:20;15788:18;15803:2;15796:1;15788:10;;:14;;:18;;;;:::i;:::-;:22;;:44;;;;:::i;:::-;:65;;15780:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15917:30;16244:4;16240:1;16228:10;16224:18;16220:29;16199:50;;223:10:35;16371:19:7;;16292:98;;;16312:12;16292:50;;;16343:4;16349:17;16292:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:98;;;;16284:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14478:3068;;;;;16430:1;16425;:6;;;16421:1125;;;16642:1;16634:10;;16603:43;;16831:12;16817:26;;:10;:26;;;:73;;;;16889:1;16847:14;:28;16862:12;16847:28;;;;;;;;;;;;;;;:38;16876:8;16847:38;;;;;;;;;;;;:43;;16817:73;16809:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16421:1125;;;16929:2;16925:1;:6;;;16921:625;;;17202:97;17275:8;17222:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17212:73;;;;;;17291:1;17287;:5;17294:1;17297;17202:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17187:112;;16921:625;;;17503:28;17513:8;17523:1;17526;17529;17503:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17488:43;;16921:625;16421:1125;14478:3068;17582:9;17567:24;;:12;:24;;;:62;;;;;17627:1;17595:34;;:6;:20;17602:12;17595:20;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;17567:62;:97;;;;;687:3:14;17633:31:7;;:12;:31;;;;17567:97;17559:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17700:12;17688:24;;14404:3;;;;;;;14368:3355;;;13892:3837;;;;;;;;;;:::o;5780:151:13:-;5842:4;5885:6;5865:26;;1005:3;5865:26;;;;:59;;;;;5922:1;5895:29;;:7;:15;5903:6;5895:15;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;;5865:59;5858:66;;5780:151;;;:::o;6140:138:14:-;6193:4;687:3;6216:24;;:5;:24;;;;:55;;;;;6269:1;6244:27;;:6;:13;6251:5;6244:13;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;;6216:55;6209:62;;6140:138;;;:::o;18522:211:7:-;18565:7;18584:10;18689:9;18683:15;;18724:2;18717:9;;;18522:211;:::o;3622:594:13:-;3791:12;1005:3;3872:30;;:10;:30;;;;:67;;;;;3937:1;3906:33;;:7;:19;3914:10;3906:19;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;3872:67;3864:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4031:54;4039:2;4043:5;4050:4;4056:9;4067:17;4031:7;:54::i;:::-;4021:64;;4099:7;4095:114;;;4140:10;4113:38;;;;;;;;;;;;4095:114;;;4198:10;4171:38;;;;;;;;;;;;4095:114;3622:594;;;;;;:::o;4707:959::-;4878:12;4892:23;4937:53;4963:2;4967:5;4974:4;4980:9;4937:25;:53::i;:::-;4927:63;;5137:4;5131:11;5379:4;5361:16;5357:27;5352:3;5348:37;5342:4;5335:51;5441:16;5436:3;5429:29;5535:16;5532:1;5525:4;5520:3;5516:14;5501:51;5647:3;5633:17;;5065:595;;;;;;;;:::o;785:464:21:-;860:12;884:19;925:2;916:6;:11;906:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;884:44;;943:13;938:282;970:6;962:5;:14;938:282;;;1118:5;1110:6;1106:18;1100:25;1191:4;1183;1176:5;1172:16;1165:4;1157:6;1153:17;1149:40;1142:54;1070:140;978:7;;;;;;;938:282;;;;1236:6;1229:13;;;785:464;;;;:::o;3360:49:7:-;;;;;;;;;;;;;;;;;:::o;2001:426:13:-;505:17:18;:15;:17::i;:::-;2147:1:13::1;2129:20;;:6;:20;;;;:50;;;;;1005:3;2153:26;;:6;:26;;;;2129:50;2121:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2275:1;2248:29;;:7;:15;2256:6;2248:15;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;2240:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2315:7;:25;1005:3;2315:25;;;;;;;;;;;;;;;;;;;;;;;;;2297:7;:15;2305:6;2297:15;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;2378:6;2350:7;:25;1005:3;2350:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;2413:6;2399:21;;;;;;;;;;;;2001:426:::0;:::o;5398:360:14:-;505:17:18;:15;:17::i;:::-;5562:10:14::1;;5548;:24;;5540:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5666:1;5652:10;:15;;5644:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5699:10;5687:9;:22;;;;5724:27;5741:9;;5724:27;;;;;;;;;;;;;;;;;;5398:360:::0;:::o;7433:3556:7:-;7779:12;7803:14;7930:23;7956:388;8031:2;8051:5;8074:4;;8096:9;8123;8182:7;8207:8;8233;8259:14;8325:5;;7956:21;:388::i;:::-;7930:414;;8413:5;;:7;;;;;;;;;;;;;8453:10;8443:21;;;;;;8434:30;;8478:47;8494:6;8502:10;8514;8478:15;:47::i;:::-;7433:3556;8545:13;8561:10;:8;:10::i;:::-;8545:26;;8616:1;8599:19;;:5;:19;;;8595:547;;8644:5;8638:29;;;8729:2;8753:5;8780:4;;8806:9;8837;8904:7;8933:8;8963;8993:14;9067:10;9099;8638:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8595:547;9504:3;9456:45;9496:4;9484:9;:16;9476:2;9470;9458:9;:14;9457:21;;;;;;9456:27;;:45;;;;:::i;:::-;:51;9443:9;:64;;9435:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9630:15;9648:9;9630:27;;9936:83;9944:2;9948:5;9955:4;;9936:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9961:9;9984:1;9972:8;:13;:46;;10009:9;9972:46;;;10001:4;9989:9;:16;9972:46;9936:7;:83::i;:::-;9926:93;;10043:22;10055:9;10043:7;:11;;:22;;;;:::i;:::-;10033:32;;10349:7;:25;;;;10373:1;10360:9;:14;;10349:25;:42;;;;10390:1;10378:8;:13;;10349:42;10341:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10550:15;10598:1;10587:8;:12;10583:128;;;10629:67;10643:7;10652;10661:8;10671;10681:14;10629:13;:67::i;:::-;10619:77;;10583:128;10728:7;10724:108;;;10759:6;10742:33;10767:7;10742:33;;;;;;;;;;;;;;;;;;10724:108;;;10816:6;10799:33;10824:7;10799:33;;;;;;;;;;;;;;;;;;10724:108;7433:3556;;10887:1;10870:19;;:5;:19;;;10866:107;;10915:5;10909:32;;;10942:6;10950:7;10909:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10866:107;7433:3556;;;;;;;;;;;;;;;:::o;3521:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12858:353::-;13025:18;13046:9;;13025:30;;13127:1;13114:10;:14;13106:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13148:56;13165:8;13175:4;13181:10;13193;13148:16;:56::i;:::-;12858:353;;;;:::o;6383:437:14:-;6425:16;6453:22;6492:10;;6478:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6453:50;;6547:13;6574:20;6597:6;:23;687:3;6597:23;;;;;;;;;;;;;;;;;;;;;;;;;6574:46;;6630:162;687:3;6637:31;;:12;:31;;;6630:162;;6699:12;6684:5;6690;6684:12;;;;;;;;;;;;;:27;;;;;;;;;;;6740:6;:20;6747:12;6740:20;;;;;;;;;;;;;;;;;;;;;;;;;6725:35;;6774:7;;;;;;;6630:162;;;6808:5;6801:12;;;;;6383:437;:::o;3188:20:7:-;;;;:::o;1882:486:21:-;2167:1;2164;2146:15;2140:22;2133:4;2116:15;2112:26;2096:14;2089:5;2076:93;2196:7;2190:4;2183:21;2230:16;2224:4;2217:30;2284:16;2281:1;2275:4;2260:41;2346:4;2328:16;2324:27;2321:1;2314:38;4740:1151:7;5139:32;5151:7;;5139:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5160:10;5139:11;:32::i;:::-;5212:1;5185:29;;:15;:29;;;5181:78;;5216:43;5243:15;5216:26;:43::i;:::-;5181:78;5394:22;5407:2;5411:4;;5394:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:22::i;:::-;5441:1;5431:7;:11;5427:380;;;5737:59;5751:7;5760:1;5763;5766:12;5780:15;5737:13;:59::i;:::-;;5427:380;5831:10;5821:63;;;5843:7;;5852:10;5864:2;5868:15;5821:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4740:1151;;;;;;;;;;:::o;6437:1535:13:-;6522:22;6546:12;1005:3;6578:25;;:5;:25;;;:51;;;;6607:22;6623:5;6607:15;:22::i;:::-;6578:51;6570:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6668:1;6657:8;:12;6649:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6752:8;6738:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6730:31;;6805:19;6845:7;:14;6853:5;6845:14;;;;;;;;;;;;;;;;;;;;;;;;;6838:21;;6869:192;6892:1;6876:18;;:4;:18;;;;:46;;;;;1005:3;6898:24;;:4;:24;;;;6876:46;:72;;;;;6940:8;6926:11;:22;6876:72;6869:192;;;6985:4;6964:5;6970:11;6964:18;;;;;;;;;;;;;:25;;;;;;;;;;;7010:7;:13;7018:4;7010:13;;;;;;;;;;;;;;;;;;;;;;;;;7003:20;;7037:13;;;;;;;6869:192;;;1005:3;7716:24;;:4;:24;;;7712:84;;7763:5;7783:1;7769:11;:15;7763:22;;;;;;;;;;;;;;7756:29;;7712:84;7944:11;7937:5;7930:26;7916:50;;;;;;:::o;18133:228:7:-;18234:1;18204:32;;:6;:18;18211:10;18204:18;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;18196:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18300:1;18256:14;:26;18271:10;18256:26;;;;;;;;;;;;;;;:41;18283:13;18256:41;;;;;;;;;;;:45;;;;18343:10;18316:38;;18328:13;18316:38;;;;;;;;;;18133:228;:::o;21385:478::-;21706:7;21742:113;21764:2;21768:5;21775:4;;21781:9;21792;21803:7;21812:8;21822;21832:14;21848:6;21742:21;:113::i;:::-;21732:124;;;;;;21725:131;;21385:478;;;;;;;;;;;;;:::o;2677:423:13:-;505:17:18;:15;:17::i;:::-;2872:1:13::1;2854:20;;:6;:20;;;;:50;;;;;1005:3;2878:26;;:6;:26;;;;2854:50;2846:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2955:6;2932:29;;:7;:19;2940:10;2932:19;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;2924:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3003:7;:15;3011:6;3003:15;;;;;;;;;;;;;;;;;;;;;;;;;2981:7;:19;2989:10;2981:19;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;3054:1;3028:7;:15;3036:6;3028:15;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;3086:6;3071:22;;;;;;;;;;;;2677:423:::0;;:::o;1962:386:12:-;505:17:18;:15;:17::i;:::-;2046:1:12::1;2029:19;;:5;:19;;;2025:123;;2078:5;2072:30;;;2103:23;2072:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;2064:73;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2025:123;2157:12;1306:66;2172:18;;2157:33;;2292:5;2286:4;2279:19;2335:5;2322:19;;;;;;;;;;;;532:1:18;1962:386:12::0;:::o;4416:796:14:-;505:17:18;:15;:17::i;:::-;4620:1:14::1;4600:22;;:8;:22;;;;:53;;;;;687:3;4626:27;;:8;:27;;;;4600:53;:82;;;;;4677:4;4657:25;;:8;:25;;;;4600:82;4592:100;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4778:1;4750:30;;:6;:16;4757:8;4750:16;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;4742:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4911:1;4891:22;;:8;:22;;;;:53;;;;;687:3;4917:27;;:8;:27;;;;4891:53;4883:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4993:8;4972:29;;:6;:17;4979:9;4972:17;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;4964:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5040:6;:16;5047:8;5040:16;;;;;;;;;;;;;;;;;;;;;;;;;5021:6;:16;5028:8;5021:16;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;5086:8;5066:6;:17;5073:9;5066:17;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;5131:1;5104:6;:16;5111:8;5104:16;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;5161:8;5148:22;;;;;;;;;;;;5196:8;5185:20;;;;;;;;;;;;4416:796:::0;;;:::o;5915:87::-;5960:7;5986:9;;5979:16;;5915:87;:::o;19858:822:7:-;20182:12;20206:18;2725:66;20278:16;;20312:2;20332:5;20365:4;;20355:15;;;;;;;;;;;;;;;;;;;;;;;;;;;20388:9;20415;20442:7;20467:8;20493;20519:14;20551:6;20250:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20227:354;;;;;;20206:375;;20622:4;20615:12;;20636:4;20629:12;;20643:17;:15;:17::i;:::-;20662:10;20598:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20591:82;;;19858:822;;;;;;;;;;;;;:::o;2437:161:11:-;505:17:18;:15;:17::i;:::-;2510:35:11::1;2537:7;2510:26;:35::i;:::-;2583:7;2560:31;;;;;;;;;;;;2437:161:::0;:::o;18901:149:7:-;18949:7;2402:66;18996:25;;19023:12;:10;:12::i;:::-;19037:4;18985:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18975:68;;;;;;18968:75;;18901:149;:::o;3380:697:14:-;505:17:18;:15;:17::i;:::-;3586:10:14::1;3581:1;3568:10;;:14;:28;;3560:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3721:1;3704:19;;:5;:19;;;;:47;;;;;687:3;3727:24;;:5;:24;;;;3704:47;3696:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3800:5;3779:26;;:6;:17;3786:9;3779:17;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;3771:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3845:6;:13;3852:5;3845:13;;;;;;;;;;;;;;;;;;;;;;;;;3825:6;:17;3832:9;3825:17;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;3892:1;3868:6;:13;3875:5;3868:13;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3904:10;;:12;;;;;;;;;;;;;;3944:5;3931:19;;;;;;;;;;;;4031:10;4018:9;;:23;4014:56;;4043:27;4059:10;4043:15;:27::i;:::-;4014:56;3380:697:::0;;;:::o;2205:40:7:-;;;;;;;;;;;;;;;;;;;:::o;248:102:18:-;328:4;306:27;;:10;:27;;;298:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;248:102::o;382:421:27:-;440:7;685:1;680;:6;676:45;;;709:1;702:8;;;;676:45;731:9;747:1;743;:5;731:17;;775:1;770;766;:5;;;;;;:10;758:19;;;;;;795:1;788:8;;;382:421;;;;;:::o;947:744:19:-;1032:7;1041:9;1052;1182:3;1176:4;1172:14;1244:4;1230:12;1226:23;1214:10;1210:40;1204:47;1199:52;;1309:4;1295:12;1291:23;1279:10;1275:40;1269:47;1264:52;;1670:4;1661;1647:12;1643:23;1631:10;1627:40;1621:47;1617:58;1612:63;;1138:547;;;;;;:::o;1335:145:27:-;1393:7;1412:9;1428:1;1424;:5;1412:17;;1452:1;1447;:6;;1439:15;;;;;;1472:1;1465:8;;;1335:145;;;;:::o;783:639:10:-;951:12;992:27;979:40;;;;;;;;:9;:40;;;;;;;;;975:441;;;1190:1;1187;1180:4;1174:11;1167:4;1161;1157:15;1153:2;1146:5;1133:59;1122:70;;1104:102;;;1390:1;1387;1380:4;1374:11;1367:4;1361;1357:15;1350:5;1346:2;1339:5;1334:58;1323:69;;1305:101;783:639;;;;;;;:::o;2712:226:12:-;2755:13;2780:12;1306:66;2795:18;;2780:33;;2917:4;2911:11;2902:20;;2888:44;;:::o;1646:105:27:-;1704:7;1735:1;1730;:6;;:14;;1743:1;1730:14;;;1739:1;1730:14;1723:21;;1646:105;;;;:::o;1025:145::-;1083:7;1115:1;1110;:6;;1102:15;;;;;;1127:9;1143:1;1139;:5;1127:17;;1162:1;1155:8;;;1025:145;;;;:::o;11514:821:7:-;11702:15;11782:24;11835:1;11809:28;;:14;:28;;;:66;;11861:14;11809:66;;;11848:9;11809:66;11782:93;;11909:1;11889:22;;:8;:22;;;11885:444;;;12042:73;12078:11;12067:8;:22;:47;;12103:11;12067:47;;;12092:8;12067:47;12042:20;12054:7;12042;:11;;:20;;;;:::i;:::-;:24;;:73;;;;:::i;:::-;12032:83;;12137:8;:13;;:22;12151:7;12137:22;;;;;;;;;;;;;;;;;;;;;;;12129:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11885:444;;;12210:34;12235:8;12210:20;12222:7;12210;:11;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;12200:44;;12266:42;12280:8;12290;12300:7;12266:13;:42::i;:::-;12258:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11885:444;11514:821;;;;;;;;:::o;1011:1136:14:-;1242:1;1229:9;;:14;1221:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1360:7;:14;1346:10;:28;;1338:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1468:1;1454:10;:15;;1446:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1526:20;687:3;1526:38;;1579:9;1574:450;1598:7;:14;1594:1;:18;1574:450;;;1678:13;1694:7;1702:1;1694:10;;;;;;;;;;;;;;1678:26;;1743:1;1726:19;;:5;:19;;;;:47;;;;;687:3;1749:24;;:5;:24;;;;1726:47;:73;;;;;1794:4;1777:22;;:5;:22;;;;1726:73;:98;;;;;1819:5;1803:21;;:12;:21;;;;1726:98;1718:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:1;1900:27;;:6;:13;1907:5;1900:13;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;1892:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1974:5;1951:6;:20;1958:12;1951:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2008:5;1993:20;;1574:450;1614:3;;;;;;;1574:450;;;;687:3;2033:6;:20;2040:12;2033:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2094:7;:14;2081:10;:27;;;;2130:10;2118:9;:22;;;;1011:1136;;;:::o;689:1423:11:-;1916:4;1897:24;;:7;:24;;;;1889:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1942:12;479:66;1957:29;;1942:44;;2088:7;2082:4;2075:21;2061:45;;:::o;1367:450:13:-;1484:1;1447:39;;:7;:25;1005:3;1447:25;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;1439:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1005:3;1506:7;:25;1005:3;1506:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;1578:1;1564:16;;:2;:16;;;1560:251;;1604:14;1615:2;1604:10;:14::i;:::-;1596:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1722:68;1730:2;1734:1;1737:4;1743:27;1772:17;1722:7;:68::i;:::-;1714:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:251;1367:450;;:::o;763:904:17:-;853:16;942:17;985:10;997:8;1007:6;962:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;942:72;;1352:4;1349:1;1342:4;1336:11;1329:4;1323;1319:15;1316:1;1309:5;1301;1294;1290:17;1285:72;1377:16;1411:1;1406:61;;;;1485:4;1480:102;;;;1636:1;1621:16;;1370:281;;1406:61;1446:7;1431:22;;1406:61;;1480:102;1563:1;1557:8;1550:16;1540:7;1533:15;1530:37;1523:45;1508:60;;1370:281;;1089:572;;;;;;;:::o;8277:246:13:-;8337:4;8353:12;8474:7;8462:20;8454:28;;8515:1;8508:4;:8;8501:15;;;8277:246;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"4715800","executionCost":"25547","totalCost":"4741347"},"external":{"":"infinite","VERSION()":"infinite","addOwnerWithThreshold(address,uint256)":"infinite","approveHash(bytes32)":"22977","approvedHashes(address,bytes32)":"1328","changeThreshold(uint256)":"23130","checkNSignatures(bytes32,bytes,bytes,uint256)":"infinite","checkSignatures(bytes32,bytes,bytes)":"infinite","disableModule(address,address)":"45483","domainSeparator()":"525","enableModule(address)":"45427","encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"infinite","execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":"infinite","execTransactionFromModule(address,uint256,bytes,uint8)":"infinite","execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":"infinite","getChainId()":"293","getModulesPaginated(address,uint256)":"infinite","getOwners()":"infinite","getStorageAt(uint256,uint256)":"infinite","getThreshold()":"1102","getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"infinite","isModuleEnabled(address)":"1396","isOwner(address)":"1351","nonce()":"1051","removeOwner(address,address,uint256)":"infinite","setFallbackHandler(address)":"21587","setGuard(address)":"infinite","setup(address[],uint256,address,bytes,address,address,uint256,address)":"infinite","signedMessages(bytes32)":"1231","simulateAndRevert(address,bytes)":"infinite","swapOwner(address,address,address)":"68682"},"internal":{"handlePayment(uint256,uint256,uint256,address,address payable)":"infinite"}},"methodIdentifiers":{"VERSION()":"ffa1ad74","addOwnerWithThreshold(address,uint256)":"0d582f13","approveHash(bytes32)":"d4d9bdcd","approvedHashes(address,bytes32)":"7d832974","changeThreshold(uint256)":"694e80c3","checkNSignatures(bytes32,bytes,bytes,uint256)":"12fb68e0","checkSignatures(bytes32,bytes,bytes)":"934f3a11","disableModule(address,address)":"e009cfde","domainSeparator()":"f698da25","enableModule(address)":"610b5925","encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"e86637db","execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":"6a761202","execTransactionFromModule(address,uint256,bytes,uint8)":"468721a7","execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":"5229073f","getChainId()":"3408e470","getModulesPaginated(address,uint256)":"cc2f8452","getOwners()":"a0e67e2b","getStorageAt(uint256,uint256)":"5624b25b","getThreshold()":"e75235b8","getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"d8d11f78","isModuleEnabled(address)":"2d9ad53d","isOwner(address)":"2f54bf6e","nonce()":"affed0e0","removeOwner(address,address,uint256)":"f8dc5dd9","setFallbackHandler(address)":"f08a0323","setGuard(address)":"e19a9dd9","setup(address[],uint256,address,bytes,address,address,uint256,address)":"b63e800d","signedMessages(bytes32)":"5ae6bd37","simulateAndRevert(address,bytes)":"b4faba09","swapOwner(address,address,address)":"e318b52b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AddedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"approvedHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ApproveHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"ChangedFallbackHandler\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"ChangedGuard\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"ChangedThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"DisabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"EnabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"RemovedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initializer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"}],\"name\":\"SafeSetup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignMsg\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"addOwnerWithThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashToApprove\",\"type\":\"bytes32\"}],\"name\":\"approveHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"approvedHashes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"changeThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredSignatures\",\"type\":\"uint256\"}],\"name\":\"checkNSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"checkSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"disableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"encodeTransactionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"execTransaction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModuleReturnData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"start\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getModulesPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"getTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"isModuleEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"setGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"paymentReceiver\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"signedMessages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"swapOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Stefan George - @Georgi87Richard Meissner - @rmeissner\",\"details\":\"Most important concepts:      - Threshold: Number of required confirmations for a Safe transaction.      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and        approve transactions. Managed in `OwnerManager`.      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.      - Nonce: Each transaction should have a different nonce to prevent replay attacks.      - Signature: A valid signature of an owner of the Safe for a transaction hash.      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/      For the events-based implementation see `SafeL2.sol`.\",\"kind\":\"dev\",\"methods\":{\"addOwnerWithThreshold(address,uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\",\"owner\":\"New owner address.\"}},\"approveHash(bytes32)\":{\"details\":\"This can be used with a pre-approved hash transaction signature.      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\",\"params\":{\"hashToApprove\":\"The hash to mark as approved for signatures that are verified by this contract.\"}},\"changeThreshold(uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\"}},\"checkNSignatures(bytes32,bytes,bytes,uint256)\":{\"details\":\"Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\",\"params\":{\"data\":\"That should be signed (this is passed to an external validator contract)\",\"dataHash\":\"Hash of the data (could be either a message hash or transaction hash)\",\"requiredSignatures\":\"Amount of required valid signatures.\",\"signatures\":\"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\"}},\"checkSignatures(bytes32,bytes,bytes)\":{\"params\":{\"data\":\"That should be signed (this is passed to an external validator contract)\",\"dataHash\":\"Hash of the data (could be either a message hash or transaction hash)\",\"signatures\":\"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\"}},\"disableModule(address,address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be removed.\",\"prevModule\":\"Previous module in the modules linked list.\"}},\"domainSeparator()\":{\"details\":\"Returns the domain separator for this contract, as defined in the EIP-712 standard.\",\"returns\":{\"_0\":\"bytes32 The domain separator hash.\"}},\"enableModule(address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be whitelisted.\"}},\"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"params\":{\"_nonce\":\"Transaction nonce.\",\"baseGas\":\"Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\",\"data\":\"Data payload.\",\"gasPrice\":\"Maximum gas price that should be used for this transaction.\",\"gasToken\":\"Token address (or 0 if ETH) that is used for the payment.\",\"operation\":\"Operation type.\",\"refundReceiver\":\"Address of receiver of gas payment (or 0 if tx.origin).\",\"safeTxGas\":\"Gas that should be used for the safe transaction.\",\"to\":\"Destination address.\",\"value\":\"Ether value.\"},\"returns\":{\"_0\":\"Transaction hash bytes.\"}},\"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)\":{\"details\":\"The fees are always transferred, even if the user transaction fails.      This method doesn't perform any sanity check of the transaction, such as:      - if the contract at `to` address has code or not      - if the `gasToken` is a contract or not      It is the responsibility of the caller to perform such checks.\",\"params\":{\"baseGas\":\"Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\",\"data\":\"Data payload of Safe transaction.\",\"gasPrice\":\"Gas price that should be used for the payment calculation.\",\"gasToken\":\"Token address (or 0 if ETH) that is used for the payment.\",\"operation\":\"Operation type of Safe transaction.\",\"refundReceiver\":\"Address of receiver of gas payment (or 0 if tx.origin).\",\"safeTxGas\":\"Gas that should be used for the Safe transaction.\",\"signatures\":\"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\",\"to\":\"Destination address of Safe transaction.\",\"value\":\"Ether value of Safe transaction.\"},\"returns\":{\"success\":\"Boolean indicating transaction's success.\"}},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"details\":\"Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\",\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"returnData\":\"Data returned by the call.\",\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"getChainId()\":{\"returns\":{\"_0\":\"The ID of the current chain as a uint256.\"}},\"getModulesPaginated(address,uint256)\":{\"params\":{\"pageSize\":\"Maximum number of modules that should be returned. Has to be > 0\",\"start\":\"Start of the page. Has to be a module or start pointer (0x1 address)\"},\"returns\":{\"array\":\"Array of modules.\",\"next\":\"Start of the next page.\"}},\"getOwners()\":{\"returns\":{\"_0\":\"Array of Safe owners.\"}},\"getStorageAt(uint256,uint256)\":{\"params\":{\"length\":\"- the number of words (32 bytes) of data to read\",\"offset\":\"- the offset in the current contract's storage in words to start reading from\"},\"returns\":{\"_0\":\"the bytes that were read.\"}},\"getThreshold()\":{\"returns\":{\"_0\":\"Threshold number.\"}},\"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"params\":{\"_nonce\":\"Transaction nonce.\",\"baseGas\":\"Gas costs for data used to trigger the safe transaction.\",\"data\":\"Data payload.\",\"gasPrice\":\"Maximum gas price that should be used for this transaction.\",\"gasToken\":\"Token address (or 0 if ETH) that is used for the payment.\",\"operation\":\"Operation type.\",\"refundReceiver\":\"Address of receiver of gas payment (or 0 if tx.origin).\",\"safeTxGas\":\"Fas that should be used for the safe transaction.\",\"to\":\"Destination address.\",\"value\":\"Ether value.\"},\"returns\":{\"_0\":\"Transaction hash.\"}},\"isModuleEnabled(address)\":{\"returns\":{\"_0\":\"True if the module is enabled\"}},\"isOwner(address)\":{\"returns\":{\"_0\":\"Boolean if owner is an owner of the Safe.\"}},\"removeOwner(address,address,uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\",\"owner\":\"Owner address to be removed.\",\"prevOwner\":\"Owner that pointed to the owner to be removed in the linked list\"}},\"setFallbackHandler(address)\":{\"details\":\"Only fallback calls without value and with data will be forwarded.      This can only be done via a Safe transaction.      Cannot be set to the Safe itself.\",\"params\":{\"handler\":\"contract to handle fallback calls.\"}},\"setGuard(address)\":{\"details\":\"Set a guard that checks transactions before execution      This can only be done via a Safe transaction.      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,        a broken guard can cause a denial of service for the Safe. Make sure to carefully        audit the guard code and design recovery mechanisms.\",\"params\":{\"guard\":\"The address of the guard to be used or the 0 address to disable the guard\"}},\"setup(address[],uint256,address,bytes,address,address,uint256,address)\":{\"details\":\"This method can only be called once.      If a proxy was created without setting up, anyone can call setup and claim the proxy.\",\"params\":{\"_owners\":\"List of Safe owners.\",\"_threshold\":\"Number of required confirmations for a Safe transaction.\",\"data\":\"Data payload for optional delegate call.\",\"fallbackHandler\":\"Handler for fallback calls to this contract\",\"payment\":\"Value that should be paid\",\"paymentReceiver\":\"Address that should receive the payment (or 0 if tx.origin)\",\"paymentToken\":\"Token that should be used for the payment (0 is ETH)\",\"to\":\"Contract address for optional delegate call.\"}},\"simulateAndRevert(address,bytes)\":{\"details\":\"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.\",\"params\":{\"calldataPayload\":\"Calldata that should be sent to the target contract (encoded method name and arguments).\",\"targetContract\":\"Address of the contract containing the code to execute.\"}},\"swapOwner(address,address,address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"newOwner\":\"New owner address.\",\"oldOwner\":\"Owner address to be replaced.\",\"prevOwner\":\"Owner that pointed to the owner to be replaced in the linked list\"}}},\"title\":\"Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addOwnerWithThreshold(address,uint256)\":{\"notice\":\"Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\"},\"approveHash(bytes32)\":{\"notice\":\"Marks hash `hashToApprove` as approved.\"},\"changeThreshold(uint256)\":{\"notice\":\"Changes the threshold of the Safe to `_threshold`.\"},\"checkNSignatures(bytes32,bytes,bytes,uint256)\":{\"notice\":\"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\"},\"checkSignatures(bytes32,bytes,bytes)\":{\"notice\":\"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\"},\"disableModule(address,address)\":{\"notice\":\"Disables the module `module` for the Safe.\"},\"enableModule(address)\":{\"notice\":\"Enables the module `module` for the Safe.\"},\"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"notice\":\"Returns the pre-image of the transaction hash (see getTransactionHash).\"},\"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)\":{\"notice\":\"Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\"},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\"},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\"},\"getChainId()\":{\"notice\":\"Returns the ID of the chain the contract is currently deployed on.\"},\"getModulesPaginated(address,uint256)\":{\"notice\":\"Returns an array of modules.         If all entries fit into a single page, the next pointer will be 0x1.         If another page is present, next will be the last element of the returned array.\"},\"getOwners()\":{\"notice\":\"Returns a list of Safe owners.\"},\"getStorageAt(uint256,uint256)\":{\"notice\":\"Reads `length` bytes of storage in the currents contract\"},\"getThreshold()\":{\"notice\":\"Returns the number of required confirmations for a Safe transaction aka the threshold.\"},\"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"notice\":\"Returns transaction hash to be signed by owners.\"},\"isModuleEnabled(address)\":{\"notice\":\"Returns if an module is enabled\"},\"isOwner(address)\":{\"notice\":\"Returns if `owner` is an owner of the Safe.\"},\"removeOwner(address,address,uint256)\":{\"notice\":\"Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\"},\"setFallbackHandler(address)\":{\"notice\":\"Set Fallback Handler to `handler` for the Safe.\"},\"setGuard(address)\":{\"notice\":\"Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\"},\"setup(address[],uint256,address,bytes,address,address,uint256,address)\":{\"notice\":\"Sets an initial storage of the Safe contract.\"},\"swapOwner(address,address,address)\":{\"notice\":\"Replaces the owner `oldOwner` in the Safe with `newOwner`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Safe.sol\":\"Safe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3817,"contract":"contracts/Safe.sol:Safe","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":2809,"contract":"contracts/Safe.sol:Safe","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":3225,"contract":"contracts/Safe.sol:Safe","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":3227,"contract":"contracts/Safe.sol:Safe","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":3229,"contract":"contracts/Safe.sol:Safe","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":1496,"contract":"contracts/Safe.sol:Safe","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":1498,"contract":"contracts/Safe.sol:Safe","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":1502,"contract":"contracts/Safe.sol:Safe","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":1508,"contract":"contracts/Safe.sol:Safe","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"addOwnerWithThreshold(address,uint256)":{"notice":"Adds the owner `owner` to the Safe and updates the threshold to `_threshold`."},"approveHash(bytes32)":{"notice":"Marks hash `hashToApprove` as approved."},"changeThreshold(uint256)":{"notice":"Changes the threshold of the Safe to `_threshold`."},"checkNSignatures(bytes32,bytes,bytes,uint256)":{"notice":"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise."},"checkSignatures(bytes32,bytes,bytes)":{"notice":"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise."},"disableModule(address,address)":{"notice":"Disables the module `module` for the Safe."},"enableModule(address)":{"notice":"Enables the module `module` for the Safe."},"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"notice":"Returns the pre-image of the transaction hash (see getTransactionHash)."},"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":{"notice":"Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`."},"execTransactionFromModule(address,uint256,bytes,uint8)":{"notice":"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)"},"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":{"notice":"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data"},"getChainId()":{"notice":"Returns the ID of the chain the contract is currently deployed on."},"getModulesPaginated(address,uint256)":{"notice":"Returns an array of modules.         If all entries fit into a single page, the next pointer will be 0x1.         If another page is present, next will be the last element of the returned array."},"getOwners()":{"notice":"Returns a list of Safe owners."},"getStorageAt(uint256,uint256)":{"notice":"Reads `length` bytes of storage in the currents contract"},"getThreshold()":{"notice":"Returns the number of required confirmations for a Safe transaction aka the threshold."},"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"notice":"Returns transaction hash to be signed by owners."},"isModuleEnabled(address)":{"notice":"Returns if an module is enabled"},"isOwner(address)":{"notice":"Returns if `owner` is an owner of the Safe."},"removeOwner(address,address,uint256)":{"notice":"Removes the owner `owner` from the Safe and updates the threshold to `_threshold`."},"setFallbackHandler(address)":{"notice":"Set Fallback Handler to `handler` for the Safe."},"setGuard(address)":{"notice":"Set Transaction Guard `guard` for the Safe. Make sure you trust the guard."},"setup(address[],uint256,address,bytes,address,address,uint256,address)":{"notice":"Sets an initial storage of the Safe contract."},"swapOwner(address,address,address)":{"notice":"Replaces the owner `oldOwner` in the Safe with `newOwner`."}},"version":1}}},"contracts/SafeL2.sol":{"SafeL2":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"AddedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"approvedHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"ApproveHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"handler","type":"address"}],"name":"ChangedFallbackHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"guard","type":"address"}],"name":"ChangedGuard","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"ChangedThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"DisabledModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"EnabledModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"payment","type":"uint256"}],"name":"ExecutionFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"ExecutionFromModuleFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"ExecutionFromModuleSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"payment","type":"uint256"}],"name":"ExecutionSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"RemovedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"module","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"SafeModuleTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"baseGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasPrice","type":"uint256"},{"indexed":false,"internalType":"address","name":"gasToken","type":"address"},{"indexed":false,"internalType":"address payable","name":"refundReceiver","type":"address"},{"indexed":false,"internalType":"bytes","name":"signatures","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"additionalInfo","type":"bytes"}],"name":"SafeMultiSigTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":false,"internalType":"address[]","name":"owners","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"address","name":"initializer","type":"address"},{"indexed":false,"internalType":"address","name":"fallbackHandler","type":"address"}],"name":"SafeSetup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"msgHash","type":"bytes32"}],"name":"SignMsg","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"addOwnerWithThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hashToApprove","type":"bytes32"}],"name":"approveHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"approvedHashes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"changeThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"internalType":"uint256","name":"requiredSignatures","type":"uint256"}],"name":"checkNSignatures","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"checkSignatures","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"prevModule","type":"address"},{"internalType":"address","name":"module","type":"address"}],"name":"disableModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"module","type":"address"}],"name":"enableModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address","name":"refundReceiver","type":"address"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"encodeTransactionData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address payable","name":"refundReceiver","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"execTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"execTransactionFromModule","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"execTransactionFromModuleReturnData","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"start","type":"address"},{"internalType":"uint256","name":"pageSize","type":"uint256"}],"name":"getModulesPaginated","outputs":[{"internalType":"address[]","name":"array","type":"address[]"},{"internalType":"address","name":"next","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getStorageAt","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address","name":"refundReceiver","type":"address"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getTransactionHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"module","type":"address"}],"name":"isModuleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"handler","type":"address"}],"name":"setFallbackHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"guard","type":"address"}],"name":"setGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"fallbackHandler","type":"address"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"payment","type":"uint256"},{"internalType":"address payable","name":"paymentReceiver","type":"address"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"signedMessages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetContract","type":"address"},{"internalType":"bytes","name":"calldataPayload","type":"bytes"}],"name":"simulateAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"oldOwner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"swapOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Stefan George - @Georgi87Richard Meissner - @rmeissner","kind":"dev","methods":{"addOwnerWithThreshold(address,uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold.","owner":"New owner address."}},"approveHash(bytes32)":{"details":"This can be used with a pre-approved hash transaction signature.      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures","params":{"hashToApprove":"The hash to mark as approved for signatures that are verified by this contract."}},"changeThreshold(uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold."}},"checkNSignatures(bytes32,bytes,bytes,uint256)":{"details":"Since the EIP-1271 does an external call, be mindful of reentrancy attacks.","params":{"data":"That should be signed (this is passed to an external validator contract)","dataHash":"Hash of the data (could be either a message hash or transaction hash)","requiredSignatures":"Amount of required valid signatures.","signatures":"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash."}},"checkSignatures(bytes32,bytes,bytes)":{"params":{"data":"That should be signed (this is passed to an external validator contract)","dataHash":"Hash of the data (could be either a message hash or transaction hash)","signatures":"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash."}},"disableModule(address,address)":{"details":"This can only be done via a Safe transaction.","params":{"module":"Module to be removed.","prevModule":"Previous module in the modules linked list."}},"domainSeparator()":{"details":"Returns the domain separator for this contract, as defined in the EIP-712 standard.","returns":{"_0":"bytes32 The domain separator hash."}},"enableModule(address)":{"details":"This can only be done via a Safe transaction.","params":{"module":"Module to be whitelisted."}},"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"params":{"_nonce":"Transaction nonce.","baseGas":"Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)","data":"Data payload.","gasPrice":"Maximum gas price that should be used for this transaction.","gasToken":"Token address (or 0 if ETH) that is used for the payment.","operation":"Operation type.","refundReceiver":"Address of receiver of gas payment (or 0 if tx.origin).","safeTxGas":"Gas that should be used for the safe transaction.","to":"Destination address.","value":"Ether value."},"returns":{"_0":"Transaction hash bytes."}},"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":{"details":"The fees are always transferred, even if the user transaction fails.      This method doesn't perform any sanity check of the transaction, such as:      - if the contract at `to` address has code or not      - if the `gasToken` is a contract or not      It is the responsibility of the caller to perform such checks.","params":{"baseGas":"Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)","data":"Data payload of Safe transaction.","gasPrice":"Gas price that should be used for the payment calculation.","gasToken":"Token address (or 0 if ETH) that is used for the payment.","operation":"Operation type of Safe transaction.","refundReceiver":"Address of receiver of gas payment (or 0 if tx.origin).","safeTxGas":"Gas that should be used for the Safe transaction.","signatures":"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.","to":"Destination address of Safe transaction.","value":"Ether value of Safe transaction."},"returns":{"_0":"Boolean indicating transaction's success."}},"execTransactionFromModule(address,uint256,bytes,uint8)":{"details":"Function is virtual to allow overriding for L2 singleton to emit an event for indexing.","params":{"data":"Data payload of module transaction.","operation":"Operation type of module transaction.","to":"Destination address of module transaction.","value":"Ether value of module transaction."},"returns":{"success":"Boolean flag indicating if the call succeeded."}},"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":{"params":{"data":"Data payload of module transaction.","operation":"Operation type of module transaction.","to":"Destination address of module transaction.","value":"Ether value of module transaction."},"returns":{"returnData":"Data returned by the call.","success":"Boolean flag indicating if the call succeeded."}},"getChainId()":{"returns":{"_0":"The ID of the current chain as a uint256."}},"getModulesPaginated(address,uint256)":{"params":{"pageSize":"Maximum number of modules that should be returned. Has to be > 0","start":"Start of the page. Has to be a module or start pointer (0x1 address)"},"returns":{"array":"Array of modules.","next":"Start of the next page."}},"getOwners()":{"returns":{"_0":"Array of Safe owners."}},"getStorageAt(uint256,uint256)":{"params":{"length":"- the number of words (32 bytes) of data to read","offset":"- the offset in the current contract's storage in words to start reading from"},"returns":{"_0":"the bytes that were read."}},"getThreshold()":{"returns":{"_0":"Threshold number."}},"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"params":{"_nonce":"Transaction nonce.","baseGas":"Gas costs for data used to trigger the safe transaction.","data":"Data payload.","gasPrice":"Maximum gas price that should be used for this transaction.","gasToken":"Token address (or 0 if ETH) that is used for the payment.","operation":"Operation type.","refundReceiver":"Address of receiver of gas payment (or 0 if tx.origin).","safeTxGas":"Fas that should be used for the safe transaction.","to":"Destination address.","value":"Ether value."},"returns":{"_0":"Transaction hash."}},"isModuleEnabled(address)":{"returns":{"_0":"True if the module is enabled"}},"isOwner(address)":{"returns":{"_0":"Boolean if owner is an owner of the Safe."}},"removeOwner(address,address,uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold.","owner":"Owner address to be removed.","prevOwner":"Owner that pointed to the owner to be removed in the linked list"}},"setFallbackHandler(address)":{"details":"Only fallback calls without value and with data will be forwarded.      This can only be done via a Safe transaction.      Cannot be set to the Safe itself.","params":{"handler":"contract to handle fallback calls."}},"setGuard(address)":{"details":"Set a guard that checks transactions before execution      This can only be done via a Safe transaction.      ⚠️ IMPORTANT: Since a guard has full power to block Safe transaction execution,        a broken guard can cause a denial of service for the Safe. Make sure to carefully        audit the guard code and design recovery mechanisms.","params":{"guard":"The address of the guard to be used or the 0 address to disable the guard"}},"setup(address[],uint256,address,bytes,address,address,uint256,address)":{"details":"This method can only be called once.      If a proxy was created without setting up, anyone can call setup and claim the proxy.","params":{"_owners":"List of Safe owners.","_threshold":"Number of required confirmations for a Safe transaction.","data":"Data payload for optional delegate call.","fallbackHandler":"Handler for fallback calls to this contract","payment":"Value that should be paid","paymentReceiver":"Address that should receive the payment (or 0 if tx.origin)","paymentToken":"Token that should be used for the payment (0 is ETH)","to":"Contract address for optional delegate call."}},"simulateAndRevert(address,bytes)":{"details":"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.","params":{"calldataPayload":"Calldata that should be sent to the target contract (encoded method name and arguments).","targetContract":"Address of the contract containing the code to execute."}},"swapOwner(address,address,address)":{"details":"This can only be done via a Safe transaction.","params":{"newOwner":"New owner address.","oldOwner":"Owner address to be replaced.","prevOwner":"Owner that pointed to the owner to be replaced in the linked list"}}},"title":"SafeL2 - An implementation of the Safe contract that emits additional events on transaction executions.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506001600481905550615f6580620000296000396000f3fe6080604052600436106101d15760003560e01c8063affed0e0116100f7578063e19a9dd911610095578063f08a032311610064578063f08a03231461156b578063f698da25146115bc578063f8dc5dd9146115e7578063ffa1ad741461166257610226565b8063e19a9dd9146112bf578063e318b52b14611310578063e75235b8146113a1578063e86637db146113cc57610226565b8063cc2f8452116100d1578063cc2f84521461100c578063d4d9bdcd146110d9578063d8d11f7814611114578063e009cfde1461124e57610226565b8063affed0e014610d89578063b4faba0914610db4578063b63e800d14610e9c57610226565b80635624b25b1161016f5780636a7612021161013e5780636a761202146109895780637d83297414610b45578063934f3a1114610bb4578063a0e67e2b14610d1d57610226565b80635624b25b146107f05780635ae6bd37146108ae578063610b5925146108fd578063694e80c31461094e57610226565b80632f54bf6e116101ab5780632f54bf6e146104c85780633408e4701461052f578063468721a71461055a5780635229073f1461066f57610226565b80630d582f131461029357806312fb68e0146102ee5780632d9ad53d1461046157610226565b36610226573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023257600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061026757600080f35b36600080373360601b365260008060143601600080855af13d6000803e8061028e573d6000fd5b3d6000f35b34801561029f57600080fd5b506102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116f2565b005b3480156102fa57600080fd5b5061045f6004803603608081101561031157600080fd5b81019080803590602001909291908035906020019064010000000081111561033857600080fd5b82018360208201111561034a57600080fd5b8035906020019184600183028401116401000000008311171561036c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103cf57600080fd5b8201836020820111156103e157600080fd5b8035906020019184600183028401116401000000008311171561040357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611ad8565b005b34801561046d57600080fd5b506104b06004803603602081101561048457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d6565b60405180821515815260200191505060405180910390f35b3480156104d457600080fd5b50610517600480360360208110156104eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a8565b60405180821515815260200191505060405180910390f35b34801561053b57600080fd5b5061054461257a565b6040518082815260200191505060405180910390f35b34801561056657600080fd5b506106576004803603608081101561057d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460018302840111640100000000831117156105f857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050612587565b60405180821515815260200191505060405180910390f35b34801561067b57600080fd5b5061076c6004803603608081101561069257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184600183028401116401000000008311171561070d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050612692565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107b4578082015181840152602081019050610799565b50505050905090810190601f1680156107e15780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156107fc57600080fd5b506108336004803603604081101561081357600080fd5b8101908080359060200190929190803590602001909291905050506126c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610873578082015181840152602081019050610858565b50505050905090810190601f1680156108a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108ba57600080fd5b506108e7600480360360208110156108d157600080fd5b810190808035906020019092919050505061274f565b6040518082815260200191505060405180910390f35b34801561090957600080fd5b5061094c6004803603602081101561092057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612767565b005b34801561095a57600080fd5b506109876004803603602081101561097157600080fd5b8101908080359060200190929190505050612aef565b005b610b2d60048036036101408110156109a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109e757600080fd5b8201836020820111156109f957600080fd5b80359060200191846001830284011164010000000083111715610a1b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846001830284011164010000000083111715610adb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c29565b60405180821515815260200191505060405180910390f35b348015610b5157600080fd5b50610b9e60048036036040811015610b6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e68565b6040518082815260200191505060405180910390f35b348015610bc057600080fd5b50610d1b60048036036060811015610bd757600080fd5b810190808035906020019092919080359060200190640100000000811115610bfe57600080fd5b820183602082011115610c1057600080fd5b80359060200191846001830284011164010000000083111715610c3257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9557600080fd5b820183602082011115610ca757600080fd5b80359060200191846001830284011164010000000083111715610cc957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e8d565b005b348015610d2957600080fd5b50610d32612f1c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d75578082015181840152602081019050610d5a565b505050509050019250505060405180910390f35b348015610d9557600080fd5b50610d9e6130c5565b6040518082815260200191505060405180910390f35b348015610dc057600080fd5b50610e9a60048036036040811015610dd757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1457600080fd5b820183602082011115610e2657600080fd5b80359060200191846001830284011164010000000083111715610e4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506130cb565b005b348015610ea857600080fd5b5061100a6004803603610100811015610ec057600080fd5b8101908080359060200190640100000000811115610edd57600080fd5b820183602082011115610eef57600080fd5b80359060200191846020830284011164010000000083111715610f1157600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f5c57600080fd5b820183602082011115610f6e57600080fd5b80359060200191846001830284011164010000000083111715610f9057600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130ed565b005b34801561101857600080fd5b506110656004803603604081101561102f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132ab565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156110c45780820151818401526020810190506110a9565b50505050905001935050505060405180910390f35b3480156110e557600080fd5b50611112600480360360208110156110fc57600080fd5b810190808035906020019092919050505061360e565b005b34801561112057600080fd5b50611238600480360361014081101561113857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561117f57600080fd5b82018360208201111561119157600080fd5b803590602001918460018302840111640100000000831117156111b357600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137ad565b6040518082815260200191505060405180910390f35b34801561125a57600080fd5b506112bd6004803603604081101561127157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137da565b005b3480156112cb57600080fd5b5061130e600480360360208110156112e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b61565b005b34801561131c57600080fd5b5061139f6004803603606081101561133357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d4d565b005b3480156113ad57600080fd5b506113b66143ab565b6040518082815260200191505060405180910390f35b3480156113d857600080fd5b506114f060048036036101408110156113f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561143757600080fd5b82018360208201111561144957600080fd5b8035906020019184600183028401116401000000008311171561146b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506143b5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611530578082015181840152602081019050611515565b50505050905090810190601f16801561155d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561157757600080fd5b506115ba6004803603602081101561158e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061455d565b005b3480156115c857600080fd5b506115d16145b4565b6040518082815260200191505060405180910390f35b3480156115f357600080fd5b506116606004803603606081101561160a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614632565b005b34801561166e57600080fd5b50611677614a5b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156116b757808201518184015260208101905061169c565b50505050905090810190601f1680156116e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6116fa614a94565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156117645750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561179c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61180e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a28060045414611ad457611ad381612aef565b5b5050565b611aec604182614b3790919063ffffffff16565b82511015611b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b868110156123ca57611b7e8882614b71565b80945081955082965050505060008460ff1614156120035789898051906020012014611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323700000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8260001c9450611c2c604188614b3790919063ffffffff16565b8260001c1015611ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611cbd60208460001c614ba090919063ffffffff16565b1115611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611d6782611d5960208760001c614ba090919063ffffffff16565b614ba090919063ffffffff16565b1115611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611e7d578082015181840152602081019050611e62565b50505050905090810190601f168015611eaa5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611ee3578082015181840152602081019050611ec8565b50505050905090810190601f168015611f105780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f2f57600080fd5b505afa158015611f43573d6000803e3d6000fd5b505050506040513d6020811015611f5957600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ffc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050612248565b60018460ff161415612117578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120a057506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b612112576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612247565b601e8460ff1611156121df5760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ce573d6000803e3d6000fd5b505050602060405103519450612246565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612239573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611801561230f5750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123485750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611b6c565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156124a15750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125735750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561260157fe5b8152602001828103825284818151815260200191508051906020019080838360005b8381101561263e578082015181840152602081019050612623565b50505050905090810190601f16801561266b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a161268885858585614bbf565b9050949350505050565b600060606126a286868686612587565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff811180156126e657600080fd5b506040519080825280601f01601f1916602001820160405280156127195781602001600182028036833780820191505090505b50905060005b838110156127445780850154806020830260208501015250808060010191505061271f565b508091505092915050565b60076020528060005260406000206000915090505481565b61276f614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156127d95750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61284b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461294c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844060405160405180910390a250565b612af7614a94565b600354811115612b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612cdc57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612d96578082015181840152602081019050612d7b565b50505050905090810190601f168015612dc35780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612dfc578082015181840152602081019050612de1565b50505050905090810190601f168015612e295780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612e568d8d8d8d8d8d8d8d8d8d8d614dc5565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f1684848484611ad8565b50505050565b6060600060035467ffffffffffffffff81118015612f3957600080fd5b50604051908082528060200260200182016040528015612f685781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130bc578083838151811061301357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050612fd2565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131388a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896152f4565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461317657613175846157f4565b5b6131c48787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506158c5565b60008211156131de576131dc82600060018685615b9b565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b60606000600173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132ef57506132ee846123d6565b5b613361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083116133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8267ffffffffffffffff811180156133ee57600080fd5b5060405190808252806020026020018201604052801561341d5781602001602082028036833780820191505090505b5091506000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156134ef5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134fa57508381105b156135b5578183828151811061350c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508080600101915050613485565b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613603578260018203815181106135f857fe5b602002602001015191505b808352509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137c28c8c8c8c8c8c8c8c8c8c8c6143b5565b8051906020012090509b9a5050505050505050505050565b6137e2614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561384c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427660405160405180910390a25050565b613b69614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613cdb578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060206040518083038186803b158015613c2d57600080fd5b505afa158015613c41573d6000803e3d6000fd5b505050506040513d6020811015613c5757600080fd5b8101908080519060200190929190505050613cda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475333303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa260405160405180910390a25050565b613d55614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613dbf5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613df757503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613e69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613fd45750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614046576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614146576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a2505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561444657fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6144d26145b4565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614565614a94565b61456e816157f4565b8073ffffffffffffffffffffffffffffffffffffffff167f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b060405160405180910390a250565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6145e261257a565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b61463a614a94565b8060016003540310156146b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561471f5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614791576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28060045414614a5657614a5581612aef565b5b505050565b6040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614b35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614b4a5760009050614b6b565b6000828402905082848281614b5b57fe5b0414614b6657600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614bb557600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614c8a5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614cfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614d29858585857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615da1565b90508015614d79573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614dbd565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614ddf8e8e8e8e8e8e8e8e8e8e6005546143b5565b905060056000815480929190600101919050555080805190602001209150614e08828286612e8d565b506000614e13615ded565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ff9578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614eb657fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614f88578082015181840152602081019050614f6d565b50505050905090810190601f168015614fb55780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614fe057600080fd5b505af1158015614ff4573d6000803e3d6000fd5b505050505b6101f46150206109c48b01603f60408d028161501157fe5b04615e1e90919063ffffffff16565b015a1015615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506150ff8f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146150f4578e6150fa565b6109c45a035b615da1565b93506151145a82615e3890919063ffffffff16565b90508380615123575060008a14155b8061512f575060008814155b6151a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156151bb576151b8828b8b8b8b615b9b565b90505b84156151fe57837f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e826040518082815260200191505060405180910390a2615237565b837f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23826040518082815260200191505060405180910390a25b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146152e3578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156152ca57600080fd5b505af11580156152de573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461536c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156153e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561545a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561576057600084828151811061547a57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156154ee5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561552657503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561555e57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6155d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146156d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615463565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475334303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146159c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614615b9757615a8382615e58565b615af5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b248260008360017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615da1565b615b96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614615bd85782615bda565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615cf257615c443a8610615c21573a615c23565b855b615c36888a614ba090919063ffffffff16565b614b3790919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615d97565b615d1785615d09888a614ba090919063ffffffff16565b614b3790919063ffffffff16565b9150615d24848284615e6b565b615d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615daf57fe5b836001811115615dbb57fe5b1415615dd4576000808551602087018986f49050615de4565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615e2e5781615e30565b825b905092915050565b600082821115615e4757600080fd5b600082840390508091505092915050565b600080823b905060008111915050919050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615f125760208114615f1a5760009350615f25565b819350615f25565b600051158215171593505b505050939250505056fea2646970667358221220cd2bdb262f44c0636136d3c6bfed2c2458921f82c3bf476053bd2e9ac618b2da64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH2 0x5F65 DUP1 PUSH3 0x29 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1D1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFFED0E0 GT PUSH2 0xF7 JUMPI DUP1 PUSH4 0xE19A9DD9 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xF08A0323 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF08A0323 EQ PUSH2 0x156B JUMPI DUP1 PUSH4 0xF698DA25 EQ PUSH2 0x15BC JUMPI DUP1 PUSH4 0xF8DC5DD9 EQ PUSH2 0x15E7 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x1662 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xE19A9DD9 EQ PUSH2 0x12BF JUMPI DUP1 PUSH4 0xE318B52B EQ PUSH2 0x1310 JUMPI DUP1 PUSH4 0xE75235B8 EQ PUSH2 0x13A1 JUMPI DUP1 PUSH4 0xE86637DB EQ PUSH2 0x13CC JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xCC2F8452 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xCC2F8452 EQ PUSH2 0x100C JUMPI DUP1 PUSH4 0xD4D9BDCD EQ PUSH2 0x10D9 JUMPI DUP1 PUSH4 0xD8D11F78 EQ PUSH2 0x1114 JUMPI DUP1 PUSH4 0xE009CFDE EQ PUSH2 0x124E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0xD89 JUMPI DUP1 PUSH4 0xB4FABA09 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH4 0xB63E800D EQ PUSH2 0xE9C JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B GT PUSH2 0x16F JUMPI DUP1 PUSH4 0x6A761202 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x6A761202 EQ PUSH2 0x989 JUMPI DUP1 PUSH4 0x7D832974 EQ PUSH2 0xB45 JUMPI DUP1 PUSH4 0x934F3A11 EQ PUSH2 0xBB4 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0xD1D JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0x5AE6BD37 EQ PUSH2 0x8AE JUMPI DUP1 PUSH4 0x610B5925 EQ PUSH2 0x8FD JUMPI DUP1 PUSH4 0x694E80C3 EQ PUSH2 0x94E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x2F54BF6E GT PUSH2 0x1AB JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x4C8 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0x468721A7 EQ PUSH2 0x55A JUMPI DUP1 PUSH4 0x5229073F EQ PUSH2 0x66F JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xD582F13 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x12FB68E0 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x2D9AD53D EQ PUSH2 0x461 JUMPI PUSH2 0x226 JUMP JUMPDEST CALLDATASIZE PUSH2 0x226 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3D0CE9BFC3ED7D6862DBB28B2DEA94561FE714A1B4D019AA8AF39730D1AD7C3D CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD DUP1 PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY CALLER PUSH1 0x60 SHL CALLDATASIZE MSTORE PUSH1 0x0 DUP1 PUSH1 0x14 CALLDATASIZE ADD PUSH1 0x0 DUP1 DUP6 GAS CALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH2 0x28E JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x16F2 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x34A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1AD8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x23D6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x517 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x24A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x544 PUSH2 0x257A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x657 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2587 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2692 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD 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 0x7B4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x799 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x7E1 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 SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x833 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x26C8 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x873 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x858 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8A0 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 0x8BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x274F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x94C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x920 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2767 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x987 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2AEF JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB2D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xADB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x2C29 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x2E8D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD32 PUSH2 0x2F1C JUMP JUMPDEST PUSH1 0x40 MLOAD 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD75 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD5A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD9E PUSH2 0x30C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xE26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xE48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x30CB JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x100A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0xEC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xEEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x30ED JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1065 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x102F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10C4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x10A9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1112 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x360E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1238 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x1138 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12BD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x37DA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x130E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3B61 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x131C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x139F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3D4D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B6 PUSH2 0x43AB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x13F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x146B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x43B5 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x1530 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1515 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x155D 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 0x1577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15BA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x158E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x455D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D1 PUSH2 0x45B4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1660 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x160A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4632 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1677 PUSH2 0x4A5B JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x16B7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x169C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x16E4 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 0x16FA PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1764 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x179C JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x180E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x190F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x1AD4 JUMPI PUSH2 0x1AD3 DUP2 PUSH2 0x2AEF JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1AEC PUSH1 0x41 DUP3 PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD LT ISZERO PUSH2 0x1B62 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303230000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x23CA JUMPI PUSH2 0x1B7E DUP9 DUP3 PUSH2 0x4B71 JUMP JUMPDEST DUP1 SWAP5 POP DUP2 SWAP6 POP DUP3 SWAP7 POP POP POP POP PUSH1 0x0 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2003 JUMPI DUP10 DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x1C12 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303237000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SHR SWAP5 POP PUSH2 0x1C2C PUSH1 0x41 DUP9 PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 PUSH1 0x0 SHR LT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303231000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1CBD PUSH1 0x20 DUP5 PUSH1 0x0 SHR PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1D31 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303232000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 DUP11 ADD ADD MLOAD SWAP1 POP DUP9 MLOAD PUSH2 0x1D67 DUP3 PUSH2 0x1D59 PUSH1 0x20 DUP8 PUSH1 0x0 SHR PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303233000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x20 DUP5 DUP12 ADD ADD SWAP1 POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x20C13B0B DUP14 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 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 0x1E7D JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1E62 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EAA 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 DUP4 DUP2 SUB DUP3 MSTORE DUP5 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 0x1EE3 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1EC8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F10 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1FFC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303234000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH2 0x2248 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2117 JUMPI DUP3 PUSH1 0x0 SHR SWAP5 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x20A0 JUMPI POP PUSH1 0x0 PUSH1 0x8 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP13 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD EQ ISZERO JUMPDEST PUSH2 0x2112 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303235000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2247 JUMP JUMPDEST PUSH1 0x1E DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0x21DF JUMPI PUSH1 0x1 DUP11 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x4 DUP7 SUB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP PUSH2 0x2246 JUMP JUMPDEST PUSH1 0x1 DUP11 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2239 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP JUMPDEST JUMPDEST JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x230F JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x2348 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x23BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303236000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SWAP6 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x1B6C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x24A1 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2573 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 CHAINID SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xB648D3644F584ED1C2232D53C46D87E693586486AD0D1175F8656013110B714E CALLER DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2601 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 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 0x263E JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2623 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x266B 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 SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x2688 DUP6 DUP6 DUP6 DUP6 PUSH2 0x4BBF JUMP JUMPDEST SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x26A2 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2587 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 MLOAD PUSH1 0x20 RETURNDATASIZE ADD DUP2 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP2 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY DUP1 SWAP2 POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x20 DUP4 MUL PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x26E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2719 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2744 JUMPI DUP1 DUP6 ADD SLOAD DUP1 PUSH1 0x20 DUP4 MUL PUSH1 0x20 DUP6 ADD ADD MSTORE POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x271F JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH2 0x276F PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x27D9 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x284B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x294C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xECDF3A3EFFEA5783A3C4C2140E677577666428D44ED9D474A0B3A4C9943F8440 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x2AF7 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 GT ISZERO PUSH2 0x2B6F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2BE6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH32 0x610F7FF2B304AE8903C3DE74C60C6AB1F7D6226B3F52C5161905BB5AD4039C93 PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x5 SLOAD CALLER PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH32 0x66753CD2356569EE081232E3BE8909B950E0A76C1F8460C3A5E3C2BE32B11BED DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP13 PUSH1 0x40 MLOAD DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP11 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2CDC JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP15 DUP15 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP DUP5 DUP2 SUB DUP4 MSTORE DUP7 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 0x2D96 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2D7B JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2DC3 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 DUP5 DUP2 SUB DUP3 MSTORE DUP6 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 0x2DFC JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2DE1 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2E29 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 SWAP16 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x2E56 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x4DC5 JUMP JUMPDEST SWAP2 POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x2F0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F16 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1AD8 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2F39 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 0x2F68 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x30BC JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3013 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x2 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x2FD2 JUMP JUMPDEST DUP3 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP6 GAS DELEGATECALL DUP1 PUSH1 0x0 MSTORE RETURNDATASIZE PUSH1 0x20 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x40 RETURNDATACOPY PUSH1 0x40 RETURNDATASIZE ADD PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3138 DUP11 DUP11 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP10 PUSH2 0x52F4 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3176 JUMPI PUSH2 0x3175 DUP5 PUSH2 0x57F4 JUMP JUMPDEST JUMPDEST PUSH2 0x31C4 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x58C5 JUMP JUMPDEST PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x31DE JUMPI PUSH2 0x31DC DUP3 PUSH1 0x0 PUSH1 0x1 DUP7 DUP6 PUSH2 0x5B9B JUMP JUMPDEST POP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x141DF868A6331AF528E38C83B7AA03EDC19BE66E37AE67F9285BF4F8E3C6A1A8 DUP12 DUP12 DUP12 DUP12 DUP10 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP8 DUP8 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x32EF JUMPI POP PUSH2 0x32EE DUP5 PUSH2 0x23D6 JUMP JUMPDEST JUMPDEST PUSH2 0x3361 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x33D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313036000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x33EE 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 0x341D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x34EF JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x34FA JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0x35B5 JUMPI DUP2 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x350C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x3485 JUMP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3603 JUMPI DUP3 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH2 0x35F8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP JUMPDEST DUP1 DUP4 MSTORE POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3710 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303330000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x8 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH32 0xF2A0EB156472D1440255B0D7C1E19CC07115D1051FE605B0DCE69ACFEC884D9C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37C2 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x43B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x37E2 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x384C JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x38BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x39BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAAB4FA2B463F581B2B32CB3B7E3B704B9CE37CC209B5FB4D77E593ACE4054276 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x3B69 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3CDB JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1FFC9A7 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3C41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3CDA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753333030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST PUSH1 0x0 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1151116914515BC0891FF9047A6CB32CF902546F83066499BCF8BA33D2353FA2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x3D55 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x3DBF JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3DF7 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x3E69 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3F6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x3FD4 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4046 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4146 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xBB8310D486368DB6BD6F849402FDD73AD53D316B5A4B2644AD6EFE0F941286D8 PUSH1 0x0 SHL DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4446 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL PUSH2 0x44D2 PUSH2 0x45B4 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4565 PUSH2 0x4A94 JUMP JUMPDEST PUSH2 0x456E DUP2 PUSH2 0x57F4 JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x5AC6C46C93C8D0E53714BA3B53DB3E7C046DA994313D7ED0D192028BC7C228B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x47E79534A245952E8B16893A336B85A3D9EA9FA8C573F3D803AFB92A79469218 PUSH1 0x0 SHL PUSH2 0x45E2 PUSH2 0x257A JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x463A PUSH2 0x4A94 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x3 SLOAD SUB LT ISZERO PUSH2 0x46B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x471F JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4791 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4891 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 SWAP1 SUB SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x4A56 JUMPI PUSH2 0x4A55 DUP2 PUSH2 0x2AEF JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4B35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303331000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 EQ ISZERO PUSH2 0x4B4A JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MUL SWAP1 POP DUP3 DUP5 DUP3 DUP2 PUSH2 0x4B5B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x4B66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x41 MUL PUSH1 0x20 DUP2 ADD DUP7 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP2 ADD DUP7 ADD MLOAD SWAP2 POP PUSH1 0xFF PUSH1 0x41 DUP3 ADD DUP8 ADD MLOAD AND SWAP4 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x4BB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x4C8A JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4CFC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4D29 DUP6 DUP6 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DA1 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x4D79 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x6895C13664AA4F67288B25D7A21D7AAA34916E355FB9B6FAE0A139A9085BECB8 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x4DBD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xACD2C8702804128FDB0DB2BB49F6D127DD0181C13FD45DBFE16DE0930E2BD375 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4DDF DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 PUSH1 0x5 SLOAD PUSH2 0x43B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x5 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP PUSH2 0x4E08 DUP3 DUP3 DUP7 PUSH2 0x2E8D JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4E13 PUSH2 0x5DED JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4FF9 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75F0BB52 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 CALLER PUSH1 0x40 MLOAD DUP14 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP11 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4EB6 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP14 DUP14 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP6 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 0x4F88 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x4F6D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4FB5 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 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4FE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4FF4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1F4 PUSH2 0x5020 PUSH2 0x9C4 DUP12 ADD PUSH1 0x3F PUSH1 0x40 DUP14 MUL DUP2 PUSH2 0x5011 JUMPI INVALID JUMPDEST DIV PUSH2 0x5E1E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ADD GAS LT ISZERO PUSH2 0x5096 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303130000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 GAS SWAP1 POP PUSH2 0x50FF DUP16 DUP16 DUP16 DUP16 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP15 PUSH1 0x0 DUP14 EQ PUSH2 0x50F4 JUMPI DUP15 PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x9C4 GAS SUB JUMPDEST PUSH2 0x5DA1 JUMP JUMPDEST SWAP4 POP PUSH2 0x5114 GAS DUP3 PUSH2 0x5E38 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP4 DUP1 PUSH2 0x5123 JUMPI POP PUSH1 0x0 DUP11 EQ ISZERO JUMPDEST DUP1 PUSH2 0x512F JUMPI POP PUSH1 0x0 DUP9 EQ ISZERO JUMPDEST PUSH2 0x51A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303133000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP10 GT ISZERO PUSH2 0x51BB JUMPI PUSH2 0x51B8 DUP3 DUP12 DUP12 DUP12 DUP12 PUSH2 0x5B9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0x51FE JUMPI DUP4 PUSH32 0x442E715F626346E8C54381002DA614F62BEE8D27386535B2521EC8540898556E DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x5237 JUMP JUMPDEST DUP4 PUSH32 0x23428B18ACFB3EA64B08DC0C1D296EA9C09702C09083CA5272E64D115B687D23 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x52E3 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x93271368 DUP4 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO 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 0x52CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x52DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD EQ PUSH2 0x536C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 GT ISZERO PUSH2 0x53E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x545A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x5760 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x547A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x54EE JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x5526 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x555E JUMPI POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x55D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x56D1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x5463 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 MLOAD PUSH1 0x3 DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x4 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5896 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753343030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x59C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5B97 JUMPI PUSH2 0x5A83 DUP3 PUSH2 0x5E58 JUMP JUMPDEST PUSH2 0x5AF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5B24 DUP3 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DA1 JUMP JUMPDEST PUSH2 0x5B96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5BD8 JUMPI DUP3 PUSH2 0x5BDA JUMP JUMPDEST ORIGIN JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5CF2 JUMPI PUSH2 0x5C44 GASPRICE DUP7 LT PUSH2 0x5C21 JUMPI GASPRICE PUSH2 0x5C23 JUMP JUMPDEST DUP6 JUMPDEST PUSH2 0x5C36 DUP9 DUP11 PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP4 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP PUSH2 0x5CED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303131000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5D97 JUMP JUMPDEST PUSH2 0x5D17 DUP6 PUSH2 0x5D09 DUP9 DUP11 PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH2 0x5D24 DUP5 DUP3 DUP5 PUSH2 0x5E6B JUMP JUMPDEST PUSH2 0x5D96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303132000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x5DAF JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x5DBB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x5DD4 JUMPI PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP10 DUP7 DELEGATECALL SWAP1 POP PUSH2 0x5DE4 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP9 DUP11 DUP8 CALL SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x5E2E JUMPI DUP2 PUSH2 0x5E30 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x5E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 SUB SWAP1 POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH1 0x20 PUSH1 0x0 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 DUP10 PUSH2 0x2710 GAS SUB CALL RETURNDATASIZE PUSH1 0x0 DUP2 EQ PUSH2 0x5F12 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x5F1A JUMPI PUSH1 0x0 SWAP4 POP PUSH2 0x5F25 JUMP JUMPDEST DUP2 SWAP4 POP PUSH2 0x5F25 JUMP JUMPDEST PUSH1 0x0 MLOAD ISZERO DUP3 ISZERO OR ISZERO SWAP4 POP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCD 0x2B 0xDB 0x26 0x2F DIFFICULTY 0xC0 PUSH4 0x6136D3C6 0xBF 0xED 0x2C 0x24 PC SWAP3 0x1F DUP3 0xC3 0xBF SELFBALANCE PUSH1 0x53 0xBD 0x2E SWAP11 0xC6 XOR 0xB2 0xDA PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"413:1976:8:-:0;;;;;;;;;;;;;3963:1:7;3951:9;:13;;;;413:1976:8;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106101d15760003560e01c8063affed0e0116100f7578063e19a9dd911610095578063f08a032311610064578063f08a03231461156b578063f698da25146115bc578063f8dc5dd9146115e7578063ffa1ad741461166257610226565b8063e19a9dd9146112bf578063e318b52b14611310578063e75235b8146113a1578063e86637db146113cc57610226565b8063cc2f8452116100d1578063cc2f84521461100c578063d4d9bdcd146110d9578063d8d11f7814611114578063e009cfde1461124e57610226565b8063affed0e014610d89578063b4faba0914610db4578063b63e800d14610e9c57610226565b80635624b25b1161016f5780636a7612021161013e5780636a761202146109895780637d83297414610b45578063934f3a1114610bb4578063a0e67e2b14610d1d57610226565b80635624b25b146107f05780635ae6bd37146108ae578063610b5925146108fd578063694e80c31461094e57610226565b80632f54bf6e116101ab5780632f54bf6e146104c85780633408e4701461052f578063468721a71461055a5780635229073f1461066f57610226565b80630d582f131461029357806312fb68e0146102ee5780632d9ad53d1461046157610226565b36610226573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023257600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061026757600080f35b36600080373360601b365260008060143601600080855af13d6000803e8061028e573d6000fd5b3d6000f35b34801561029f57600080fd5b506102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116f2565b005b3480156102fa57600080fd5b5061045f6004803603608081101561031157600080fd5b81019080803590602001909291908035906020019064010000000081111561033857600080fd5b82018360208201111561034a57600080fd5b8035906020019184600183028401116401000000008311171561036c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103cf57600080fd5b8201836020820111156103e157600080fd5b8035906020019184600183028401116401000000008311171561040357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611ad8565b005b34801561046d57600080fd5b506104b06004803603602081101561048457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123d6565b60405180821515815260200191505060405180910390f35b3480156104d457600080fd5b50610517600480360360208110156104eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a8565b60405180821515815260200191505060405180910390f35b34801561053b57600080fd5b5061054461257a565b6040518082815260200191505060405180910390f35b34801561056657600080fd5b506106576004803603608081101561057d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460018302840111640100000000831117156105f857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050612587565b60405180821515815260200191505060405180910390f35b34801561067b57600080fd5b5061076c6004803603608081101561069257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184600183028401116401000000008311171561070d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050612692565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107b4578082015181840152602081019050610799565b50505050905090810190601f1680156107e15780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156107fc57600080fd5b506108336004803603604081101561081357600080fd5b8101908080359060200190929190803590602001909291905050506126c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610873578082015181840152602081019050610858565b50505050905090810190601f1680156108a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108ba57600080fd5b506108e7600480360360208110156108d157600080fd5b810190808035906020019092919050505061274f565b6040518082815260200191505060405180910390f35b34801561090957600080fd5b5061094c6004803603602081101561092057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612767565b005b34801561095a57600080fd5b506109876004803603602081101561097157600080fd5b8101908080359060200190929190505050612aef565b005b610b2d60048036036101408110156109a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109e757600080fd5b8201836020820111156109f957600080fd5b80359060200191846001830284011164010000000083111715610a1b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846001830284011164010000000083111715610adb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c29565b60405180821515815260200191505060405180910390f35b348015610b5157600080fd5b50610b9e60048036036040811015610b6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e68565b6040518082815260200191505060405180910390f35b348015610bc057600080fd5b50610d1b60048036036060811015610bd757600080fd5b810190808035906020019092919080359060200190640100000000811115610bfe57600080fd5b820183602082011115610c1057600080fd5b80359060200191846001830284011164010000000083111715610c3257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9557600080fd5b820183602082011115610ca757600080fd5b80359060200191846001830284011164010000000083111715610cc957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e8d565b005b348015610d2957600080fd5b50610d32612f1c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d75578082015181840152602081019050610d5a565b505050509050019250505060405180910390f35b348015610d9557600080fd5b50610d9e6130c5565b6040518082815260200191505060405180910390f35b348015610dc057600080fd5b50610e9a60048036036040811015610dd757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1457600080fd5b820183602082011115610e2657600080fd5b80359060200191846001830284011164010000000083111715610e4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506130cb565b005b348015610ea857600080fd5b5061100a6004803603610100811015610ec057600080fd5b8101908080359060200190640100000000811115610edd57600080fd5b820183602082011115610eef57600080fd5b80359060200191846020830284011164010000000083111715610f1157600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f5c57600080fd5b820183602082011115610f6e57600080fd5b80359060200191846001830284011164010000000083111715610f9057600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130ed565b005b34801561101857600080fd5b506110656004803603604081101561102f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132ab565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156110c45780820151818401526020810190506110a9565b50505050905001935050505060405180910390f35b3480156110e557600080fd5b50611112600480360360208110156110fc57600080fd5b810190808035906020019092919050505061360e565b005b34801561112057600080fd5b50611238600480360361014081101561113857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561117f57600080fd5b82018360208201111561119157600080fd5b803590602001918460018302840111640100000000831117156111b357600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137ad565b6040518082815260200191505060405180910390f35b34801561125a57600080fd5b506112bd6004803603604081101561127157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137da565b005b3480156112cb57600080fd5b5061130e600480360360208110156112e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b61565b005b34801561131c57600080fd5b5061139f6004803603606081101561133357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d4d565b005b3480156113ad57600080fd5b506113b66143ab565b6040518082815260200191505060405180910390f35b3480156113d857600080fd5b506114f060048036036101408110156113f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561143757600080fd5b82018360208201111561144957600080fd5b8035906020019184600183028401116401000000008311171561146b57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506143b5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611530578082015181840152602081019050611515565b50505050905090810190601f16801561155d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561157757600080fd5b506115ba6004803603602081101561158e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061455d565b005b3480156115c857600080fd5b506115d16145b4565b6040518082815260200191505060405180910390f35b3480156115f357600080fd5b506116606004803603606081101561160a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614632565b005b34801561166e57600080fd5b50611677614a5b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156116b757808201518184015260208101905061169c565b50505050905090810190601f1680156116e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6116fa614a94565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156117645750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561179c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61180e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a28060045414611ad457611ad381612aef565b5b5050565b611aec604182614b3790919063ffffffff16565b82511015611b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b868110156123ca57611b7e8882614b71565b80945081955082965050505060008460ff1614156120035789898051906020012014611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323700000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8260001c9450611c2c604188614b3790919063ffffffff16565b8260001c1015611ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611cbd60208460001c614ba090919063ffffffff16565b1115611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611d6782611d5960208760001c614ba090919063ffffffff16565b614ba090919063ffffffff16565b1115611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611e7d578082015181840152602081019050611e62565b50505050905090810190601f168015611eaa5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611ee3578082015181840152602081019050611ec8565b50505050905090810190601f168015611f105780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f2f57600080fd5b505afa158015611f43573d6000803e3d6000fd5b505050506040513d6020811015611f5957600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ffc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050612248565b60018460ff161415612117578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120a057506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b612112576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612247565b601e8460ff1611156121df5760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ce573d6000803e3d6000fd5b505050602060405103519450612246565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612239573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611801561230f5750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123485750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611b6c565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156124a15750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125735750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561260157fe5b8152602001828103825284818151815260200191508051906020019080838360005b8381101561263e578082015181840152602081019050612623565b50505050905090810190601f16801561266b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a161268885858585614bbf565b9050949350505050565b600060606126a286868686612587565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff811180156126e657600080fd5b506040519080825280601f01601f1916602001820160405280156127195781602001600182028036833780820191505090505b50905060005b838110156127445780850154806020830260208501015250808060010191505061271f565b508091505092915050565b60076020528060005260406000206000915090505481565b61276f614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156127d95750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61284b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461294c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844060405160405180910390a250565b612af7614a94565b600354811115612b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612cdc57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612d96578082015181840152602081019050612d7b565b50505050905090810190601f168015612dc35780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612dfc578082015181840152602081019050612de1565b50505050905090810190601f168015612e295780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612e568d8d8d8d8d8d8d8d8d8d8d614dc5565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f1684848484611ad8565b50505050565b6060600060035467ffffffffffffffff81118015612f3957600080fd5b50604051908082528060200260200182016040528015612f685781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130bc578083838151811061301357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050612fd2565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131388a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896152f4565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461317657613175846157f4565b5b6131c48787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506158c5565b60008211156131de576131dc82600060018685615b9b565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b60606000600173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132ef57506132ee846123d6565b5b613361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083116133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8267ffffffffffffffff811180156133ee57600080fd5b5060405190808252806020026020018201604052801561341d5781602001602082028036833780820191505090505b5091506000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156134ef5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134fa57508381105b156135b5578183828151811061350c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508080600101915050613485565b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613603578260018203815181106135f857fe5b602002602001015191505b808352509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137c28c8c8c8c8c8c8c8c8c8c8c6143b5565b8051906020012090509b9a5050505050505050505050565b6137e2614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561384c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427660405160405180910390a25050565b613b69614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613cdb578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060206040518083038186803b158015613c2d57600080fd5b505afa158015613c41573d6000803e3d6000fd5b505050506040513d6020811015613c5757600080fd5b8101908080519060200190929190505050613cda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475333303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa260405160405180910390a25050565b613d55614a94565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613dbf5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613df757503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613e69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613fd45750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614046576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614146576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a2505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561444657fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6144d26145b4565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614565614a94565b61456e816157f4565b8073ffffffffffffffffffffffffffffffffffffffff167f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b060405160405180910390a250565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6145e261257a565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b61463a614a94565b8060016003540310156146b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561471f5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614791576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055508173ffffffffffffffffffffffffffffffffffffffff167ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf60405160405180910390a28060045414614a5657614a5581612aef565b5b505050565b6040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614b35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614b4a5760009050614b6b565b6000828402905082848281614b5b57fe5b0414614b6657600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614bb557600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614c8a5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614cfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614d29858585857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615da1565b90508015614d79573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614dbd565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614ddf8e8e8e8e8e8e8e8e8e8e6005546143b5565b905060056000815480929190600101919050555080805190602001209150614e08828286612e8d565b506000614e13615ded565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ff9578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614eb657fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614f88578082015181840152602081019050614f6d565b50505050905090810190601f168015614fb55780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614fe057600080fd5b505af1158015614ff4573d6000803e3d6000fd5b505050505b6101f46150206109c48b01603f60408d028161501157fe5b04615e1e90919063ffffffff16565b015a1015615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506150ff8f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146150f4578e6150fa565b6109c45a035b615da1565b93506151145a82615e3890919063ffffffff16565b90508380615123575060008a14155b8061512f575060008814155b6151a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156151bb576151b8828b8b8b8b615b9b565b90505b84156151fe57837f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e826040518082815260200191505060405180910390a2615237565b837f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23826040518082815260200191505060405180910390a25b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146152e3578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156152ca57600080fd5b505af11580156152de573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461536c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156153e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561545a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561576057600084828151811061547a57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156154ee5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561552657503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561555e57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6155d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146156d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615463565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475334303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146159c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614615b9757615a8382615e58565b615af5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b248260008360017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615da1565b615b96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614615bd85782615bda565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615cf257615c443a8610615c21573a615c23565b855b615c36888a614ba090919063ffffffff16565b614b3790919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615d97565b615d1785615d09888a614ba090919063ffffffff16565b614b3790919063ffffffff16565b9150615d24848284615e6b565b615d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615daf57fe5b836001811115615dbb57fe5b1415615dd4576000808551602087018986f49050615de4565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615e2e5781615e30565b825b905092915050565b600082821115615e4757600080fd5b600082840390508091505092915050565b600080823b905060008111915050919050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615f125760208114615f1a5760009350615f25565b819350615f25565b600051158215171593505b505050939250505056fea2646970667358221220cd2bdb262f44c0636136d3c6bfed2c2458921f82c3bf476053bd2e9ac618b2da64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1D1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFFED0E0 GT PUSH2 0xF7 JUMPI DUP1 PUSH4 0xE19A9DD9 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xF08A0323 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF08A0323 EQ PUSH2 0x156B JUMPI DUP1 PUSH4 0xF698DA25 EQ PUSH2 0x15BC JUMPI DUP1 PUSH4 0xF8DC5DD9 EQ PUSH2 0x15E7 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x1662 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xE19A9DD9 EQ PUSH2 0x12BF JUMPI DUP1 PUSH4 0xE318B52B EQ PUSH2 0x1310 JUMPI DUP1 PUSH4 0xE75235B8 EQ PUSH2 0x13A1 JUMPI DUP1 PUSH4 0xE86637DB EQ PUSH2 0x13CC JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xCC2F8452 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xCC2F8452 EQ PUSH2 0x100C JUMPI DUP1 PUSH4 0xD4D9BDCD EQ PUSH2 0x10D9 JUMPI DUP1 PUSH4 0xD8D11F78 EQ PUSH2 0x1114 JUMPI DUP1 PUSH4 0xE009CFDE EQ PUSH2 0x124E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0xD89 JUMPI DUP1 PUSH4 0xB4FABA09 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH4 0xB63E800D EQ PUSH2 0xE9C JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B GT PUSH2 0x16F JUMPI DUP1 PUSH4 0x6A761202 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x6A761202 EQ PUSH2 0x989 JUMPI DUP1 PUSH4 0x7D832974 EQ PUSH2 0xB45 JUMPI DUP1 PUSH4 0x934F3A11 EQ PUSH2 0xBB4 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0xD1D JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x5624B25B EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0x5AE6BD37 EQ PUSH2 0x8AE JUMPI DUP1 PUSH4 0x610B5925 EQ PUSH2 0x8FD JUMPI DUP1 PUSH4 0x694E80C3 EQ PUSH2 0x94E JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x2F54BF6E GT PUSH2 0x1AB JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x4C8 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0x468721A7 EQ PUSH2 0x55A JUMPI DUP1 PUSH4 0x5229073F EQ PUSH2 0x66F JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xD582F13 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x12FB68E0 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x2D9AD53D EQ PUSH2 0x461 JUMPI PUSH2 0x226 JUMP JUMPDEST CALLDATASIZE PUSH2 0x226 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3D0CE9BFC3ED7D6862DBB28B2DEA94561FE714A1B4D019AA8AF39730D1AD7C3D CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD DUP1 PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY CALLER PUSH1 0x60 SHL CALLDATASIZE MSTORE PUSH1 0x0 DUP1 PUSH1 0x14 CALLDATASIZE ADD PUSH1 0x0 DUP1 DUP6 GAS CALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH2 0x28E JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x16F2 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x34A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1AD8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x23D6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x517 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x24A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x544 PUSH2 0x257A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x657 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2587 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2692 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD 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 0x7B4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x799 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x7E1 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 SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x833 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x26C8 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x873 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x858 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8A0 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 0x8BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x274F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x94C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x920 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2767 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x987 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2AEF JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB2D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xADB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x2C29 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x2E8D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD32 PUSH2 0x2F1C JUMP JUMPDEST PUSH1 0x40 MLOAD 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD75 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD5A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD9E PUSH2 0x30C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xE26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xE48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x30CB JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x100A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0xEC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xEEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x30ED JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1065 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x102F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10C4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x10A9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1112 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x360E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1238 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x1138 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12BD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x37DA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x130E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3B61 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x131C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x139F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3D4D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B6 PUSH2 0x43AB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x13F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x146B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x43B5 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x1530 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1515 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x155D 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 0x1577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15BA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x158E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x455D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D1 PUSH2 0x45B4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1660 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x160A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x4632 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1677 PUSH2 0x4A5B JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x16B7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x169C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x16E4 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 0x16FA PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1764 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x179C JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x180E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x190F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x1AD4 JUMPI PUSH2 0x1AD3 DUP2 PUSH2 0x2AEF JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1AEC PUSH1 0x41 DUP3 PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD LT ISZERO PUSH2 0x1B62 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303230000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x23CA JUMPI PUSH2 0x1B7E DUP9 DUP3 PUSH2 0x4B71 JUMP JUMPDEST DUP1 SWAP5 POP DUP2 SWAP6 POP DUP3 SWAP7 POP POP POP POP PUSH1 0x0 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2003 JUMPI DUP10 DUP10 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x1C12 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303237000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SHR SWAP5 POP PUSH2 0x1C2C PUSH1 0x41 DUP9 PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 PUSH1 0x0 SHR LT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303231000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1CBD PUSH1 0x20 DUP5 PUSH1 0x0 SHR PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1D31 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303232000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 DUP11 ADD ADD MLOAD SWAP1 POP DUP9 MLOAD PUSH2 0x1D67 DUP3 PUSH2 0x1D59 PUSH1 0x20 DUP8 PUSH1 0x0 SHR PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303233000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x20 DUP5 DUP12 ADD ADD SWAP1 POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x20C13B0B DUP14 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 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 0x1E7D JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1E62 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EAA 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 DUP4 DUP2 SUB DUP3 MSTORE DUP5 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 0x1EE3 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1EC8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F10 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1FFC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303234000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH2 0x2248 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2117 JUMPI DUP3 PUSH1 0x0 SHR SWAP5 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x20A0 JUMPI POP PUSH1 0x0 PUSH1 0x8 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP13 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD EQ ISZERO JUMPDEST PUSH2 0x2112 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303235000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2247 JUMP JUMPDEST PUSH1 0x1E DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0x21DF JUMPI PUSH1 0x1 DUP11 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x4 DUP7 SUB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP PUSH2 0x2246 JUMP JUMPDEST PUSH1 0x1 DUP11 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2239 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP5 POP JUMPDEST JUMPDEST JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x230F JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x2348 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x23BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303236000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SWAP6 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x1B6C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x24A1 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2573 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 CHAINID SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xB648D3644F584ED1C2232D53C46D87E693586486AD0D1175F8656013110B714E CALLER DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2601 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 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 0x263E JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2623 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x266B 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 SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x2688 DUP6 DUP6 DUP6 DUP6 PUSH2 0x4BBF JUMP JUMPDEST SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x26A2 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2587 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 MLOAD PUSH1 0x20 RETURNDATASIZE ADD DUP2 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP2 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY DUP1 SWAP2 POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x20 DUP4 MUL PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x26E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2719 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2744 JUMPI DUP1 DUP6 ADD SLOAD DUP1 PUSH1 0x20 DUP4 MUL PUSH1 0x20 DUP6 ADD ADD MSTORE POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x271F JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH2 0x276F PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x27D9 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x284B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x294C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xECDF3A3EFFEA5783A3C4C2140E677577666428D44ED9D474A0B3A4C9943F8440 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x2AF7 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 GT ISZERO PUSH2 0x2B6F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2BE6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH32 0x610F7FF2B304AE8903C3DE74C60C6AB1F7D6226B3F52C5161905BB5AD4039C93 PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x5 SLOAD CALLER PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH32 0x66753CD2356569EE081232E3BE8909B950E0A76C1F8460C3A5E3C2BE32B11BED DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP13 PUSH1 0x40 MLOAD DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP11 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2CDC JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP15 DUP15 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP DUP5 DUP2 SUB DUP4 MSTORE DUP7 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 0x2D96 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2D7B JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2DC3 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 DUP5 DUP2 SUB DUP3 MSTORE DUP6 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 0x2DFC JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2DE1 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2E29 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 SWAP16 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x2E56 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x4DC5 JUMP JUMPDEST SWAP2 POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x2F0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F16 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1AD8 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2F39 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 0x2F68 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x30BC JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3013 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x2 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x2FD2 JUMP JUMPDEST DUP3 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP6 GAS DELEGATECALL DUP1 PUSH1 0x0 MSTORE RETURNDATASIZE PUSH1 0x20 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x40 RETURNDATACOPY PUSH1 0x40 RETURNDATASIZE ADD PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3138 DUP11 DUP11 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP10 PUSH2 0x52F4 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3176 JUMPI PUSH2 0x3175 DUP5 PUSH2 0x57F4 JUMP JUMPDEST JUMPDEST PUSH2 0x31C4 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x58C5 JUMP JUMPDEST PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x31DE JUMPI PUSH2 0x31DC DUP3 PUSH1 0x0 PUSH1 0x1 DUP7 DUP6 PUSH2 0x5B9B JUMP JUMPDEST POP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x141DF868A6331AF528E38C83B7AA03EDC19BE66E37AE67F9285BF4F8E3C6A1A8 DUP12 DUP12 DUP12 DUP12 DUP10 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP8 DUP8 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x32EF JUMPI POP PUSH2 0x32EE DUP5 PUSH2 0x23D6 JUMP JUMPDEST JUMPDEST PUSH2 0x3361 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x33D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313036000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x33EE 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 0x341D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x34EF JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x34FA JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0x35B5 JUMPI DUP2 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x350C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x3485 JUMP JUMPDEST PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3603 JUMPI DUP3 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH2 0x35F8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP JUMPDEST DUP1 DUP4 MSTORE POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3710 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303330000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x8 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH32 0xF2A0EB156472D1440255B0D7C1E19CC07115D1051FE605B0DCE69ACFEC884D9C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37C2 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x43B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x37E2 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x384C JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x38BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x39BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAAB4FA2B463F581B2B32CB3B7E3B704B9CE37CC209B5FB4D77E593ACE4054276 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x3B69 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3CDB JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1FFC9A7 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3C41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3CDA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753333030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST PUSH1 0x0 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1151116914515BC0891FF9047A6CB32CF902546F83066499BCF8BA33D2353FA2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x3D55 PUSH2 0x4A94 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x3DBF JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3DF7 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x3E69 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3F6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x3FD4 JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4046 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4146 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9465FA0C962CC76958E6373A993326400C1C94F8BE2FE3A952ADFA7F60B2EA26 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xBB8310D486368DB6BD6F849402FDD73AD53D316B5A4B2644AD6EFE0F941286D8 PUSH1 0x0 SHL DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4446 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL PUSH2 0x44D2 PUSH2 0x45B4 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4565 PUSH2 0x4A94 JUMP JUMPDEST PUSH2 0x456E DUP2 PUSH2 0x57F4 JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x5AC6C46C93C8D0E53714BA3B53DB3E7C046DA994313D7ED0D192028BC7C228B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x47E79534A245952E8B16893A336B85A3D9EA9FA8C573F3D803AFB92A79469218 PUSH1 0x0 SHL PUSH2 0x45E2 PUSH2 0x257A JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x463A PUSH2 0x4A94 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x3 SLOAD SUB LT ISZERO PUSH2 0x46B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x471F JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4791 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4891 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323035000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 SWAP1 SUB SWAP2 SWAP1 POP SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xF8D49FC529812E9A7C5C50E69C20F0DCCC0DB8FA95C98BC58CC9A4F1C1299EAF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x4 SLOAD EQ PUSH2 0x4A56 JUMPI PUSH2 0x4A55 DUP2 PUSH2 0x2AEF JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4B35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303331000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 EQ ISZERO PUSH2 0x4B4A JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MUL SWAP1 POP DUP3 DUP5 DUP3 DUP2 PUSH2 0x4B5B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x4B66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x41 MUL PUSH1 0x20 DUP2 ADD DUP7 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP2 ADD DUP7 ADD MLOAD SWAP2 POP PUSH1 0xFF PUSH1 0x41 DUP3 ADD DUP8 ADD MLOAD AND SWAP4 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x4BB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x4C8A JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x4CFC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4D29 DUP6 DUP6 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DA1 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x4D79 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x6895C13664AA4F67288B25D7A21D7AAA34916E355FB9B6FAE0A139A9085BECB8 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x4DBD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xACD2C8702804128FDB0DB2BB49F6D127DD0181C13FD45DBFE16DE0930E2BD375 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4DDF DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 PUSH1 0x5 SLOAD PUSH2 0x43B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x5 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH1 0x1 ADD SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP PUSH2 0x4E08 DUP3 DUP3 DUP7 PUSH2 0x2E8D JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4E13 PUSH2 0x5DED JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4FF9 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75F0BB52 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 CALLER PUSH1 0x40 MLOAD DUP14 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP11 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x4EB6 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP14 DUP14 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP6 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 0x4F88 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x4F6D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4FB5 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 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4FE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4FF4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1F4 PUSH2 0x5020 PUSH2 0x9C4 DUP12 ADD PUSH1 0x3F PUSH1 0x40 DUP14 MUL DUP2 PUSH2 0x5011 JUMPI INVALID JUMPDEST DIV PUSH2 0x5E1E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ADD GAS LT ISZERO PUSH2 0x5096 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303130000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 GAS SWAP1 POP PUSH2 0x50FF DUP16 DUP16 DUP16 DUP16 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP15 PUSH1 0x0 DUP14 EQ PUSH2 0x50F4 JUMPI DUP15 PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x9C4 GAS SUB JUMPDEST PUSH2 0x5DA1 JUMP JUMPDEST SWAP4 POP PUSH2 0x5114 GAS DUP3 PUSH2 0x5E38 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP4 DUP1 PUSH2 0x5123 JUMPI POP PUSH1 0x0 DUP11 EQ ISZERO JUMPDEST DUP1 PUSH2 0x512F JUMPI POP PUSH1 0x0 DUP9 EQ ISZERO JUMPDEST PUSH2 0x51A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303133000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP10 GT ISZERO PUSH2 0x51BB JUMPI PUSH2 0x51B8 DUP3 DUP12 DUP12 DUP12 DUP12 PUSH2 0x5B9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0x51FE JUMPI DUP4 PUSH32 0x442E715F626346E8C54381002DA614F62BEE8D27386535B2521EC8540898556E DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x5237 JUMP JUMPDEST DUP4 PUSH32 0x23428B18ACFB3EA64B08DC0C1D296EA9C09702C09083CA5272E64D115B687D23 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x52E3 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x93271368 DUP4 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 ISZERO ISZERO 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 0x52CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x52DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD EQ PUSH2 0x536C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 GT ISZERO PUSH2 0x53E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323031000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x545A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x5760 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x547A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x54EE JUMPI POP PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x5526 JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x555E JUMPI POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x55D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323033000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x56D1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753323034000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x5463 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 MLOAD PUSH1 0x3 DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x4 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5896 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753343030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x6C9A6C4A39284E37ED1CF53D337577D14212A4870FB976A4366C693B939918D5 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x59C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753313030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5B97 JUMPI PUSH2 0x5A83 DUP3 PUSH2 0x5E58 JUMP JUMPDEST PUSH2 0x5AF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303032000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5B24 DUP3 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DA1 JUMP JUMPDEST PUSH2 0x5B96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303030000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x5BD8 JUMPI DUP3 PUSH2 0x5BDA JUMP JUMPDEST ORIGIN JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5CF2 JUMPI PUSH2 0x5C44 GASPRICE DUP7 LT PUSH2 0x5C21 JUMPI GASPRICE PUSH2 0x5C23 JUMP JUMPDEST DUP6 JUMPDEST PUSH2 0x5C36 DUP9 DUP11 PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP4 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP PUSH2 0x5CED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303131000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5D97 JUMP JUMPDEST PUSH2 0x5D17 DUP6 PUSH2 0x5D09 DUP9 DUP11 PUSH2 0x4BA0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4B37 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH2 0x5D24 DUP5 DUP3 DUP5 PUSH2 0x5E6B JUMP JUMPDEST PUSH2 0x5D96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4753303132000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x5DAF JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x5DBB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x5DD4 JUMPI PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP10 DUP7 DELEGATECALL SWAP1 POP PUSH2 0x5DE4 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP9 DUP11 DUP8 CALL SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x4A204F620C8C5CCDCA3FD54D003BADD85BA500436A431F0CBDA4F558C93C34C8 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x5E2E JUMPI DUP2 PUSH2 0x5E30 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x5E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 SUB SWAP1 POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH1 0x20 PUSH1 0x0 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 DUP10 PUSH2 0x2710 GAS SUB CALL RETURNDATASIZE PUSH1 0x0 DUP2 EQ PUSH2 0x5F12 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x5F1A JUMPI PUSH1 0x0 SWAP4 POP PUSH2 0x5F25 JUMP JUMPDEST DUP2 SWAP4 POP PUSH2 0x5F25 JUMP JUMPDEST PUSH1 0x0 MLOAD ISZERO DUP3 ISZERO OR ISZERO SWAP4 POP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCD 0x2B 0xDB 0x26 0x2F DIFFICULTY 0xC0 PUSH4 0x6136D3C6 0xBF 0xED 0x2C 0x24 PC SWAP3 0x1F DUP3 0xC3 0xBF SELFBALANCE PUSH1 0x53 0xBD 0x2E SWAP11 0xC6 XOR 0xB2 0xDA PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"413:1976:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:10:16;538:35;;;563:9;538:35;;;;;;;;;;;;;;;;;;413:1976:8;;;;;;;;;;;;3193:12:11;479:66;3208:29;;3193:44;;3347:4;3341:11;3375:7;3365:2;;3412:1;3409;3402:12;3365:2;3460:14;3457:1;3454;3441:34;3697:8;3693:2;3689:17;3673:14;3666:41;3855:1;3852;3847:2;3831:14;3827:23;3824:1;3821;3812:7;3805:5;3800:57;3891:16;3888:1;3885;3870:38;3931:7;3921:2;;3968:16;3965:1;3958:27;3921:2;4022:16;4019:1;4012:27;2399:625:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13892:3837:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5780:151:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6140:138:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18522:211:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2041:346:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4707:959:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;785:464:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:49:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2001:426:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5398:360:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1097:914:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3521:69:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12858:353;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6383:437:14;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3188:20:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1882:486:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4740:1151:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6437:1535:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18133:228:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21385:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2677:423:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1962:386:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4416:796:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5915:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19858:822:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2437:161:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18901:149:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3380:697:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2205:40:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2399:625:14;505:17:18;:15;:17::i;:::-;2592:1:14::1;2575:19;;:5;:19;;;;:47;;;;;687:3;2598:24;;:5;:24;;;;2575:47;:73;;;;;2643:4;2626:22;;:5;:22;;;;2575:73;2567:91;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2741:1;2716:27;;:6;:13;2723:5;2716:13;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;2708:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2779:6;:23;687:3;2779:23;;;;;;;;;;;;;;;;;;;;;;;;;2763:6;:13;2770:5;2763:13;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;2838:5;2812:6;:23;687:3;2812:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2853:10;;:12;;;;;;;;;;;;;2891:5;2880:17;;;;;;;;;;;;2978:10;2965:9;;:23;2961:56;;2990:27;3006:10;2990:15;:27::i;:::-;2961:56;2399:625:::0;;:::o;13892:3837:7:-;14126:26;14149:2;14126:18;:22;;:26;;;;:::i;:::-;14105:10;:17;:47;;14097:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14224:17;14264:20;14294:7;14311:9;14330;14349;14368:3355;14384:18;14380:1;:22;14368:3355;;;14435:29;14450:10;14462:1;14435:14;:29::i;:::-;14423:41;;;;;;;;;;;;14487:1;14482;:6;;;14478:3068;;;14535:8;14526:4;14516:15;;;;;;:27;14508:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14770:1;14762:10;;14731:43;;15175:26;15198:2;15175:18;:22;;:26;;;;:::i;:::-;15169:1;15161:10;;:40;;15153:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15373:10;:17;15351:18;15366:2;15359:1;15351:10;;:14;;:18;;;;:::i;:::-;:39;;15343:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15544:28;15739:4;15735:1;15723:10;15719:18;15715:29;15709:36;15685:60;;15836:10;:17;15788:44;15811:20;15788:18;15803:2;15796:1;15788:10;;:14;;:18;;;;:::i;:::-;:22;;:44;;;;:::i;:::-;:65;;15780:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15917:30;16244:4;16240:1;16228:10;16224:18;16220:29;16199:50;;223:10:35;16371:19:7;;16292:98;;;16312:12;16292:50;;;16343:4;16349:17;16292:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:98;;;;16284:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14478:3068;;;;;16430:1;16425;:6;;;16421:1125;;;16642:1;16634:10;;16603:43;;16831:12;16817:26;;:10;:26;;;:73;;;;16889:1;16847:14;:28;16862:12;16847:28;;;;;;;;;;;;;;;:38;16876:8;16847:38;;;;;;;;;;;;:43;;16817:73;16809:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16421:1125;;;16929:2;16925:1;:6;;;16921:625;;;17202:97;17275:8;17222:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17212:73;;;;;;17291:1;17287;:5;17294:1;17297;17202:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17187:112;;16921:625;;;17503:28;17513:8;17523:1;17526;17529;17503:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17488:43;;16921:625;16421:1125;14478:3068;17582:9;17567:24;;:12;:24;;;:62;;;;;17627:1;17595:34;;:6;:20;17602:12;17595:20;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;17567:62;:97;;;;;687:3:14;17633:31:7;;:12;:31;;;;17567:97;17559:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17700:12;17688:24;;14404:3;;;;;;;14368:3355;;;13892:3837;;;;;;;;;;:::o;5780:151:13:-;5842:4;5885:6;5865:26;;1005:3;5865:26;;;;:59;;;;;5922:1;5895:29;;:7;:15;5903:6;5895:15;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;;5865:59;5858:66;;5780:151;;;:::o;6140:138:14:-;6193:4;687:3;6216:24;;:5;:24;;;;:55;;;;;6269:1;6244:27;;:6;:13;6251:5;6244:13;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;;6216:55;6209:62;;6140:138;;;:::o;18522:211:7:-;18565:7;18584:10;18689:9;18683:15;;18724:2;18717:9;;;18522:211;:::o;2041:346:8:-;2211:12;2240:61;2262:10;2274:2;2278:5;2285:4;2291:9;2240:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2321:59;2353:2;2357:5;2364:4;2370:9;2321:31;:59::i;:::-;2311:69;;2041:346;;;;;;:::o;4707:959:13:-;4878:12;4892:23;4937:53;4963:2;4967:5;4974:4;4980:9;4937:25;:53::i;:::-;4927:63;;5137:4;5131:11;5379:4;5361:16;5357:27;5352:3;5348:37;5342:4;5335:51;5441:16;5436:3;5429:29;5535:16;5532:1;5525:4;5520:3;5516:14;5501:51;5647:3;5633:17;;5065:595;;;;;;;;:::o;785:464:21:-;860:12;884:19;925:2;916:6;:11;906:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;884:44;;943:13;938:282;970:6;962:5;:14;938:282;;;1118:5;1110:6;1106:18;1100:25;1191:4;1183;1176:5;1172:16;1165:4;1157:6;1153:17;1149:40;1142:54;1070:140;978:7;;;;;;;938:282;;;;1236:6;1229:13;;;785:464;;;;:::o;3360:49:7:-;;;;;;;;;;;;;;;;;:::o;2001:426:13:-;505:17:18;:15;:17::i;:::-;2147:1:13::1;2129:20;;:6;:20;;;;:50;;;;;1005:3;2153:26;;:6;:26;;;;2129:50;2121:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2275:1;2248:29;;:7;:15;2256:6;2248:15;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;2240:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2315:7;:25;1005:3;2315:25;;;;;;;;;;;;;;;;;;;;;;;;;2297:7;:15;2305:6;2297:15;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;2378:6;2350:7;:25;1005:3;2350:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;2413:6;2399:21;;;;;;;;;;;;2001:426:::0;:::o;5398:360:14:-;505:17:18;:15;:17::i;:::-;5562:10:14::1;;5548;:24;;5540:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5666:1;5652:10;:15;;5644:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5699:10;5687:9;:22;;;;5724:27;5741:9;;5724:27;;;;;;;;;;;;;;;;;;5398:360:::0;:::o;1097:914:8:-;1444:4;1460:27;1539:5;;1546:10;1558:9;;1528:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1511:57;;1593:277;1630:2;1646:5;1665:4;;1683:9;1706;1729:7;1750:8;1772;1794:14;1822:10;1846:14;1593:277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1887:117;1909:2;1913:5;1920:4;;1926:9;1937;1948:7;1957:8;1967;1977:14;1993:10;1887:21;:117::i;:::-;1880:124;;;1097:914;;;;;;;;;;;;;:::o;3521:69:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12858:353::-;13025:18;13046:9;;13025:30;;13127:1;13114:10;:14;13106:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13148:56;13165:8;13175:4;13181:10;13193;13148:16;:56::i;:::-;12858:353;;;;:::o;6383:437:14:-;6425:16;6453:22;6492:10;;6478:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6453:50;;6547:13;6574:20;6597:6;:23;687:3;6597:23;;;;;;;;;;;;;;;;;;;;;;;;;6574:46;;6630:162;687:3;6637:31;;:12;:31;;;6630:162;;6699:12;6684:5;6690;6684:12;;;;;;;;;;;;;:27;;;;;;;;;;;6740:6;:20;6747:12;6740:20;;;;;;;;;;;;;;;;;;;;;;;;;6725:35;;6774:7;;;;;;;6630:162;;;6808:5;6801:12;;;;;6383:437;:::o;3188:20:7:-;;;;:::o;1882:486:21:-;2167:1;2164;2146:15;2140:22;2133:4;2116:15;2112:26;2096:14;2089:5;2076:93;2196:7;2190:4;2183:21;2230:16;2224:4;2217:30;2284:16;2281:1;2275:4;2260:41;2346:4;2328:16;2324:27;2321:1;2314:38;4740:1151:7;5139:32;5151:7;;5139:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5160:10;5139:11;:32::i;:::-;5212:1;5185:29;;:15;:29;;;5181:78;;5216:43;5243:15;5216:26;:43::i;:::-;5181:78;5394:22;5407:2;5411:4;;5394:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:22::i;:::-;5441:1;5431:7;:11;5427:380;;;5737:59;5751:7;5760:1;5763;5766:12;5780:15;5737:13;:59::i;:::-;;5427:380;5831:10;5821:63;;;5843:7;;5852:10;5864:2;5868:15;5821:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4740:1151;;;;;;;;;;:::o;6437:1535:13:-;6522:22;6546:12;1005:3;6578:25;;:5;:25;;;:51;;;;6607:22;6623:5;6607:15;:22::i;:::-;6578:51;6570:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6668:1;6657:8;:12;6649:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6752:8;6738:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6730:31;;6805:19;6845:7;:14;6853:5;6845:14;;;;;;;;;;;;;;;;;;;;;;;;;6838:21;;6869:192;6892:1;6876:18;;:4;:18;;;;:46;;;;;1005:3;6898:24;;:4;:24;;;;6876:46;:72;;;;;6940:8;6926:11;:22;6876:72;6869:192;;;6985:4;6964:5;6970:11;6964:18;;;;;;;;;;;;;:25;;;;;;;;;;;7010:7;:13;7018:4;7010:13;;;;;;;;;;;;;;;;;;;;;;;;;7003:20;;7037:13;;;;;;;6869:192;;;1005:3;7716:24;;:4;:24;;;7712:84;;7763:5;7783:1;7769:11;:15;7763:22;;;;;;;;;;;;;;7756:29;;7712:84;7944:11;7937:5;7930:26;7916:50;;;;;;:::o;18133:228:7:-;18234:1;18204:32;;:6;:18;18211:10;18204:18;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;18196:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18300:1;18256:14;:26;18271:10;18256:26;;;;;;;;;;;;;;;:41;18283:13;18256:41;;;;;;;;;;;:45;;;;18343:10;18316:38;;18328:13;18316:38;;;;;;;;;;18133:228;:::o;21385:478::-;21706:7;21742:113;21764:2;21768:5;21775:4;;21781:9;21792;21803:7;21812:8;21822;21832:14;21848:6;21742:21;:113::i;:::-;21732:124;;;;;;21725:131;;21385:478;;;;;;;;;;;;;:::o;2677:423:13:-;505:17:18;:15;:17::i;:::-;2872:1:13::1;2854:20;;:6;:20;;;;:50;;;;;1005:3;2878:26;;:6;:26;;;;2854:50;2846:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2955:6;2932:29;;:7;:19;2940:10;2932:19;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;2924:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3003:7;:15;3011:6;3003:15;;;;;;;;;;;;;;;;;;;;;;;;;2981:7;:19;2989:10;2981:19;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;3054:1;3028:7;:15;3036:6;3028:15;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;3086:6;3071:22;;;;;;;;;;;;2677:423:::0;;:::o;1962:386:12:-;505:17:18;:15;:17::i;:::-;2046:1:12::1;2029:19;;:5;:19;;;2025:123;;2078:5;2072:30;;;2103:23;2072:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;2064:73;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2025:123;2157:12;1306:66;2172:18;;2157:33;;2292:5;2286:4;2279:19;2335:5;2322:19;;;;;;;;;;;;532:1:18;1962:386:12::0;:::o;4416:796:14:-;505:17:18;:15;:17::i;:::-;4620:1:14::1;4600:22;;:8;:22;;;;:53;;;;;687:3;4626:27;;:8;:27;;;;4600:53;:82;;;;;4677:4;4657:25;;:8;:25;;;;4600:82;4592:100;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4778:1;4750:30;;:6;:16;4757:8;4750:16;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;4742:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4911:1;4891:22;;:8;:22;;;;:53;;;;;687:3;4917:27;;:8;:27;;;;4891:53;4883:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4993:8;4972:29;;:6;:17;4979:9;4972:17;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;4964:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5040:6;:16;5047:8;5040:16;;;;;;;;;;;;;;;;;;;;;;;;;5021:6;:16;5028:8;5021:16;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;5086:8;5066:6;:17;5073:9;5066:17;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;5131:1;5104:6;:16;5111:8;5104:16;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;5161:8;5148:22;;;;;;;;;;;;5196:8;5185:20;;;;;;;;;;;;4416:796:::0;;;:::o;5915:87::-;5960:7;5986:9;;5979:16;;5915:87;:::o;19858:822:7:-;20182:12;20206:18;2725:66;20278:16;;20312:2;20332:5;20365:4;;20355:15;;;;;;;;;;;;;;;;;;;;;;;;;;;20388:9;20415;20442:7;20467:8;20493;20519:14;20551:6;20250:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20227:354;;;;;;20206:375;;20622:4;20615:12;;20636:4;20629:12;;20643:17;:15;:17::i;:::-;20662:10;20598:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20591:82;;;19858:822;;;;;;;;;;;;;:::o;2437:161:11:-;505:17:18;:15;:17::i;:::-;2510:35:11::1;2537:7;2510:26;:35::i;:::-;2583:7;2560:31;;;;;;;;;;;;2437:161:::0;:::o;18901:149:7:-;18949:7;2402:66;18996:25;;19023:12;:10;:12::i;:::-;19037:4;18985:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18975:68;;;;;;18968:75;;18901:149;:::o;3380:697:14:-;505:17:18;:15;:17::i;:::-;3586:10:14::1;3581:1;3568:10;;:14;:28;;3560:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3721:1;3704:19;;:5;:19;;;;:47;;;;;687:3;3727:24;;:5;:24;;;;3704:47;3696:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3800:5;3779:26;;:6;:17;3786:9;3779:17;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;3771:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3845:6;:13;3852:5;3845:13;;;;;;;;;;;;;;;;;;;;;;;;;3825:6;:17;3832:9;3825:17;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;3892:1;3868:6;:13;3875:5;3868:13;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3904:10;;:12;;;;;;;;;;;;;;3944:5;3931:19;;;;;;;;;;;;4031:10;4018:9;;:23;4014:56;;4043:27;4059:10;4043:15;:27::i;:::-;4014:56;3380:697:::0;;;:::o;2205:40:7:-;;;;;;;;;;;;;;;;;;;:::o;248:102:18:-;328:4;306:27;;:10;:27;;;298:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;248:102::o;382:421:27:-;440:7;685:1;680;:6;676:45;;;709:1;702:8;;;;676:45;731:9;747:1;743;:5;731:17;;775:1;770;766;:5;;;;;;:10;758:19;;;;;;795:1;788:8;;;382:421;;;;;:::o;947:744:19:-;1032:7;1041:9;1052;1182:3;1176:4;1172:14;1244:4;1230:12;1226:23;1214:10;1210:40;1204:47;1199:52;;1309:4;1295:12;1291:23;1279:10;1275:40;1269:47;1264:52;;1670:4;1661;1647:12;1643:23;1631:10;1627:40;1621:47;1617:58;1612:63;;1138:547;;;;;;:::o;1335:145:27:-;1393:7;1412:9;1428:1;1424;:5;1412:17;;1452:1;1447;:6;;1439:15;;;;;;1472:1;1465:8;;;1335:145;;;;:::o;3622:594:13:-;3791:12;1005:3;3872:30;;:10;:30;;;;:67;;;;;3937:1;3906:33;;:7;:19;3914:10;3906:19;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;3872:67;3864:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4031:54;4039:2;4043:5;4050:4;4056:9;4067:17;4031:7;:54::i;:::-;4021:64;;4099:7;4095:114;;;4140:10;4113:38;;;;;;;;;;;;4095:114;;;4198:10;4171:38;;;;;;;;;;;;4095:114;3622:594;;;;;;:::o;7433:3556:7:-;7779:12;7803:14;7930:23;7956:388;8031:2;8051:5;8074:4;;8096:9;8123;8182:7;8207:8;8233;8259:14;8325:5;;7956:21;:388::i;:::-;7930:414;;8413:5;;:7;;;;;;;;;;;;;8453:10;8443:21;;;;;;8434:30;;8478:47;8494:6;8502:10;8514;8478:15;:47::i;:::-;7433:3556;8545:13;8561:10;:8;:10::i;:::-;8545:26;;8616:1;8599:19;;:5;:19;;;8595:547;;8644:5;8638:29;;;8729:2;8753:5;8780:4;;8806:9;8837;8904:7;8933:8;8963;8993:14;9067:10;9099;8638:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8595:547;9504:3;9456:45;9496:4;9484:9;:16;9476:2;9470;9458:9;:14;9457:21;;;;;;9456:27;;:45;;;;:::i;:::-;:51;9443:9;:64;;9435:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9630:15;9648:9;9630:27;;9936:83;9944:2;9948:5;9955:4;;9936:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9961:9;9984:1;9972:8;:13;:46;;10009:9;9972:46;;;10001:4;9989:9;:16;9972:46;9936:7;:83::i;:::-;9926:93;;10043:22;10055:9;10043:7;:11;;:22;;;;:::i;:::-;10033:32;;10349:7;:25;;;;10373:1;10360:9;:14;;10349:25;:42;;;;10390:1;10378:8;:13;;10349:42;10341:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10550:15;10598:1;10587:8;:12;10583:128;;;10629:67;10643:7;10652;10661:8;10671;10681:14;10629:13;:67::i;:::-;10619:77;;10583:128;10728:7;10724:108;;;10759:6;10742:33;10767:7;10742:33;;;;;;;;;;;;;;;;;;10724:108;;;10816:6;10799:33;10824:7;10799:33;;;;;;;;;;;;;;;;;;10724:108;7433:3556;;10887:1;10870:19;;:5;:19;;;10866:107;;10915:5;10909:32;;;10942:6;10950:7;10909:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10866:107;7433:3556;;;;;;;;;;;;;;;:::o;1011:1136:14:-;1242:1;1229:9;;:14;1221:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1360:7;:14;1346:10;:28;;1338:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1468:1;1454:10;:15;;1446:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1526:20;687:3;1526:38;;1579:9;1574:450;1598:7;:14;1594:1;:18;1574:450;;;1678:13;1694:7;1702:1;1694:10;;;;;;;;;;;;;;1678:26;;1743:1;1726:19;;:5;:19;;;;:47;;;;;687:3;1749:24;;:5;:24;;;;1726:47;:73;;;;;1794:4;1777:22;;:5;:22;;;;1726:73;:98;;;;;1819:5;1803:21;;:12;:21;;;;1726:98;1718:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:1;1900:27;;:6;:13;1907:5;1900:13;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;1892:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1974:5;1951:6;:20;1958:12;1951:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2008:5;1993:20;;1574:450;1614:3;;;;;;;1574:450;;;;687:3;2033:6;:20;2040:12;2033:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2094:7;:14;2081:10;:27;;;;2130:10;2118:9;:22;;;;1011:1136;;;:::o;689:1423:11:-;1916:4;1897:24;;:7;:24;;;;1889:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1942:12;479:66;1957:29;;1942:44;;2088:7;2082:4;2075:21;2061:45;;:::o;1367:450:13:-;1484:1;1447:39;;:7;:25;1005:3;1447:25;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;1439:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1005:3;1506:7;:25;1005:3;1506:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;1578:1;1564:16;;:2;:16;;;1560:251;;1604:14;1615:2;1604:10;:14::i;:::-;1596:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1722:68;1730:2;1734:1;1737:4;1743:27;1772:17;1722:7;:68::i;:::-;1714:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:251;1367:450;;:::o;11514:821:7:-;11702:15;11782:24;11835:1;11809:28;;:14;:28;;;:66;;11861:14;11809:66;;;11848:9;11809:66;11782:93;;11909:1;11889:22;;:8;:22;;;11885:444;;;12042:73;12078:11;12067:8;:22;:47;;12103:11;12067:47;;;12092:8;12067:47;12042:20;12054:7;12042;:11;;:20;;;;:::i;:::-;:24;;:73;;;;:::i;:::-;12032:83;;12137:8;:13;;:22;12151:7;12137:22;;;;;;;;;;;;;;;;;;;;;;;12129:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11885:444;;;12210:34;12235:8;12210:20;12222:7;12210;:11;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;12200:44;;12266:42;12280:8;12290;12300:7;12266:13;:42::i;:::-;12258:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11885:444;11514:821;;;;;;;;:::o;783:639:10:-;951:12;992:27;979:40;;;;;;;;:9;:40;;;;;;;;;975:441;;;1190:1;1187;1180:4;1174:11;1167:4;1161;1157:15;1153:2;1146:5;1133:59;1122:70;;1104:102;;;1390:1;1387;1380:4;1374:11;1367:4;1361;1357:15;1350:5;1346:2;1339:5;1334:58;1323:69;;1305:101;783:639;;;;;;;:::o;2712:226:12:-;2755:13;2780:12;1306:66;2795:18;;2780:33;;2917:4;2911:11;2902:20;;2888:44;;:::o;1646:105:27:-;1704:7;1735:1;1730;:6;;:14;;1743:1;1730:14;;;1739:1;1730:14;1723:21;;1646:105;;;;:::o;1025:145::-;1083:7;1115:1;1110;:6;;1102:15;;;;;;1127:9;1143:1;1139;:5;1127:17;;1162:1;1155:8;;;1025:145;;;;:::o;8277:246:13:-;8337:4;8353:12;8474:7;8462:20;8454:28;;8515:1;8508:4;:8;8501:15;;;8277:246;;;:::o;763:904:17:-;853:16;942:17;985:10;997:8;1007:6;962:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;942:72;;1352:4;1349:1;1342:4;1336:11;1329:4;1323;1319:15;1316:1;1309:5;1301;1294;1290:17;1285:72;1377:16;1411:1;1406:61;;;;1485:4;1480:102;;;;1636:1;1621:16;;1370:281;;1406:61;1446:7;1431:22;;1406:61;;1480:102;1563:1;1557:8;1550:16;1540:7;1533:15;1530:37;1523:45;1508:60;;1370:281;;1089:572;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"4884200","executionCost":"25789","totalCost":"4909989"},"external":{"":"infinite","VERSION()":"infinite","addOwnerWithThreshold(address,uint256)":"infinite","approveHash(bytes32)":"22977","approvedHashes(address,bytes32)":"1328","changeThreshold(uint256)":"23130","checkNSignatures(bytes32,bytes,bytes,uint256)":"infinite","checkSignatures(bytes32,bytes,bytes)":"infinite","disableModule(address,address)":"45483","domainSeparator()":"525","enableModule(address)":"45427","encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"infinite","execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":"infinite","execTransactionFromModule(address,uint256,bytes,uint8)":"infinite","execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":"infinite","getChainId()":"293","getModulesPaginated(address,uint256)":"infinite","getOwners()":"infinite","getStorageAt(uint256,uint256)":"infinite","getThreshold()":"1102","getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"infinite","isModuleEnabled(address)":"1396","isOwner(address)":"1351","nonce()":"1051","removeOwner(address,address,uint256)":"infinite","setFallbackHandler(address)":"21587","setGuard(address)":"infinite","setup(address[],uint256,address,bytes,address,address,uint256,address)":"infinite","signedMessages(bytes32)":"1231","simulateAndRevert(address,bytes)":"infinite","swapOwner(address,address,address)":"68682"}},"methodIdentifiers":{"VERSION()":"ffa1ad74","addOwnerWithThreshold(address,uint256)":"0d582f13","approveHash(bytes32)":"d4d9bdcd","approvedHashes(address,bytes32)":"7d832974","changeThreshold(uint256)":"694e80c3","checkNSignatures(bytes32,bytes,bytes,uint256)":"12fb68e0","checkSignatures(bytes32,bytes,bytes)":"934f3a11","disableModule(address,address)":"e009cfde","domainSeparator()":"f698da25","enableModule(address)":"610b5925","encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"e86637db","execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":"6a761202","execTransactionFromModule(address,uint256,bytes,uint8)":"468721a7","execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":"5229073f","getChainId()":"3408e470","getModulesPaginated(address,uint256)":"cc2f8452","getOwners()":"a0e67e2b","getStorageAt(uint256,uint256)":"5624b25b","getThreshold()":"e75235b8","getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":"d8d11f78","isModuleEnabled(address)":"2d9ad53d","isOwner(address)":"2f54bf6e","nonce()":"affed0e0","removeOwner(address,address,uint256)":"f8dc5dd9","setFallbackHandler(address)":"f08a0323","setGuard(address)":"e19a9dd9","setup(address[],uint256,address,bytes,address,address,uint256,address)":"b63e800d","signedMessages(bytes32)":"5ae6bd37","simulateAndRevert(address,bytes)":"b4faba09","swapOwner(address,address,address)":"e318b52b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AddedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"approvedHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ApproveHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"ChangedFallbackHandler\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"ChangedGuard\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"ChangedThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"DisabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"EnabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"RemovedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"SafeModuleTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"additionalInfo\",\"type\":\"bytes\"}],\"name\":\"SafeMultiSigTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initializer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"}],\"name\":\"SafeSetup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignMsg\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"addOwnerWithThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashToApprove\",\"type\":\"bytes32\"}],\"name\":\"approveHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"approvedHashes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"changeThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredSignatures\",\"type\":\"uint256\"}],\"name\":\"checkNSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"checkSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"disableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"encodeTransactionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"execTransaction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModuleReturnData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"start\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getModulesPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"getTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"isModuleEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"setGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"paymentReceiver\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"signedMessages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"swapOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Stefan George - @Georgi87Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"addOwnerWithThreshold(address,uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\",\"owner\":\"New owner address.\"}},\"approveHash(bytes32)\":{\"details\":\"This can be used with a pre-approved hash transaction signature.      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\",\"params\":{\"hashToApprove\":\"The hash to mark as approved for signatures that are verified by this contract.\"}},\"changeThreshold(uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\"}},\"checkNSignatures(bytes32,bytes,bytes,uint256)\":{\"details\":\"Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\",\"params\":{\"data\":\"That should be signed (this is passed to an external validator contract)\",\"dataHash\":\"Hash of the data (could be either a message hash or transaction hash)\",\"requiredSignatures\":\"Amount of required valid signatures.\",\"signatures\":\"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\"}},\"checkSignatures(bytes32,bytes,bytes)\":{\"params\":{\"data\":\"That should be signed (this is passed to an external validator contract)\",\"dataHash\":\"Hash of the data (could be either a message hash or transaction hash)\",\"signatures\":\"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\"}},\"disableModule(address,address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be removed.\",\"prevModule\":\"Previous module in the modules linked list.\"}},\"domainSeparator()\":{\"details\":\"Returns the domain separator for this contract, as defined in the EIP-712 standard.\",\"returns\":{\"_0\":\"bytes32 The domain separator hash.\"}},\"enableModule(address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be whitelisted.\"}},\"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"params\":{\"_nonce\":\"Transaction nonce.\",\"baseGas\":\"Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\",\"data\":\"Data payload.\",\"gasPrice\":\"Maximum gas price that should be used for this transaction.\",\"gasToken\":\"Token address (or 0 if ETH) that is used for the payment.\",\"operation\":\"Operation type.\",\"refundReceiver\":\"Address of receiver of gas payment (or 0 if tx.origin).\",\"safeTxGas\":\"Gas that should be used for the safe transaction.\",\"to\":\"Destination address.\",\"value\":\"Ether value.\"},\"returns\":{\"_0\":\"Transaction hash bytes.\"}},\"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)\":{\"details\":\"The fees are always transferred, even if the user transaction fails.      This method doesn't perform any sanity check of the transaction, such as:      - if the contract at `to` address has code or not      - if the `gasToken` is a contract or not      It is the responsibility of the caller to perform such checks.\",\"params\":{\"baseGas\":\"Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\",\"data\":\"Data payload of Safe transaction.\",\"gasPrice\":\"Gas price that should be used for the payment calculation.\",\"gasToken\":\"Token address (or 0 if ETH) that is used for the payment.\",\"operation\":\"Operation type of Safe transaction.\",\"refundReceiver\":\"Address of receiver of gas payment (or 0 if tx.origin).\",\"safeTxGas\":\"Gas that should be used for the Safe transaction.\",\"signatures\":\"Signature data that should be verified.                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\",\"to\":\"Destination address of Safe transaction.\",\"value\":\"Ether value of Safe transaction.\"},\"returns\":{\"_0\":\"Boolean indicating transaction's success.\"}},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"details\":\"Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\",\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"returnData\":\"Data returned by the call.\",\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"getChainId()\":{\"returns\":{\"_0\":\"The ID of the current chain as a uint256.\"}},\"getModulesPaginated(address,uint256)\":{\"params\":{\"pageSize\":\"Maximum number of modules that should be returned. Has to be > 0\",\"start\":\"Start of the page. Has to be a module or start pointer (0x1 address)\"},\"returns\":{\"array\":\"Array of modules.\",\"next\":\"Start of the next page.\"}},\"getOwners()\":{\"returns\":{\"_0\":\"Array of Safe owners.\"}},\"getStorageAt(uint256,uint256)\":{\"params\":{\"length\":\"- the number of words (32 bytes) of data to read\",\"offset\":\"- the offset in the current contract's storage in words to start reading from\"},\"returns\":{\"_0\":\"the bytes that were read.\"}},\"getThreshold()\":{\"returns\":{\"_0\":\"Threshold number.\"}},\"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"params\":{\"_nonce\":\"Transaction nonce.\",\"baseGas\":\"Gas costs for data used to trigger the safe transaction.\",\"data\":\"Data payload.\",\"gasPrice\":\"Maximum gas price that should be used for this transaction.\",\"gasToken\":\"Token address (or 0 if ETH) that is used for the payment.\",\"operation\":\"Operation type.\",\"refundReceiver\":\"Address of receiver of gas payment (or 0 if tx.origin).\",\"safeTxGas\":\"Fas that should be used for the safe transaction.\",\"to\":\"Destination address.\",\"value\":\"Ether value.\"},\"returns\":{\"_0\":\"Transaction hash.\"}},\"isModuleEnabled(address)\":{\"returns\":{\"_0\":\"True if the module is enabled\"}},\"isOwner(address)\":{\"returns\":{\"_0\":\"Boolean if owner is an owner of the Safe.\"}},\"removeOwner(address,address,uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\",\"owner\":\"Owner address to be removed.\",\"prevOwner\":\"Owner that pointed to the owner to be removed in the linked list\"}},\"setFallbackHandler(address)\":{\"details\":\"Only fallback calls without value and with data will be forwarded.      This can only be done via a Safe transaction.      Cannot be set to the Safe itself.\",\"params\":{\"handler\":\"contract to handle fallback calls.\"}},\"setGuard(address)\":{\"details\":\"Set a guard that checks transactions before execution      This can only be done via a Safe transaction.      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,        a broken guard can cause a denial of service for the Safe. Make sure to carefully        audit the guard code and design recovery mechanisms.\",\"params\":{\"guard\":\"The address of the guard to be used or the 0 address to disable the guard\"}},\"setup(address[],uint256,address,bytes,address,address,uint256,address)\":{\"details\":\"This method can only be called once.      If a proxy was created without setting up, anyone can call setup and claim the proxy.\",\"params\":{\"_owners\":\"List of Safe owners.\",\"_threshold\":\"Number of required confirmations for a Safe transaction.\",\"data\":\"Data payload for optional delegate call.\",\"fallbackHandler\":\"Handler for fallback calls to this contract\",\"payment\":\"Value that should be paid\",\"paymentReceiver\":\"Address that should receive the payment (or 0 if tx.origin)\",\"paymentToken\":\"Token that should be used for the payment (0 is ETH)\",\"to\":\"Contract address for optional delegate call.\"}},\"simulateAndRevert(address,bytes)\":{\"details\":\"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.\",\"params\":{\"calldataPayload\":\"Calldata that should be sent to the target contract (encoded method name and arguments).\",\"targetContract\":\"Address of the contract containing the code to execute.\"}},\"swapOwner(address,address,address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"newOwner\":\"New owner address.\",\"oldOwner\":\"Owner address to be replaced.\",\"prevOwner\":\"Owner that pointed to the owner to be replaced in the linked list\"}}},\"title\":\"SafeL2 - An implementation of the Safe contract that emits additional events on transaction executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addOwnerWithThreshold(address,uint256)\":{\"notice\":\"Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\"},\"approveHash(bytes32)\":{\"notice\":\"Marks hash `hashToApprove` as approved.\"},\"changeThreshold(uint256)\":{\"notice\":\"Changes the threshold of the Safe to `_threshold`.\"},\"checkNSignatures(bytes32,bytes,bytes,uint256)\":{\"notice\":\"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\"},\"checkSignatures(bytes32,bytes,bytes)\":{\"notice\":\"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\"},\"disableModule(address,address)\":{\"notice\":\"Disables the module `module` for the Safe.\"},\"enableModule(address)\":{\"notice\":\"Enables the module `module` for the Safe.\"},\"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"notice\":\"Returns the pre-image of the transaction hash (see getTransactionHash).\"},\"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)\":{\"notice\":\"Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\"},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\"},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\"},\"getChainId()\":{\"notice\":\"Returns the ID of the chain the contract is currently deployed on.\"},\"getModulesPaginated(address,uint256)\":{\"notice\":\"Returns an array of modules.         If all entries fit into a single page, the next pointer will be 0x1.         If another page is present, next will be the last element of the returned array.\"},\"getOwners()\":{\"notice\":\"Returns a list of Safe owners.\"},\"getStorageAt(uint256,uint256)\":{\"notice\":\"Reads `length` bytes of storage in the currents contract\"},\"getThreshold()\":{\"notice\":\"Returns the number of required confirmations for a Safe transaction aka the threshold.\"},\"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)\":{\"notice\":\"Returns transaction hash to be signed by owners.\"},\"isModuleEnabled(address)\":{\"notice\":\"Returns if an module is enabled\"},\"isOwner(address)\":{\"notice\":\"Returns if `owner` is an owner of the Safe.\"},\"removeOwner(address,address,uint256)\":{\"notice\":\"Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\"},\"setFallbackHandler(address)\":{\"notice\":\"Set Fallback Handler to `handler` for the Safe.\"},\"setGuard(address)\":{\"notice\":\"Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\"},\"setup(address[],uint256,address,bytes,address,address,uint256,address)\":{\"notice\":\"Sets an initial storage of the Safe contract.\"},\"swapOwner(address,address,address)\":{\"notice\":\"Replaces the owner `oldOwner` in the Safe with `newOwner`.\"}},\"notice\":\"For a more complete description of the Safe contract, please refer to the main Safe contract `Safe.sol`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SafeL2.sol\":\"SafeL2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/SafeL2.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./Safe.sol\\\";\\n\\n/**\\n * @title SafeL2 - An implementation of the Safe contract that emits additional events on transaction executions.\\n * @notice For a more complete description of the Safe contract, please refer to the main Safe contract `Safe.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeL2 is Safe {\\n    event SafeMultiSigTransaction(\\n        address to,\\n        uint256 value,\\n        bytes data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes signatures,\\n        // We combine nonce, sender and threshold into one to avoid stack too deep\\n        // Dev note: additionalInfo should not contain `bytes`, as this complicates decoding\\n        bytes additionalInfo\\n    );\\n\\n    event SafeModuleTransaction(address module, address to, uint256 value, bytes data, Enum.Operation operation);\\n\\n    // @inheritdoc Safe\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable override returns (bool) {\\n        bytes memory additionalInfo;\\n        {\\n            additionalInfo = abi.encode(nonce, msg.sender, threshold);\\n        }\\n        emit SafeMultiSigTransaction(\\n            to,\\n            value,\\n            data,\\n            operation,\\n            safeTxGas,\\n            baseGas,\\n            gasPrice,\\n            gasToken,\\n            refundReceiver,\\n            signatures,\\n            additionalInfo\\n        );\\n        return super.execTransaction(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures);\\n    }\\n\\n    // @inheritdoc Safe\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public override returns (bool success) {\\n        emit SafeModuleTransaction(msg.sender, to, value, data, operation);\\n        success = super.execTransactionFromModule(to, value, data, operation);\\n    }\\n}\\n\",\"keccak256\":\"0x0243b259b9c4e0de46b6ec1508f64a871c4a21032ffe5f8975173870721b5e3d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3817,"contract":"contracts/SafeL2.sol:SafeL2","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":2809,"contract":"contracts/SafeL2.sol:SafeL2","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":3225,"contract":"contracts/SafeL2.sol:SafeL2","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":3227,"contract":"contracts/SafeL2.sol:SafeL2","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":3229,"contract":"contracts/SafeL2.sol:SafeL2","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":1496,"contract":"contracts/SafeL2.sol:SafeL2","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":1498,"contract":"contracts/SafeL2.sol:SafeL2","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":1502,"contract":"contracts/SafeL2.sol:SafeL2","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":1508,"contract":"contracts/SafeL2.sol:SafeL2","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"addOwnerWithThreshold(address,uint256)":{"notice":"Adds the owner `owner` to the Safe and updates the threshold to `_threshold`."},"approveHash(bytes32)":{"notice":"Marks hash `hashToApprove` as approved."},"changeThreshold(uint256)":{"notice":"Changes the threshold of the Safe to `_threshold`."},"checkNSignatures(bytes32,bytes,bytes,uint256)":{"notice":"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise."},"checkSignatures(bytes32,bytes,bytes)":{"notice":"Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise."},"disableModule(address,address)":{"notice":"Disables the module `module` for the Safe."},"enableModule(address)":{"notice":"Enables the module `module` for the Safe."},"encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"notice":"Returns the pre-image of the transaction hash (see getTransactionHash)."},"execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)":{"notice":"Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`."},"execTransactionFromModule(address,uint256,bytes,uint8)":{"notice":"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)"},"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":{"notice":"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data"},"getChainId()":{"notice":"Returns the ID of the chain the contract is currently deployed on."},"getModulesPaginated(address,uint256)":{"notice":"Returns an array of modules.         If all entries fit into a single page, the next pointer will be 0x1.         If another page is present, next will be the last element of the returned array."},"getOwners()":{"notice":"Returns a list of Safe owners."},"getStorageAt(uint256,uint256)":{"notice":"Reads `length` bytes of storage in the currents contract"},"getThreshold()":{"notice":"Returns the number of required confirmations for a Safe transaction aka the threshold."},"getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)":{"notice":"Returns transaction hash to be signed by owners."},"isModuleEnabled(address)":{"notice":"Returns if an module is enabled"},"isOwner(address)":{"notice":"Returns if `owner` is an owner of the Safe."},"removeOwner(address,address,uint256)":{"notice":"Removes the owner `owner` from the Safe and updates the threshold to `_threshold`."},"setFallbackHandler(address)":{"notice":"Set Fallback Handler to `handler` for the Safe."},"setGuard(address)":{"notice":"Set Transaction Guard `guard` for the Safe. Make sure you trust the guard."},"setup(address[],uint256,address,bytes,address,address,uint256,address)":{"notice":"Sets an initial storage of the Safe contract."},"swapOwner(address,address,address)":{"notice":"Replaces the owner `oldOwner` in the Safe with `newOwner`."}},"notice":"For a more complete description of the Safe contract, please refer to the main Safe contract `Safe.sol`.","version":1}}},"contracts/accessors/SimulateTxAccessor.sol":{"SimulateTxAccessor":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"simulate","outputs":[{"internalType":"uint256","name":"estimate","type":"uint256"},{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"simulate(address,uint256,bytes,uint8)":{"details":"Executes the specified operation {Call, DelegateCall} and returns operation-specific data.      Has to be called via delegatecall.      This returns the data equal to `abi.encode(uint256(etimate), bool(success), bytes(returnData))`.      Specifically, the returndata will be:      `estimate:uint256 || success:bool || returnData.length:uint256 || returnData:bytes`.","params":{"data":"Data payload.","operation":"Operation type {Call, DelegateCall}.","to":"Destination address .","value":"Native token value."},"returns":{"estimate":"Gas used.","returnData":"Return data.","success":"Success boolean value."}}},"title":"Simulate Transaction Accessor.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60a060405234801561001057600080fd5b503073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060805160601c6103526100656000398061017052506103526000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631c5fb21114610030575b600080fd5b6100de6004803603608081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561008d57600080fd5b82018360208201111561009f57600080fd5b803590602001918460018302840111640100000000831117156100c157600080fd5b9091929391929390803560ff169060200190929190505050610169565b60405180848152602001831515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561012c578082015181840152602081019050610111565b50505050905090810190601f1680156101595780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b60008060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610213576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806102e46039913960400191505060405180910390fd5b60005a9050610269898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050885a610297565b92505a8103935060405160203d0181016040523d81523d6000602083013e8092505050955095509592505050565b60006001808111156102a557fe5b8360018111156102b157fe5b14156102ca576000808551602087018986f490506102da565b600080855160208701888a87f190505b9594505050505056fe53696d756c61746554784163636573736f722073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca264697066735822122066ec514c62d72e456c1ac0997627506854acd03fceabe3c0532054bd50122c9064736f6c63430007060033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0x352 PUSH2 0x65 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x170 MSTORE POP PUSH2 0x352 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 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1C5FB211 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x169 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD 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 0x12C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x111 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x159 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x213 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x39 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E4 PUSH1 0x39 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 GAS SWAP1 POP PUSH2 0x269 DUP10 DUP10 DUP10 DUP10 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP9 GAS PUSH2 0x297 JUMP JUMPDEST SWAP3 POP GAS DUP2 SUB SWAP4 POP PUSH1 0x40 MLOAD PUSH1 0x20 RETURNDATASIZE ADD DUP2 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP2 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY DUP1 SWAP3 POP POP POP SWAP6 POP SWAP6 POP SWAP6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x2A5 JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2B1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP10 DUP7 DELEGATECALL SWAP1 POP PUSH2 0x2DA JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP9 DUP11 DUP8 CALL SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID MSTORE8 PUSH10 0x6D756C61746554784163 PUSH4 0x6573736F PUSH19 0x2073686F756C64206F6E6C792062652063616C PUSH13 0x6564207669612064656C656761 PUSH21 0x6563616C6CA264697066735822122066EC514C62D7 0x2E GASLIMIT PUSH13 0x1AC0997627506854ACD03FCEAB 0xE3 0xC0 MSTORE8 KECCAK256 SLOAD 0xBD POP SLT 0x2C SWAP1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"274:2358:9:-:0;;;370:64;;;;;;;;;;422:4;394:33;;;;;;;;;;;;274:2358;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"2479":[{"length":32,"start":368}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c80631c5fb21114610030575b600080fd5b6100de6004803603608081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561008d57600080fd5b82018360208201111561009f57600080fd5b803590602001918460018302840111640100000000831117156100c157600080fd5b9091929391929390803560ff169060200190929190505050610169565b60405180848152602001831515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561012c578082015181840152602081019050610111565b50505050905090810190601f1680156101595780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b60008060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610213576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806102e46039913960400191505060405180910390fd5b60005a9050610269898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050885a610297565b92505a8103935060405160203d0181016040523d81523d6000602083013e8092505050955095509592505050565b60006001808111156102a557fe5b8360018111156102b157fe5b14156102ca576000808551602087018986f490506102da565b600080855160208701888a87f190505b9594505050505056fe53696d756c61746554784163636573736f722073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca264697066735822122066ec514c62d72e456c1ac0997627506854acd03fceabe3c0532054bd50122c9064736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1C5FB211 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x169 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD 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 0x12C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x111 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x159 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x213 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x39 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E4 PUSH1 0x39 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 GAS SWAP1 POP PUSH2 0x269 DUP10 DUP10 DUP10 DUP10 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP9 GAS PUSH2 0x297 JUMP JUMPDEST SWAP3 POP GAS DUP2 SUB SWAP4 POP PUSH1 0x40 MLOAD PUSH1 0x20 RETURNDATASIZE ADD DUP2 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP2 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY DUP1 SWAP3 POP POP POP SWAP6 POP SWAP6 POP SWAP6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x2A5 JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2B1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP10 DUP7 DELEGATECALL SWAP1 POP PUSH2 0x2DA JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 MLOAD PUSH1 0x20 DUP8 ADD DUP9 DUP11 DUP8 CALL SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID MSTORE8 PUSH10 0x6D756C61746554784163 PUSH4 0x6573736F PUSH19 0x2073686F756C64206F6E6C792062652063616C PUSH13 0x6564207669612064656C656761 PUSH21 0x6563616C6CA264697066735822122066EC514C62D7 0x2E GASLIMIT PUSH13 0x1AC0997627506854ACD03FCEAB 0xE3 0xC0 MSTORE8 KECCAK256 SLOAD 0xBD POP SLT 0x2C SWAP1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"274:2358:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:1043;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1752:16;1770:12;1784:23;663:17;646:34;;654:4;646:34;;;;638:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:16:::1;1838:9;1819:28;;1867:46;1875:2;1879:5;1886:4;;1867:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1892:9;1903;1867:7;:46::i;:::-;1857:56;;1945:9;1934:8;:20;1923:31;;2101:4;2095:11;2343:4;2325:16;2321:27;2316:3;2312:37;2306:4;2299:51;2405:16;2400:3;2393:29;2499:16;2496:1;2489:4;2484:3;2480:14;2465:51;2611:3;2597:17;;2029:595;;1587:1043:::0;;;;;;;;;:::o;783:639:10:-;951:12;992:27;979:40;;;;;;;;:9;:40;;;;;;;;;975:441;;;1190:1;1187;1180:4;1174:11;1167:4;1161;1157:15;1153:2;1146:5;1133:59;1122:70;;1104:102;;;1390:1;1387;1380:4;1374:11;1367:4;1361;1357:15;1350:5;1346:2;1339:5;1334:58;1323:69;;1305:101;783:639;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"170000","executionCost":"infinite","totalCost":"infinite"},"external":{"simulate(address,uint256,bytes,uint8)":"infinite"}},"methodIdentifiers":{"simulate(address,uint256,bytes,uint8)":"1c5fb211"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"simulate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"estimate\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"simulate(address,uint256,bytes,uint8)\":{\"details\":\"Executes the specified operation {Call, DelegateCall} and returns operation-specific data.      Has to be called via delegatecall.      This returns the data equal to `abi.encode(uint256(etimate), bool(success), bytes(returnData))`.      Specifically, the returndata will be:      `estimate:uint256 || success:bool || returnData.length:uint256 || returnData:bytes`.\",\"params\":{\"data\":\"Data payload.\",\"operation\":\"Operation type {Call, DelegateCall}.\",\"to\":\"Destination address .\",\"value\":\"Native token value.\"},\"returns\":{\"estimate\":\"Gas used.\",\"returnData\":\"Return data.\",\"success\":\"Success boolean value.\"}}},\"title\":\"Simulate Transaction Accessor.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"simulate(address,uint256,bytes,uint8)\":{\"notice\":\"Simulates a Safe transaction and returns the used gas, success boolean and the return data.\"}},\"notice\":\"Can be used with StorageAccessible to simulate Safe transactions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/accessors/SimulateTxAccessor.sol\":\"SimulateTxAccessor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/accessors/SimulateTxAccessor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../base/Executor.sol\\\";\\n\\n/**\\n * @title Simulate Transaction Accessor.\\n * @notice Can be used with StorageAccessible to simulate Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SimulateTxAccessor is Executor {\\n    address private immutable accessorSingleton;\\n\\n    constructor() {\\n        accessorSingleton = address(this);\\n    }\\n\\n    /**\\n     * @notice Modifier to make a function callable via delegatecall only.\\n     * If the function is called via a regular call, it will revert.\\n     */\\n    modifier onlyDelegateCall() {\\n        require(address(this) != accessorSingleton, \\\"SimulateTxAccessor should only be called via delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Simulates a Safe transaction and returns the used gas, success boolean and the return data.\\n     * @dev Executes the specified operation {Call, DelegateCall} and returns operation-specific data.\\n     *      Has to be called via delegatecall.\\n     *      This returns the data equal to `abi.encode(uint256(etimate), bool(success), bytes(returnData))`.\\n     *      Specifically, the returndata will be:\\n     *      `estimate:uint256 || success:bool || returnData.length:uint256 || returnData:bytes`.\\n     * @param to Destination address .\\n     * @param value Native token value.\\n     * @param data Data payload.\\n     * @param operation Operation type {Call, DelegateCall}.\\n     * @return estimate Gas used.\\n     * @return success Success boolean value.\\n     * @return returnData Return data.\\n     */\\n    function simulate(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation\\n    ) external onlyDelegateCall returns (uint256 estimate, bool success, bytes memory returnData) {\\n        uint256 startGas = gasleft();\\n        success = execute(to, value, data, operation, gasleft());\\n        estimate = startGas - gasleft();\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xe4fe8a29926b8a362aab8344d95ed8315fed39113ddccfdbd6341fcf93972642\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"simulate(address,uint256,bytes,uint8)":{"notice":"Simulates a Safe transaction and returns the used gas, success boolean and the return data."}},"notice":"Can be used with StorageAccessible to simulate Safe transactions.","version":1}}},"contracts/base/Executor.sol":{"Executor":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"Executor - A contract that can execute transactions","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Executor - A contract that can execute transactions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/Executor.sol\":\"Executor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/base/FallbackManager.sol":{"FallbackManager":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"handler","type":"address"}],"name":"ChangedFallbackHandler","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"address","name":"handler","type":"address"}],"name":"setFallbackHandler","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"setFallbackHandler(address)":{"details":"Only fallback calls without value and with data will be forwarded.      This can only be done via a Safe transaction.      Cannot be set to the Safe itself.","params":{"handler":"contract to handle fallback calls."}}},"title":"Fallback Manager - A contract managing fallback calls made to this contract","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"setFallbackHandler(address)":"f08a0323"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"ChangedFallbackHandler\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"setFallbackHandler(address)\":{\"details\":\"Only fallback calls without value and with data will be forwarded.      This can only be done via a Safe transaction.      Cannot be set to the Safe itself.\",\"params\":{\"handler\":\"contract to handle fallback calls.\"}}},\"title\":\"Fallback Manager - A contract managing fallback calls made to this contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setFallbackHandler(address)\":{\"notice\":\"Set Fallback Handler to `handler` for the Safe.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/FallbackManager.sol\":\"FallbackManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"setFallbackHandler(address)":{"notice":"Set Fallback Handler to `handler` for the Safe."}},"version":1}}},"contracts/base/GuardManager.sol":{"BaseGuard":{"abi":[{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"bool","name":"success","type":"bool"}],"name":"checkAfterExecution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address payable","name":"refundReceiver","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"checkTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"checkAfterExecution(bytes32,bool)":"93271368","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"75f0bb52","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"checkAfterExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"checkTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/GuardManager.sol\":\"BaseGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"Guard":{"abi":[{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"bool","name":"success","type":"bool"}],"name":"checkAfterExecution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address payable","name":"refundReceiver","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"checkTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"checkAfterExecution(bytes32,bool)":"93271368","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"75f0bb52","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"checkAfterExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"checkTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/GuardManager.sol\":\"Guard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"GuardManager":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"guard","type":"address"}],"name":"ChangedGuard","type":"event"},{"inputs":[{"internalType":"address","name":"guard","type":"address"}],"name":"setGuard","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"setGuard(address)":{"details":"Set a guard that checks transactions before execution      This can only be done via a Safe transaction.      ⚠️ IMPORTANT: Since a guard has full power to block Safe transaction execution,        a broken guard can cause a denial of service for the Safe. Make sure to carefully        audit the guard code and design recovery mechanisms.","params":{"guard":"The address of the guard to be used or the 0 address to disable the guard"}}},"title":"Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"setGuard(address)":"e19a9dd9"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"ChangedGuard\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"setGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"setGuard(address)\":{\"details\":\"Set a guard that checks transactions before execution      This can only be done via a Safe transaction.      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,        a broken guard can cause a denial of service for the Safe. Make sure to carefully        audit the guard code and design recovery mechanisms.\",\"params\":{\"guard\":\"The address of the guard to be used or the 0 address to disable the guard\"}}},\"title\":\"Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setGuard(address)\":{\"notice\":\"Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/GuardManager.sol\":\"GuardManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"setGuard(address)":{"notice":"Set Transaction Guard `guard` for the Safe. Make sure you trust the guard."}},"version":1}}},"contracts/base/ModuleManager.sol":{"ModuleManager":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"DisabledModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"EnabledModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"ExecutionFromModuleFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"ExecutionFromModuleSuccess","type":"event"},{"inputs":[{"internalType":"address","name":"prevModule","type":"address"},{"internalType":"address","name":"module","type":"address"}],"name":"disableModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"module","type":"address"}],"name":"enableModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"execTransactionFromModule","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"}],"name":"execTransactionFromModuleReturnData","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"start","type":"address"},{"internalType":"uint256","name":"pageSize","type":"uint256"}],"name":"getModulesPaginated","outputs":[{"internalType":"address[]","name":"array","type":"address[]"},{"internalType":"address","name":"next","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"module","type":"address"}],"name":"isModuleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Stefan George - @Georgi87Richard Meissner - @rmeissner","kind":"dev","methods":{"disableModule(address,address)":{"details":"This can only be done via a Safe transaction.","params":{"module":"Module to be removed.","prevModule":"Previous module in the modules linked list."}},"enableModule(address)":{"details":"This can only be done via a Safe transaction.","params":{"module":"Module to be whitelisted."}},"execTransactionFromModule(address,uint256,bytes,uint8)":{"details":"Function is virtual to allow overriding for L2 singleton to emit an event for indexing.","params":{"data":"Data payload of module transaction.","operation":"Operation type of module transaction.","to":"Destination address of module transaction.","value":"Ether value of module transaction."},"returns":{"success":"Boolean flag indicating if the call succeeded."}},"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":{"params":{"data":"Data payload of module transaction.","operation":"Operation type of module transaction.","to":"Destination address of module transaction.","value":"Ether value of module transaction."},"returns":{"returnData":"Data returned by the call.","success":"Boolean flag indicating if the call succeeded."}},"getModulesPaginated(address,uint256)":{"params":{"pageSize":"Maximum number of modules that should be returned. Has to be > 0","start":"Start of the page. Has to be a module or start pointer (0x1 address)"},"returns":{"array":"Array of modules.","next":"Start of the next page."}},"isModuleEnabled(address)":{"returns":{"_0":"True if the module is enabled"}}},"title":"Module Manager - A contract managing Safe modules","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"disableModule(address,address)":"e009cfde","enableModule(address)":"610b5925","execTransactionFromModule(address,uint256,bytes,uint8)":"468721a7","execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":"5229073f","getModulesPaginated(address,uint256)":"cc2f8452","isModuleEnabled(address)":"2d9ad53d"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"DisabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"EnabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleSuccess\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"disableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModuleReturnData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"start\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getModulesPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"isModuleEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Stefan George - @Georgi87Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"disableModule(address,address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be removed.\",\"prevModule\":\"Previous module in the modules linked list.\"}},\"enableModule(address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be whitelisted.\"}},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"details\":\"Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\",\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"returnData\":\"Data returned by the call.\",\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"getModulesPaginated(address,uint256)\":{\"params\":{\"pageSize\":\"Maximum number of modules that should be returned. Has to be > 0\",\"start\":\"Start of the page. Has to be a module or start pointer (0x1 address)\"},\"returns\":{\"array\":\"Array of modules.\",\"next\":\"Start of the next page.\"}},\"isModuleEnabled(address)\":{\"returns\":{\"_0\":\"True if the module is enabled\"}}},\"title\":\"Module Manager - A contract managing Safe modules\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableModule(address,address)\":{\"notice\":\"Disables the module `module` for the Safe.\"},\"enableModule(address)\":{\"notice\":\"Enables the module `module` for the Safe.\"},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\"},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\"},\"getModulesPaginated(address,uint256)\":{\"notice\":\"Returns an array of modules.         If all entries fit into a single page, the next pointer will be 0x1.         If another page is present, next will be the last element of the returned array.\"},\"isModuleEnabled(address)\":{\"notice\":\"Returns if an module is enabled\"}},\"notice\":\"Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners. \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions,  so only trusted and audited modules should be added to a Safe. A malicious module can completely takeover a Safe.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/ModuleManager.sol\":\"ModuleManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2809,"contract":"contracts/base/ModuleManager.sol:ModuleManager","label":"modules","offset":0,"slot":"0","type":"t_mapping(t_address,t_address)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"}}},"userdoc":{"kind":"user","methods":{"disableModule(address,address)":{"notice":"Disables the module `module` for the Safe."},"enableModule(address)":{"notice":"Enables the module `module` for the Safe."},"execTransactionFromModule(address,uint256,bytes,uint8)":{"notice":"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)"},"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)":{"notice":"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data"},"getModulesPaginated(address,uint256)":{"notice":"Returns an array of modules.         If all entries fit into a single page, the next pointer will be 0x1.         If another page is present, next will be the last element of the returned array."},"isModuleEnabled(address)":{"notice":"Returns if an module is enabled"}},"notice":"Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners. ⚠️ WARNING: Modules are a security risk since they can execute arbitrary transactions,  so only trusted and audited modules should be added to a Safe. A malicious module can completely takeover a Safe.","version":1}}},"contracts/base/OwnerManager.sol":{"OwnerManager":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"AddedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"ChangedThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"RemovedOwner","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"addOwnerWithThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"changeThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"oldOwner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"swapOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Stefan George - @Georgi87Richard Meissner - @rmeissner","details":"Uses a linked list to store the owners because the code generate by the solidity compiler      is more efficient than using a dynamic array.","kind":"dev","methods":{"addOwnerWithThreshold(address,uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold.","owner":"New owner address."}},"changeThreshold(uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold."}},"getOwners()":{"returns":{"_0":"Array of Safe owners."}},"getThreshold()":{"returns":{"_0":"Threshold number."}},"isOwner(address)":{"returns":{"_0":"Boolean if owner is an owner of the Safe."}},"removeOwner(address,address,uint256)":{"details":"This can only be done via a Safe transaction.","params":{"_threshold":"New threshold.","owner":"Owner address to be removed.","prevOwner":"Owner that pointed to the owner to be removed in the linked list"}},"swapOwner(address,address,address)":{"details":"This can only be done via a Safe transaction.","params":{"newOwner":"New owner address.","oldOwner":"Owner address to be replaced.","prevOwner":"Owner that pointed to the owner to be replaced in the linked list"}}},"title":"OwnerManager - Manages Safe owners and a threshold to authorize transactions.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"addOwnerWithThreshold(address,uint256)":"0d582f13","changeThreshold(uint256)":"694e80c3","getOwners()":"a0e67e2b","getThreshold()":"e75235b8","isOwner(address)":"2f54bf6e","removeOwner(address,address,uint256)":"f8dc5dd9","swapOwner(address,address,address)":"e318b52b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AddedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"ChangedThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"RemovedOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"addOwnerWithThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"changeThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"swapOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Stefan George - @Georgi87Richard Meissner - @rmeissner\",\"details\":\"Uses a linked list to store the owners because the code generate by the solidity compiler      is more efficient than using a dynamic array.\",\"kind\":\"dev\",\"methods\":{\"addOwnerWithThreshold(address,uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\",\"owner\":\"New owner address.\"}},\"changeThreshold(uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\"}},\"getOwners()\":{\"returns\":{\"_0\":\"Array of Safe owners.\"}},\"getThreshold()\":{\"returns\":{\"_0\":\"Threshold number.\"}},\"isOwner(address)\":{\"returns\":{\"_0\":\"Boolean if owner is an owner of the Safe.\"}},\"removeOwner(address,address,uint256)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"_threshold\":\"New threshold.\",\"owner\":\"Owner address to be removed.\",\"prevOwner\":\"Owner that pointed to the owner to be removed in the linked list\"}},\"swapOwner(address,address,address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"newOwner\":\"New owner address.\",\"oldOwner\":\"Owner address to be replaced.\",\"prevOwner\":\"Owner that pointed to the owner to be replaced in the linked list\"}}},\"title\":\"OwnerManager - Manages Safe owners and a threshold to authorize transactions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addOwnerWithThreshold(address,uint256)\":{\"notice\":\"Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\"},\"changeThreshold(uint256)\":{\"notice\":\"Changes the threshold of the Safe to `_threshold`.\"},\"getOwners()\":{\"notice\":\"Returns a list of Safe owners.\"},\"getThreshold()\":{\"notice\":\"Returns the number of required confirmations for a Safe transaction aka the threshold.\"},\"isOwner(address)\":{\"notice\":\"Returns if `owner` is an owner of the Safe.\"},\"removeOwner(address,address,uint256)\":{\"notice\":\"Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\"},\"swapOwner(address,address,address)\":{\"notice\":\"Replaces the owner `oldOwner` in the Safe with `newOwner`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/OwnerManager.sol\":\"OwnerManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3225,"contract":"contracts/base/OwnerManager.sol:OwnerManager","label":"owners","offset":0,"slot":"0","type":"t_mapping(t_address,t_address)"},{"astId":3227,"contract":"contracts/base/OwnerManager.sol:OwnerManager","label":"ownerCount","offset":0,"slot":"1","type":"t_uint256"},{"astId":3229,"contract":"contracts/base/OwnerManager.sol:OwnerManager","label":"threshold","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"addOwnerWithThreshold(address,uint256)":{"notice":"Adds the owner `owner` to the Safe and updates the threshold to `_threshold`."},"changeThreshold(uint256)":{"notice":"Changes the threshold of the Safe to `_threshold`."},"getOwners()":{"notice":"Returns a list of Safe owners."},"getThreshold()":{"notice":"Returns the number of required confirmations for a Safe transaction aka the threshold."},"isOwner(address)":{"notice":"Returns if `owner` is an owner of the Safe."},"removeOwner(address,address,uint256)":{"notice":"Removes the owner `owner` from the Safe and updates the threshold to `_threshold`."},"swapOwner(address,address,address)":{"notice":"Replaces the owner `oldOwner` in the Safe with `newOwner`."}},"version":1}}},"contracts/common/Enum.sol":{"Enum":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"Enum - Collection of enums used in Safe contracts.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Enum - Collection of enums used in Safe contracts.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/common/Enum.sol\":\"Enum\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/common/NativeCurrencyPaymentFallback.sol":{"NativeCurrencyPaymentFallback":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeReceived","type":"event"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeReceived\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/common/NativeCurrencyPaymentFallback.sol\":\"NativeCurrencyPaymentFallback\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/common/SecuredTokenTransfer.sol":{"SecuredTokenTransfer":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"SecuredTokenTransfer - Secure token transfer.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SecuredTokenTransfer - Secure token transfer.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/common/SecuredTokenTransfer.sol\":\"SecuredTokenTransfer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/common/SelfAuthorized.sol":{"SelfAuthorized":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"SelfAuthorized - Authorizes current contract to perform actions to itself.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SelfAuthorized - Authorizes current contract to perform actions to itself.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/common/SelfAuthorized.sol\":\"SelfAuthorized\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/common/SignatureDecoder.sol":{"SignatureDecoder":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"SignatureDecoder - Decodes signatures encoded as bytes","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SignatureDecoder - Decodes signatures encoded as bytes\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/common/SignatureDecoder.sol\":\"SignatureDecoder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/common/Singleton.sol":{"Singleton":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"Singleton - Base for singleton contracts (should always be the first super contract)        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Singleton - Base for singleton contracts (should always be the first super contract)        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/common/Singleton.sol\":\"Singleton\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3817,"contract":"contracts/common/Singleton.sol:Singleton","label":"singleton","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/common/StorageAccessible.sol":{"StorageAccessible":{"abi":[{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getStorageAt","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetContract","type":"address"},{"internalType":"bytes","name":"calldataPayload","type":"bytes"}],"name":"simulateAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Gnosis Developers","kind":"dev","methods":{"getStorageAt(uint256,uint256)":{"params":{"length":"- the number of words (32 bytes) of data to read","offset":"- the offset in the current contract's storage in words to start reading from"},"returns":{"_0":"the bytes that were read."}},"simulateAndRevert(address,bytes)":{"details":"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.","params":{"calldataPayload":"Calldata that should be sent to the target contract (encoded method name and arguments).","targetContract":"Address of the contract containing the code to execute."}}},"title":"StorageAccessible - A generic base contract that allows callers to access all internal storage.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getStorageAt(uint256,uint256)":"5624b25b","simulateAndRevert(address,bytes)":"b4faba09"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Gnosis Developers\",\"kind\":\"dev\",\"methods\":{\"getStorageAt(uint256,uint256)\":{\"params\":{\"length\":\"- the number of words (32 bytes) of data to read\",\"offset\":\"- the offset in the current contract's storage in words to start reading from\"},\"returns\":{\"_0\":\"the bytes that were read.\"}},\"simulateAndRevert(address,bytes)\":{\"details\":\"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.\",\"params\":{\"calldataPayload\":\"Calldata that should be sent to the target contract (encoded method name and arguments).\",\"targetContract\":\"Address of the contract containing the code to execute.\"}}},\"title\":\"StorageAccessible - A generic base contract that allows callers to access all internal storage.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getStorageAt(uint256,uint256)\":{\"notice\":\"Reads `length` bytes of storage in the currents contract\"}},\"notice\":\"See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol         It removes a method from the original contract not needed for the Safe contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/common/StorageAccessible.sol\":\"StorageAccessible\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getStorageAt(uint256,uint256)":{"notice":"Reads `length` bytes of storage in the currents contract"}},"notice":"See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol         It removes a method from the original contract not needed for the Safe contracts.","version":1}}},"contracts/examples/guards/DebugTransactionGuard.sol":{"DebugTransactionGuard":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"safe","type":"address"},{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"GasUsage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"safe","type":"address"},{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"indexed":false,"internalType":"bool","name":"usesRefund","type":"bool"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"signatures","type":"bytes"},{"indexed":false,"internalType":"address","name":"executor","type":"address"}],"name":"TransactionDetails","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"bool","name":"success","type":"bool"}],"name":"checkAfterExecution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"internalType":"uint256","name":"baseGas","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"address payable","name":"refundReceiver","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"internalType":"address","name":"executor","type":"address"}],"name":"checkTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"txNonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","details":"This guard is only meant as a development tool and example","kind":"dev","methods":{"checkAfterExecution(bytes32,bool)":{"params":{"success":"True if the transaction was successful.","txHash":"Hash of the executed transaction."}},"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"params":{"baseGas":"Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund)","data":"Data payload of Safe transaction.","executor":"Account executing the transaction.","gasPrice":"Gas price that should be used for the payment calculation.","gasToken":"Token address (or 0 if ETH) that is used for the payment.","operation":"Operation type of Safe transaction.","refundReceiver":"Address of receiver of gas payment (or 0 if tx.origin).","safeTxGas":"Gas that should be used for the Safe transaction.","signatures":"Signature data that should be verified. Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.","to":"Destination address of Safe transaction.","value":"Ether value of Safe transaction."}},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"title":"Debug Transaction Guard - Emits transaction events with extended information.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610929806100206000396000f3fe608060405234801561001057600080fd5b50600436106100505760003560e01c806301ffc9a71461005357806375f0bb52146100b657806393271368146102be578063ddbdba63146102f857610051565b5b005b61009e6004803603602081101561006957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061033a565b60405180821515815260200191505060405180910390f35b6102bc60048036036101608110156100cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561011457600080fd5b82018360208201111561012657600080fd5b8035906020019184600183028401116401000000008311171561014857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061040c565b005b6102f6600480360360408110156102d457600080fd5b81019080803590602001909291908035151590602001909291905050506107de565b005b6103246004803603602081101561030e57600080fd5b81019080803590602001909291905050506108db565b6040518082815260200191505060405180910390f35b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061040557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080600033905060018173ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b815260040160206040518083038186803b15801561045c57600080fd5b505afa158015610470573d6000803e3d6000fd5b505050506040513d602081101561048657600080fd5b81019080805190602001909291905050500392508073ffffffffffffffffffffffffffffffffffffffff1663d8d11f788f8f8f8f8f8f8f8f8f8d6040518b63ffffffff1660e01b8152600401808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018060200189600181111561050557fe5b81526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182810382528a818151815260200191508051906020019080838360005b83811015610592578082015181840152602081019050610577565b50505050905090810190601f1680156105bf5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060206040518083038186803b1580156105e557600080fd5b505afa1580156105f9573d6000803e3d6000fd5b505050506040513d602081101561060f57600080fd5b8101908080519060200190929190505050915050803373ffffffffffffffffffffffffffffffffffffffff167fa65fef32cd19a6639a4bf7a6d196f132c151e4f0bbd2706f7f831b3a778e1ac08f8f8f8f8f60008f118a8d8d604051808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018060200188600181111561069e57fe5b81526020018781526020018615158152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528a818151815260200191508051906020019080838360005b8381101561070f5780820151818401526020810190506106f4565b50505050905090810190601f16801561073c5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561077557808201518184015260208101905061075a565b50505050905090810190601f1680156107a25780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a3816000808381526020019081526020016000208190555050505050505050505050505050565b6000806000848152602001908152602001600020549050600081141561086c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f756c64206e6f7420676574206e6f6e63650000000000000000000000000081525060200191505060405180910390fd5b60008060008581526020019081526020016000208190555080833373ffffffffffffffffffffffffffffffffffffffff167f0dcc0fb56a30b6fe6b188f45b47369bc7f3c928a9748e245a79fc3f54ddd05688560405180821515815260200191505060405180910390a4505050565b6000602052806000526040600020600091509050548156fea26469706673582212206b4220320ac3fc43010ac2089f4931c4c383ca9873db22b0040a28af93142dd864736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x929 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 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x53 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0xDDBDBA63 EQ PUSH2 0x2F8 JUMPI PUSH2 0x51 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x33A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2BC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x40C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2F6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x7DE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x324 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x405 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAFFED0E0 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x45C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x470 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x486 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SUB SWAP3 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8D11F78 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP14 PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP10 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x505 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP11 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 0x592 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x577 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x5BF 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 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP2 POP POP DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA65FEF32CD19A6639A4BF7A6D196F132C151E4F0BBD2706F7F831B3A778E1AC0 DUP16 DUP16 DUP16 DUP16 DUP16 PUSH1 0x0 DUP16 GT DUP11 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x69E JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP11 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 0x70F JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x6F4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x73C 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 DUP4 DUP2 SUB DUP3 MSTORE DUP6 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 0x775 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x75A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x7A2 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 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP2 PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x86C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x436F756C64206E6F7420676574206E6F6E636500000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 DUP4 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDCC0FB56A30B6FE6B188F45B47369BC7F3C928A9748E245A79FC3F54DDD0568 DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0x4220320AC3FC43010AC2089F 0x49 BALANCE 0xC4 0xC3 DUP4 0xCA SWAP9 PUSH20 0xDB22B0040A28AF93142DD864736F6C6343000706 STOP CALLER ","sourceMap":"375:3168:22:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100505760003560e01c806301ffc9a71461005357806375f0bb52146100b657806393271368146102be578063ddbdba63146102f857610051565b5b005b61009e6004803603602081101561006957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061033a565b60405180821515815260200191505060405180910390f35b6102bc60048036036101608110156100cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561011457600080fd5b82018360208201111561012657600080fd5b8035906020019184600183028401116401000000008311171561014857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061040c565b005b6102f6600480360360408110156102d457600080fd5b81019080803590602001909291908035151590602001909291905050506107de565b005b6103246004803603602081101561030e57600080fd5b81019080803590602001909291905050506108db565b6040518082815260200191505060405180910390f35b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061040557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080600033905060018173ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b815260040160206040518083038186803b15801561045c57600080fd5b505afa158015610470573d6000803e3d6000fd5b505050506040513d602081101561048657600080fd5b81019080805190602001909291905050500392508073ffffffffffffffffffffffffffffffffffffffff1663d8d11f788f8f8f8f8f8f8f8f8f8d6040518b63ffffffff1660e01b8152600401808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018060200189600181111561050557fe5b81526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182810382528a818151815260200191508051906020019080838360005b83811015610592578082015181840152602081019050610577565b50505050905090810190601f1680156105bf5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060206040518083038186803b1580156105e557600080fd5b505afa1580156105f9573d6000803e3d6000fd5b505050506040513d602081101561060f57600080fd5b8101908080519060200190929190505050915050803373ffffffffffffffffffffffffffffffffffffffff167fa65fef32cd19a6639a4bf7a6d196f132c151e4f0bbd2706f7f831b3a778e1ac08f8f8f8f8f60008f118a8d8d604051808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018060200188600181111561069e57fe5b81526020018781526020018615158152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528a818151815260200191508051906020019080838360005b8381101561070f5780820151818401526020810190506106f4565b50505050905090810190601f16801561073c5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561077557808201518184015260208101905061075a565b50505050905090810190601f1680156107a25780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a3816000808381526020019081526020016000208190555050505050505050505050505050565b6000806000848152602001908152602001600020549050600081141561086c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f756c64206e6f7420676574206e6f6e63650000000000000000000000000081525060200191505060405180910390fd5b60008060008581526020019081526020016000208190555080833373ffffffffffffffffffffffffffffffffffffffff167f0dcc0fb56a30b6fe6b188f45b47369bc7f3c928a9748e245a79fc3f54ddd05688560405180821515815260200191505060405180910390a4505050565b6000602052806000526040600020600091509050548156fea26469706673582212206b4220320ac3fc43010ac2089f4931c4c383ca9873db22b0040a28af93142dd864736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x53 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0xDDBDBA63 EQ PUSH2 0x2F8 JUMPI PUSH2 0x51 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x33A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2BC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x40C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2F6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x7DE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x324 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x405 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAFFED0E0 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x45C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x470 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x486 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SUB SWAP3 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8D11F78 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP14 PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP10 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x505 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP11 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 0x592 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x577 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x5BF 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 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP2 POP POP DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA65FEF32CD19A6639A4BF7A6D196F132C151E4F0BBD2706F7F831B3A778E1AC0 DUP16 DUP16 DUP16 DUP16 DUP16 PUSH1 0x0 DUP16 GT DUP11 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x69E JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP11 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 0x70F JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x6F4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x73C 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 DUP4 DUP2 SUB DUP3 MSTORE DUP6 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 0x775 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x75A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x7A2 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 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP2 PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x86C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x436F756C64206E6F7420676574206E6F6E636500000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 DUP4 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDCC0FB56A30B6FE6B188F45B47369BC7F3C928A9748E245A79FC3F54DDD0568 DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0x4220320AC3FC43010AC2089F 0x49 BALANCE 0xC4 0xC3 DUP4 0xCA SWAP9 PUSH20 0xDB22B0040A28AF93142DD864736F6C6343000706 STOP CALLER ","sourceMap":"375:3168:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;683:251:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2181:878:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3274:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1106:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;683:251:12;770:4;820:23;805:38;;;:11;:38;;;;:108;;;;888:25;873:40;;;:11;:40;;;;805:108;786:127;;683:251;;;:::o;2181:878:22:-;2600:13;2623:14;2661:9;2686:10;2661:37;;2735:1;2720:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:16;2712:24;;2759:4;:23;;;2783:2;2787:5;2794:4;2800:9;2811;2822:7;2831:8;2841;2851:14;2867:5;2759:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2750:123;;2181:878;2929:6;2917:10;2898:120;;;2937:2;2941:5;2948:4;2954:9;2965;2987:1;2976:8;:12;2990:5;2997:10;3009:8;2898:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3047:5;3028:8;:16;3037:6;3028:16;;;;;;;;;;;:24;;;;2181:878;;;;;;;;;;;;;:::o;3274:267::-;3361:13;3377:8;:16;3386:6;3377:16;;;;;;;;;;;;3361:32;;3420:1;3411:5;:10;;3403:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3474:1;3455:8;:16;3464:6;3455:16;;;;;;;;;;;:20;;;;3519:5;3511:6;3499:10;3490:44;;;3526:7;3490:44;;;;;;;;;;;;;;;;;;;;3274:267;;;:::o;1106:43::-;;;;;;;;;;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"469000","executionCost":"505","totalCost":"469505"},"external":{"":"175","checkAfterExecution(bytes32,bool)":"8506","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"infinite","supportsInterface(bytes4)":"363","txNonces(bytes32)":"1207"}},"methodIdentifiers":{"checkAfterExecution(bytes32,bool)":"93271368","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"75f0bb52","supportsInterface(bytes4)":"01ffc9a7","txNonces(bytes32)":"ddbdba63"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"GasUsage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"usesRefund\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"name\":\"TransactionDetails\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"checkAfterExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"name\":\"checkTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"txNonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"details\":\"This guard is only meant as a development tool and example\",\"kind\":\"dev\",\"methods\":{\"checkAfterExecution(bytes32,bool)\":{\"params\":{\"success\":\"True if the transaction was successful.\",\"txHash\":\"Hash of the executed transaction.\"}},\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"params\":{\"baseGas\":\"Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund)\",\"data\":\"Data payload of Safe transaction.\",\"executor\":\"Account executing the transaction.\",\"gasPrice\":\"Gas price that should be used for the payment calculation.\",\"gasToken\":\"Token address (or 0 if ETH) that is used for the payment.\",\"operation\":\"Operation type of Safe transaction.\",\"refundReceiver\":\"Address of receiver of gas payment (or 0 if tx.origin).\",\"safeTxGas\":\"Gas that should be used for the Safe transaction.\",\"signatures\":\"Signature data that should be verified. Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\",\"to\":\"Destination address of Safe transaction.\",\"value\":\"Ether value of Safe transaction.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"title\":\"Debug Transaction Guard - Emits transaction events with extended information.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkAfterExecution(bytes32,bool)\":{\"notice\":\"Called by the Safe contract after a transaction is executed.\"},\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"notice\":\"Called by the Safe contract before a transaction is executed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/examples/guards/DebugTransactionGuard.sol\":\"DebugTransactionGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/examples/guards/DebugTransactionGuard.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../../common/Enum.sol\\\";\\nimport \\\"../../base/GuardManager.sol\\\";\\nimport \\\"../../Safe.sol\\\";\\n\\n/**\\n * @title Debug Transaction Guard - Emits transaction events with extended information.\\n * @dev This guard is only meant as a development tool and example\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract DebugTransactionGuard is BaseGuard {\\n    // solhint-disable-next-line payable-fallback\\n    fallback() external {\\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\\n        // E.g. The expected check method might change and then the Safe would be locked.\\n    }\\n\\n    event TransactionDetails(\\n        address indexed safe,\\n        bytes32 indexed txHash,\\n        address to,\\n        uint256 value,\\n        bytes data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        bool usesRefund,\\n        uint256 nonce,\\n        bytes signatures,\\n        address executor\\n    );\\n\\n    event GasUsage(address indexed safe, bytes32 indexed txHash, uint256 indexed nonce, bool success);\\n\\n    mapping(bytes32 => uint256) public txNonces;\\n\\n    /**\\n     * @notice Called by the Safe contract before a transaction is executed.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified. Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param executor Account executing the transaction.\\n     */\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        // solhint-disable-next-line no-unused-vars\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address executor\\n    ) external override {\\n        uint256 nonce;\\n        bytes32 txHash;\\n        {\\n            Safe safe = Safe(payable(msg.sender));\\n            nonce = safe.nonce() - 1;\\n            txHash = safe.getTransactionHash(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, nonce);\\n        }\\n        emit TransactionDetails(msg.sender, txHash, to, value, data, operation, safeTxGas, gasPrice > 0, nonce, signatures, executor);\\n        txNonces[txHash] = nonce;\\n    }\\n\\n    /**\\n     * @notice Called by the Safe contract after a transaction is executed.\\n     * @param txHash Hash of the executed transaction.\\n     * @param success True if the transaction was successful.\\n     */\\n    function checkAfterExecution(bytes32 txHash, bool success) external override {\\n        uint256 nonce = txNonces[txHash];\\n        require(nonce != 0, \\\"Could not get nonce\\\");\\n        txNonces[txHash] = 0;\\n        emit GasUsage(msg.sender, txHash, nonce, success);\\n    }\\n}\\n\",\"keccak256\":\"0xfa38d8a9749c267c7a878332356122251ea2a8327f4e8ec8b5fe97ce0a05a758\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3917,"contract":"contracts/examples/guards/DebugTransactionGuard.sol:DebugTransactionGuard","label":"txNonces","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_uint256)"}],"types":{"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"checkAfterExecution(bytes32,bool)":{"notice":"Called by the Safe contract after a transaction is executed."},"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"notice":"Called by the Safe contract before a transaction is executed."}},"version":1}}},"contracts/examples/guards/DelegateCallTransactionGuard.sol":{"DelegateCallTransactionGuard":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"allowedTarget","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"name":"checkAfterExecution","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address payable","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"}],"name":"checkTransaction","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"details":"Reverts if the transaction is a delegate call to contract other than the allowed one.","params":{"operation":"Operation type of Safe transaction.","to":"Destination address of Safe transaction."}},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"title":"DelegateCallTransactionGuard - Limits delegate calls to a specific target.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60a060405234801561001057600080fd5b506040516105e93803806105e98339818101604052602081101561003357600080fd5b81019080805190602001909291905050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505060805160601c61054b61009e600039806104005280610444525061054b6000f3fe608060405234801561001057600080fd5b50600436106100505760003560e01c806301ffc9a71461005357806373a8c682146100b657806375f0bb52146100ea57806393271368146102f257610051565b5b005b61009e6004803603602081101561006957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061032c565b60405180821515815260200191505060405180910390f35b6100be6103fe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f0600480360361016081101561010157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561014857600080fd5b82018360208201111561015a57600080fd5b8035906020019184600183028401116401000000008311171561017c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024a57600080fd5b82018360208201111561025c57600080fd5b8035906020019184600183028401116401000000008311171561027e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610422565b005b61032a6004803603604081101561030857600080fd5b8101908080359060200190929190803515159060200190929190505050610511565b005b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60018081111561042e57fe5b88600181111561043a57fe5b14158061049257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16145b610504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546869732063616c6c206973207265737472696374656400000000000000000081525060200191505060405180910390fd5b5050505050505050505050565b505056fea264697066735822122037260e4da99e3019e452ce811107fa5a7ea8fdb43db3842c013fa460f638d2b364736f6c63430007060033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x5E9 CODESIZE SUB DUP1 PUSH2 0x5E9 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0x54B PUSH2 0x9E PUSH1 0x0 CODECOPY DUP1 PUSH2 0x400 MSTORE DUP1 PUSH2 0x444 MSTORE POP PUSH2 0x54B 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 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x53 JUMPI DUP1 PUSH4 0x73A8C682 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2F2 JUMPI PUSH2 0x51 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBE PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x422 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x511 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x3F7 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x42E JUMPI INVALID JUMPDEST DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x43A JUMPI INVALID JUMPDEST EQ ISZERO DUP1 PUSH2 0x492 JUMPI POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST PUSH2 0x504 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x546869732063616C6C2069732072657374726963746564000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATACOPY 0x26 0xE 0x4D 0xA9 SWAP15 ADDRESS NOT 0xE4 MSTORE 0xCE DUP2 GT SMOD STATICCALL GAS PUSH31 0xA8FDB43DB3842C013FA460F638D2B364736F6C634300070600330000000000 ","sourceMap":"305:1264:23:-:0;;;407:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;461:6;445:22;;;;;;;;;;;;407:67;305:1264;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"4057":[{"length":32,"start":1024},{"length":32,"start":1092}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100505760003560e01c806301ffc9a71461005357806373a8c682146100b657806375f0bb52146100ea57806393271368146102f257610051565b5b005b61009e6004803603602081101561006957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061032c565b60405180821515815260200191505060405180910390f35b6100be6103fe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f0600480360361016081101561010157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561014857600080fd5b82018360208201111561015a57600080fd5b8035906020019184600183028401116401000000008311171561017c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024a57600080fd5b82018360208201111561025c57600080fd5b8035906020019184600183028401116401000000008311171561027e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610422565b005b61032a6004803603604081101561030857600080fd5b8101908080359060200190929190803515159060200190929190505050610511565b005b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60018081111561042e57fe5b88600181111561043a57fe5b14158061049257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16145b610504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546869732063616c6c206973207265737472696374656400000000000000000081525060200191505060405180910390fd5b5050505050505050505050565b505056fea264697066735822122037260e4da99e3019e452ce811107fa5a7ea8fdb43db3842c013fa460f638d2b364736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x53 JUMPI DUP1 PUSH4 0x73A8C682 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2F2 JUMPI PUSH2 0x51 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBE PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x422 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x511 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x3F7 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 DUP2 GT ISZERO PUSH2 0x42E JUMPI INVALID JUMPDEST DUP9 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x43A JUMPI INVALID JUMPDEST EQ ISZERO DUP1 PUSH2 0x492 JUMPI POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST PUSH2 0x504 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x546869732063616C6C2069732072657374726963746564000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATACOPY 0x26 0xE 0x4D 0xA9 SWAP15 ADDRESS NOT 0xE4 MSTORE 0xCE DUP2 GT SMOD STATICCALL GAS PUSH31 0xA8FDB43DB3842C013FA460F638D2B364736F6C634300070600330000000000 ","sourceMap":"305:1264:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;683:251:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;362:38:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1044:448;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1498:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;683:251:12;770:4;820:23;805:38;;;:11;:38;;;;:108;;;;888:25;873:40;;;:11;:40;;;;805:108;786:127;;683:251;;;:::o;362:38:23:-;;;:::o;1044:448::-;1407:27;1394:40;;;;;;;;:9;:40;;;;;;;;;;:63;;;;1444:13;1438:19;;:2;:19;;;1394:63;1386:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1044:448;;;;;;;;;;;:::o;1498:69::-;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"271000","executionCost":"infinite","totalCost":"infinite"},"external":{"":"175","allowedTarget()":"infinite","checkAfterExecution(bytes32,bool)":"307","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"infinite","supportsInterface(bytes4)":"363"}},"methodIdentifiers":{"allowedTarget()":"73a8c682","checkAfterExecution(bytes32,bool)":"93271368","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"75f0bb52","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"allowedTarget\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"checkAfterExecution\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"checkTransaction\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"details\":\"Reverts if the transaction is a delegate call to contract other than the allowed one.\",\"params\":{\"operation\":\"Operation type of Safe transaction.\",\"to\":\"Destination address of Safe transaction.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"title\":\"DelegateCallTransactionGuard - Limits delegate calls to a specific target.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"notice\":\"Called by the Safe contract before a transaction is executed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/examples/guards/DelegateCallTransactionGuard.sol\":\"DelegateCallTransactionGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/examples/guards/DelegateCallTransactionGuard.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../../common/Enum.sol\\\";\\nimport \\\"../../base/GuardManager.sol\\\";\\nimport \\\"../../Safe.sol\\\";\\n\\n/**\\n * @title DelegateCallTransactionGuard - Limits delegate calls to a specific target.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract DelegateCallTransactionGuard is BaseGuard {\\n    address public immutable allowedTarget;\\n\\n    constructor(address target) {\\n        allowedTarget = target;\\n    }\\n\\n    // solhint-disable-next-line payable-fallback\\n    fallback() external {\\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\\n        // E.g. The expected check method might change and then the Safe would be locked.\\n    }\\n\\n    /**\\n     * @notice Called by the Safe contract before a transaction is executed.\\n     * @dev  Reverts if the transaction is a delegate call to contract other than the allowed one.\\n     * @param to Destination address of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     */\\n    function checkTransaction(\\n        address to,\\n        uint256,\\n        bytes memory,\\n        Enum.Operation operation,\\n        uint256,\\n        uint256,\\n        uint256,\\n        address,\\n        // solhint-disable-next-line no-unused-vars\\n        address payable,\\n        bytes memory,\\n        address\\n    ) external view override {\\n        require(operation != Enum.Operation.DelegateCall || to == allowedTarget, \\\"This call is restricted\\\");\\n    }\\n\\n    function checkAfterExecution(bytes32, bool) external view override {}\\n}\\n\",\"keccak256\":\"0x82a19ab686c43fba108895e65019d39df88fd154c83bf8f37a446794a38e485b\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"notice":"Called by the Safe contract before a transaction is executed."}},"version":1}}},"contracts/examples/guards/OnlyOwnersGuard.sol":{"ISafe":{"abi":[{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getOwners()":"a0e67e2b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/examples/guards/OnlyOwnersGuard.sol\":\"ISafe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/examples/guards/OnlyOwnersGuard.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../../common/Enum.sol\\\";\\nimport \\\"../../base/GuardManager.sol\\\";\\nimport \\\"../../Safe.sol\\\";\\n\\ninterface ISafe {\\n    function getOwners() external view returns (address[] memory);\\n}\\n\\n/**\\n * @title OnlyOwnersGuard - Only allows owners to execute transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract OnlyOwnersGuard is BaseGuard {\\n    ISafe public safe;\\n\\n    constructor() {}\\n\\n    // solhint-disable-next-line payable-fallback\\n    fallback() external {\\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\\n        // E.g. The expected check method might change and then the Safe would be locked.\\n    }\\n\\n    /**\\n     * @notice Called by the Safe contract before a transaction is executed.\\n     * @dev Reverts if the transaction is not executed by an owner.\\n     * @param msgSender Executor of the transaction.\\n     */\\n    function checkTransaction(\\n        address,\\n        uint256,\\n        bytes memory,\\n        Enum.Operation,\\n        uint256,\\n        uint256,\\n        uint256,\\n        address,\\n        // solhint-disable-next-line no-unused-vars\\n        address payable,\\n        bytes memory,\\n        address msgSender\\n    ) external view override {\\n        // Only owners can exec\\n        address[] memory owners = ISafe(msg.sender).getOwners();\\n        for (uint256 i = 0; i < owners.length; i++) {\\n            if (owners[i] == msgSender) {\\n                return;\\n            }\\n        }\\n\\n        // msg sender is not an owner\\n        revert(\\\"msg sender is not allowed to exec\\\");\\n    }\\n\\n    function checkAfterExecution(bytes32, bool) external view override {}\\n}\\n\",\"keccak256\":\"0x05b45709523e0b716ffb3cb8a397d70cc60b033ea77d04a52efc554999dcdd6c\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"OnlyOwnersGuard":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"name":"checkAfterExecution","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"enum Enum.Operation","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address payable","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"checkTransaction","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safe","outputs":[{"internalType":"contract ISafe","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"details":"Reverts if the transaction is not executed by an owner.","params":{"msgSender":"Executor of the transaction."}},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"title":"OnlyOwnersGuard - Only allows owners to execute transactions.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610662806100206000396000f3fe608060405234801561001057600080fd5b50600436106100505760003560e01c806301ffc9a714610053578063186f0354146100b657806375f0bb52146100ea57806393271368146102f257610051565b5b005b61009e6004803603602081101561006957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061032c565b60405180821515815260200191505060405180910390f35b6100be6103fe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f0600480360361016081101561010157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561014857600080fd5b82018360208201111561015a57600080fd5b8035906020019184600183028401116401000000008311171561017c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024a57600080fd5b82018360208201111561025c57600080fd5b8035906020019184600183028401116401000000008311171561027e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610422565b005b61032a6004803603604081101561030857600080fd5b8101908080359060200190929190803515159060200190929190505050610607565b005b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff1663a0e67e2b6040518163ffffffff1660e01b815260040160006040518083038186803b15801561046a57600080fd5b505afa15801561047e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156104a857600080fd5b81019080805160405193929190846401000000008211156104c857600080fd5b838201915060208201858111156104de57600080fd5b82518660208202830111640100000000821117156104fb57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610532578082015181840152602081019050610517565b50505050905001604052505050905060005b81518110156105a8578273ffffffffffffffffffffffffffffffffffffffff1682828151811061057057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561059b5750506105fa565b8080600101915050610544565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061060c6021913960400191505060405180910390fd5b5050505050505050505050565b505056fe6d73672073656e646572206973206e6f7420616c6c6f77656420746f2065786563a2646970667358221220a2b024bd154d0db761afb142abe591d8041ec978324a7e7ac02a87c25e0c7d6964736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x662 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 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x53 JUMPI DUP1 PUSH4 0x186F0354 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2F2 JUMPI PUSH2 0x51 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBE PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x422 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x607 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x3F7 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA0E67E2B 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 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x47E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4A8 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 0x4C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x532 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x517 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5A8 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x570 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x59B JUMPI POP POP PUSH2 0x5FA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x544 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x60C PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP POP JUMP INVALID PUSH14 0x73672073656E646572206973206E PUSH16 0x7420616C6C6F77656420746F20657865 PUSH4 0xA2646970 PUSH7 0x7358221220A2B0 0x24 0xBD ISZERO 0x4D 0xD 0xB7 PUSH2 0xAFB1 TIMESTAMP 0xAB 0xE5 SWAP2 0xD8 DIV 0x1E 0xC9 PUSH25 0x324A7E7AC02A87C25E0C7D6964736F6C634300070600330000 ","sourceMap":"380:1304:24:-:0;;;448:16;;;;;;;;;;380:1304;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100505760003560e01c806301ffc9a714610053578063186f0354146100b657806375f0bb52146100ea57806393271368146102f257610051565b5b005b61009e6004803603602081101561006957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061032c565b60405180821515815260200191505060405180910390f35b6100be6103fe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f0600480360361016081101561010157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561014857600080fd5b82018360208201111561015a57600080fd5b8035906020019184600183028401116401000000008311171561017c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561024a57600080fd5b82018360208201111561025c57600080fd5b8035906020019184600183028401116401000000008311171561027e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610422565b005b61032a6004803603604081101561030857600080fd5b8101908080359060200190929190803515159060200190929190505050610607565b005b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff1663a0e67e2b6040518163ffffffff1660e01b815260040160006040518083038186803b15801561046a57600080fd5b505afa15801561047e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156104a857600080fd5b81019080805160405193929190846401000000008211156104c857600080fd5b838201915060208201858111156104de57600080fd5b82518660208202830111640100000000821117156104fb57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610532578082015181840152602081019050610517565b50505050905001604052505050905060005b81518110156105a8578273ffffffffffffffffffffffffffffffffffffffff1682828151811061057057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561059b5750506105fa565b8080600101915050610544565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061060c6021913960400191505060405180910390fd5b5050505050505050505050565b505056fe6d73672073656e646572206973206e6f7420616c6c6f77656420746f2065786563a2646970667358221220a2b024bd154d0db761afb142abe591d8041ec978324a7e7ac02a87c25e0c7d6964736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x53 JUMPI DUP1 PUSH4 0x186F0354 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2F2 JUMPI PUSH2 0x51 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBE PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x422 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x607 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x3F7 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA0E67E2B 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 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x47E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4A8 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 0x4C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x532 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x517 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5A8 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x570 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x59B JUMPI POP POP PUSH2 0x5FA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x544 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x60C PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP POP JUMP INVALID PUSH14 0x73672073656E646572206973206E PUSH16 0x7420616C6C6F77656420746F20657865 PUSH4 0xA2646970 PUSH7 0x7358221220A2B0 0x24 0xBD ISZERO 0x4D 0xD 0xB7 PUSH2 0xAFB1 TIMESTAMP 0xAB 0xE5 SWAP2 0xD8 DIV 0x1E 0xC9 PUSH25 0x324A7E7AC02A87C25E0C7D6964736F6C634300070600330000 ","sourceMap":"380:1304:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;683:251:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;424:17:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;938:669;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1613:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;683:251:12;770:4;820:23;805:38;;;:11;:38;;;;:108;;;;888:25;873:40;;;:11;:40;;;;805:108;786:127;;683:251;;;:::o;424:17:24:-;;;;;;;;;;;;:::o;938:669::-;1309:23;1341:10;1335:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1309:55;;1379:9;1374:135;1398:6;:13;1394:1;:17;1374:135;;;1449:9;1436:22;;:6;1443:1;1436:9;;;;;;;;;;;;;;:22;;;1432:67;;;1478:7;;;;1432:67;1413:3;;;;;;;1374:135;;;;1557:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;938:669;;;;;;;;;;;;:::o;1613:69::-;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"326800","executionCost":"368","totalCost":"327168"},"external":{"":"175","checkAfterExecution(bytes32,bool)":"307","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"infinite","safe()":"1044","supportsInterface(bytes4)":"363"}},"methodIdentifiers":{"checkAfterExecution(bytes32,bool)":"93271368","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"75f0bb52","safe()":"186f0354","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"checkAfterExecution\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"checkTransaction\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safe\",\"outputs\":[{\"internalType\":\"contract ISafe\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"details\":\"Reverts if the transaction is not executed by an owner.\",\"params\":{\"msgSender\":\"Executor of the transaction.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"title\":\"OnlyOwnersGuard - Only allows owners to execute transactions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"notice\":\"Called by the Safe contract before a transaction is executed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/examples/guards/OnlyOwnersGuard.sol\":\"OnlyOwnersGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/examples/guards/OnlyOwnersGuard.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../../common/Enum.sol\\\";\\nimport \\\"../../base/GuardManager.sol\\\";\\nimport \\\"../../Safe.sol\\\";\\n\\ninterface ISafe {\\n    function getOwners() external view returns (address[] memory);\\n}\\n\\n/**\\n * @title OnlyOwnersGuard - Only allows owners to execute transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract OnlyOwnersGuard is BaseGuard {\\n    ISafe public safe;\\n\\n    constructor() {}\\n\\n    // solhint-disable-next-line payable-fallback\\n    fallback() external {\\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\\n        // E.g. The expected check method might change and then the Safe would be locked.\\n    }\\n\\n    /**\\n     * @notice Called by the Safe contract before a transaction is executed.\\n     * @dev Reverts if the transaction is not executed by an owner.\\n     * @param msgSender Executor of the transaction.\\n     */\\n    function checkTransaction(\\n        address,\\n        uint256,\\n        bytes memory,\\n        Enum.Operation,\\n        uint256,\\n        uint256,\\n        uint256,\\n        address,\\n        // solhint-disable-next-line no-unused-vars\\n        address payable,\\n        bytes memory,\\n        address msgSender\\n    ) external view override {\\n        // Only owners can exec\\n        address[] memory owners = ISafe(msg.sender).getOwners();\\n        for (uint256 i = 0; i < owners.length; i++) {\\n            if (owners[i] == msgSender) {\\n                return;\\n            }\\n        }\\n\\n        // msg sender is not an owner\\n        revert(\\\"msg sender is not allowed to exec\\\");\\n    }\\n\\n    function checkAfterExecution(bytes32, bool) external view override {}\\n}\\n\",\"keccak256\":\"0x05b45709523e0b716ffb3cb8a397d70cc60b033ea77d04a52efc554999dcdd6c\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":4139,"contract":"contracts/examples/guards/OnlyOwnersGuard.sol:OnlyOwnersGuard","label":"safe","offset":0,"slot":"0","type":"t_contract(ISafe)4134"}],"types":{"t_contract(ISafe)4134":{"encoding":"inplace","label":"contract ISafe","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"notice":"Called by the Safe contract before a transaction is executed."}},"version":1}}},"contracts/examples/guards/ReentrancyTransactionGuard.sol":{"ReentrancyTransactionGuard":{"abi":[{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"name":"checkAfterExecution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"enum Enum.Operation","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address payable","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"}],"name":"checkTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"checkAfterExecution(bytes32,bool)":{"details":"Resets the guard value."},"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"details":"Reverts if reentrancy is detected."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"title":"ReentrancyTransactionGuard - Prevents reentrancy into the transaction execution function.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610506806100206000396000f3fe608060405234801561001057600080fd5b50600436106100455760003560e01c806301ffc9a71461004857806375f0bb52146100ab57806393271368146102b357610046565b5b005b6100936004803603602081101561005e57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506102ed565b60405180821515815260200191505060405180910390f35b6102b160048036036101608110156100c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561010957600080fd5b82018360208201111561011b57600080fd5b8035906020019184600183028401116401000000008311171561013d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561020b57600080fd5b82018360208201111561021d57600080fd5b8035906020019184600183028401116401000000008311171561023f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103bf565b005b6102eb600480360360408110156102c957600080fd5b810190808035906020019092919080351515906020019092919050505061047b565b005b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103b857507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60006103c96104a3565b90508060000160009054906101000a900460ff1615610450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265656e7472616e63792064657465637465640000000000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550505050505050505050505050565b60006104856104a3565b60000160006101000a81548160ff0219169083151502179055505050565b6000807f7c1d45961c2d0298f999d2c3d4a7a5e0f688d137f4c32466e3056a97e673b83a9050809150509056fea26469706673582212202619f0b8c2896b220e3ead5ef23a49d9f73365880ea3cd5f56e77c460c2795d864736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x506 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 0x45 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x48 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xAB JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2B3 JUMPI PUSH2 0x46 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x93 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2B1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x11B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x20B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3BF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x47B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x3B8 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C9 PUSH2 0x4A3 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x450 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x5265656E7472616E637920646574656374656400000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x485 PUSH2 0x4A3 JUMP JUMPDEST PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7C1D45961C2D0298F999D2C3D4A7A5E0F688D137F4C32466E3056A97E673B83A SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 NOT CREATE 0xB8 0xC2 DUP10 PUSH12 0x220E3EAD5EF23A49D9F73365 DUP9 0xE LOG3 0xCD 0x5F JUMP 0xE7 PUSH29 0x460C2795D864736F6C6343000706003300000000000000000000000000 ","sourceMap":"320:1776:25:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100455760003560e01c806301ffc9a71461004857806375f0bb52146100ab57806393271368146102b357610046565b5b005b6100936004803603602081101561005e57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506102ed565b60405180821515815260200191505060405180910390f35b6102b160048036036101608110156100c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561010957600080fd5b82018360208201111561011b57600080fd5b8035906020019184600183028401116401000000008311171561013d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561020b57600080fd5b82018360208201111561021d57600080fd5b8035906020019184600183028401116401000000008311171561023f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103bf565b005b6102eb600480360360408110156102c957600080fd5b810190808035906020019092919080351515906020019092919050505061047b565b005b60007fe6d7a83a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103b857507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60006103c96104a3565b90508060000160009054906101000a900460ff1615610450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265656e7472616e63792064657465637465640000000000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550505050505050505050505050565b60006104856104a3565b60000160006101000a81548160ff0219169083151502179055505050565b6000807f7c1d45961c2d0298f999d2c3d4a7a5e0f688d137f4c32466e3056a97e673b83a9050809150509056fea26469706673582212202619f0b8c2896b220e3ead5ef23a49d9f73365880ea3cd5f56e77c460c2795d864736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x45 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x48 JUMPI DUP1 PUSH4 0x75F0BB52 EQ PUSH2 0xAB JUMPI DUP1 PUSH4 0x93271368 EQ PUSH2 0x2B3 JUMPI PUSH2 0x46 JUMP JUMPDEST JUMPDEST STOP JUMPDEST PUSH2 0x93 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2B1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x160 DUP2 LT ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x11B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x20B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3BF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x47B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0xE6D7A83A00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x3B8 JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C9 PUSH2 0x4A3 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x450 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x5265656E7472616E637920646574656374656400000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x485 PUSH2 0x4A3 JUMP JUMPDEST PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7C1D45961C2D0298F999D2C3D4A7A5E0F688D137F4C32466E3056A97E673B83A SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 NOT CREATE 0xB8 0xC2 DUP10 PUSH12 0x220E3EAD5EF23A49D9F73365 DUP9 0xE LOG3 0xCD 0x5F JUMP 0xE7 PUSH29 0x460C2795D864736F6C6343000706003300000000000000000000000000 ","sourceMap":"320:1776:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;683:251:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1404:452:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1990:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;683:251:12;770:4;820:23;805:38;;;:11;:38;;;;:108;;;;888:25;873:40;;;:11;:40;;;;805:108;786:127;;683:251;;;:::o;1404:452:25:-;1728:24;1755:10;:8;:10::i;:::-;1728:37;;1784:5;:12;;;;;;;;;;;;1783:13;1775:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1845:4;1830:5;:12;;;:19;;;;;;;;;;;;;;;;;;1404:452;;;;;;;;;;;;:::o;1990:104::-;2082:5;2062:10;:8;:10::i;:::-;:17;;;:25;;;;;;;;;;;;;;;;;;1990:104;;:::o;1023:235::-;1066:24;1102:12;422:42;1102:33;;1238:4;1224:18;;1210:42;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"257200","executionCost":"300","totalCost":"257500"},"external":{"":"153","checkAfterExecution(bytes32,bool)":"21206","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"infinite","supportsInterface(bytes4)":"363"},"internal":{"getGuard()":"36"}},"methodIdentifiers":{"checkAfterExecution(bytes32,bool)":"93271368","checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":"75f0bb52","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"checkAfterExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"checkTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"checkAfterExecution(bytes32,bool)\":{\"details\":\"Resets the guard value.\"},\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"details\":\"Reverts if reentrancy is detected.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"title\":\"ReentrancyTransactionGuard - Prevents reentrancy into the transaction execution function.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkAfterExecution(bytes32,bool)\":{\"notice\":\"Called by the Safe contract after a transaction is executed.\"},\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"notice\":\"Called by the Safe contract before a transaction is executed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/examples/guards/ReentrancyTransactionGuard.sol\":\"ReentrancyTransactionGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/examples/guards/ReentrancyTransactionGuard.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../../common/Enum.sol\\\";\\nimport \\\"../../base/GuardManager.sol\\\";\\nimport \\\"../../Safe.sol\\\";\\n\\n/**\\n * @title ReentrancyTransactionGuard - Prevents reentrancy into the transaction execution function.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract ReentrancyTransactionGuard is BaseGuard {\\n    bytes32 internal constant GUARD_STORAGE_SLOT = keccak256(\\\"reentrancy_guard.guard.struct\\\");\\n\\n    struct GuardValue {\\n        bool active;\\n    }\\n\\n    // solhint-disable-next-line payable-fallback\\n    fallback() external {\\n        // We don't revert on fallback to avoid issues in case of a Safe upgrade\\n        // E.g. The expected check method might change and then the Safe would be locked.\\n    }\\n\\n    /**\\n     * @notice Returns the guard value for the current context.\\n     * @dev The guard value is stored in a slot that is unique to the contract instance and the function in which it is called.\\n     * @return guard The guard value.\\n     */\\n    function getGuard() internal pure returns (GuardValue storage guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @notice Called by the Safe contract before a transaction is executed.\\n     * @dev Reverts if reentrancy is detected.\\n     */\\n    function checkTransaction(\\n        address,\\n        uint256,\\n        bytes memory,\\n        Enum.Operation,\\n        uint256,\\n        uint256,\\n        uint256,\\n        address,\\n        // solhint-disable-next-line no-unused-vars\\n        address payable,\\n        bytes memory,\\n        address\\n    ) external override {\\n        GuardValue storage guard = getGuard();\\n        require(!guard.active, \\\"Reentrancy detected\\\");\\n        guard.active = true;\\n    }\\n\\n    /**\\n     * @notice Called by the Safe contract after a transaction is executed.\\n     * @dev Resets the guard value.\\n     */\\n    function checkAfterExecution(bytes32, bool) external override {\\n        getGuard().active = false;\\n    }\\n}\\n\",\"keccak256\":\"0x008e828eeaf4a87e905d85ef7c5904d1aaacccdead074821ca4e6b1a857d1e44\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"checkAfterExecution(bytes32,bool)":{"notice":"Called by the Safe contract after a transaction is executed."},"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)":{"notice":"Called by the Safe contract before a transaction is executed."}},"version":1}}},"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol":{"Migration":{"abi":[{"inputs":[{"internalType":"address","name":"targetSingleton","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"singleton","type":"address"}],"name":"ChangedMasterCopy","type":"event"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationSingleton","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safe120Singleton","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"migrate()":{"details":"This can only be called via a delegatecall."}},"title":"Migration - Migrates a Safe contract from 1.3.0 to 1.2.0","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c060405234801561001057600080fd5b506040516104d43803806104d48339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806104b26022913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250503073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505060805160601c60a05160601c61034861016a6000398060de52806101a752508060ba528061010252506103486000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632e7731851461004657806389f543081461007a5780638fd3ab80146100ae575b600080fd5b61004e6100b8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100826100dc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100b6610100565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156101a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102e36030913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d474960001b30604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052805190602001206006819055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a156fe4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212208265a433c85f106e80e59f3211085423f9a0f1760d7365c427c7b970d922c31264736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x4D4 CODESIZE SUB DUP1 PUSH2 0x4D4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4B2 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x348 PUSH2 0x16A PUSH1 0x0 CODECOPY DUP1 PUSH1 0xDE MSTORE DUP1 PUSH2 0x1A7 MSTORE POP DUP1 PUSH1 0xBA MSTORE DUP1 PUSH2 0x102 MSTORE POP PUSH2 0x348 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 0x2E773185 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x89F54308 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x8FD3AB80 EQ PUSH2 0xAE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0xB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB6 PUSH2 0x100 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E3 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x35AFF83D86937D35B32E04F0DDC6FF469290EEF2F1B692D8A815C89404D4749 PUSH1 0x0 SHL ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP INVALID 0x4D PUSH10 0x67726174696F6E207368 PUSH16 0x756C64206F6E6C792062652063616C6C PUSH6 0x642076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6CA26469706673582212208265A433C85F LT PUSH15 0x80E59F3211085423F9A0F1760D7365 0xC4 0x27 0xC7 0xB9 PUSH17 0xD922C31264736F6C63430007060033496E PUSH23 0x616C69642073696E676C65746F6E206164647265737320 PUSH17 0x726F766964656400000000000000000000 ","sourceMap":"233:1061:26:-:0;;;496:271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;631:1;604:29;;:15;:29;;;;596:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:15;682:34;;;;;;;;;;;;755:4;726:34;;;;;;;;;;;;496:271;233:1061;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"4328":[{"length":32,"start":186},{"length":32,"start":258}],"4330":[{"length":32,"start":222},{"length":32,"start":423}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c80632e7731851461004657806389f543081461007a5780638fd3ab80146100ae575b600080fd5b61004e6100b8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100826100dc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100b6610100565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156101a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102e36030913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d474960001b30604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052805190602001206006819055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a156fe4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212208265a433c85f106e80e59f3211085423f9a0f1760d7365c427c7b970d922c31264736f6c63430007060033","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 0x2E773185 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x89F54308 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x8FD3AB80 EQ PUSH2 0xAE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0xB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB6 PUSH2 0x100 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2E3 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x35AFF83D86937D35B32E04F0DDC6FF469290EEF2F1B692D8A815C89404D4749 PUSH1 0x0 SHL ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP INVALID 0x4D PUSH10 0x67726174696F6E207368 PUSH16 0x756C64206F6E6C792062652063616C6C PUSH6 0x642076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6CA26469706673582212208265A433C85F LT PUSH15 0x80E59F3211085423F9A0F1760D7365 0xC4 0x27 0xC7 0xB9 PUSH17 0xD922C31264736F6C634300070600330000 ","sourceMap":"233:1061:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;399:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;448:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;978:314;;;:::i;:::-;;399:43;;;:::o;448:41::-;;;:::o;978:314::-;1039:18;1022:35;;1030:4;1022:35;;;;1014:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1133:16;1121:9;;:28;;;;;;;;;;;;;;;;;;326:66;1209:25;;1236:4;1198:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1188:54;;;;;;1159:26;:83;;;;1257:28;1275:9;;;;;;;;;;1257:28;;;;;;;;;;;;;;;;;;;;978:314::o"},"gasEstimates":{"creation":{"codeDepositCost":"168000","executionCost":"infinite","totalCost":"infinite"},"external":{"migrate()":"infinite","migrationSingleton()":"infinite","safe120Singleton()":"infinite"}},"methodIdentifiers":{"migrate()":"8fd3ab80","migrationSingleton()":"2e773185","safe120Singleton()":"89f54308"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetSingleton\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"}],\"name\":\"ChangedMasterCopy\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrationSingleton\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safe120Singleton\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"migrate()\":{\"details\":\"This can only be called via a delegatecall.\"}},\"title\":\"Migration - Migrates a Safe contract from 1.3.0 to 1.2.0\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"migrate()\":{\"notice\":\"Migrates the Safe to the Singleton contract at `migrationSingleton`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol\":\"Migration\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../../libraries/SafeStorage.sol\\\";\\n\\n/**\\n * @title Migration - Migrates a Safe contract from 1.3.0 to 1.2.0\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Migration is SafeStorage {\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749;\\n\\n    address public immutable migrationSingleton;\\n    address public immutable safe120Singleton;\\n\\n    constructor(address targetSingleton) {\\n        // Singleton address cannot be zero address.\\n        require(targetSingleton != address(0), \\\"Invalid singleton address provided\\\");\\n        safe120Singleton = targetSingleton;\\n        migrationSingleton = address(this);\\n    }\\n\\n    event ChangedMasterCopy(address singleton);\\n\\n    /**\\n     * @notice Migrates the Safe to the Singleton contract at `migrationSingleton`.\\n     * @dev This can only be called via a delegatecall.\\n     */\\n    function migrate() public {\\n        require(address(this) != migrationSingleton, \\\"Migration should only be called via delegatecall\\\");\\n\\n        singleton = safe120Singleton;\\n        _deprecatedDomainSeparator = keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, this));\\n        emit ChangedMasterCopy(singleton);\\n    }\\n}\\n\",\"keccak256\":\"0x2cb6d7d1aa4e10dacd6fc0bf2a524aaa3193982a1b5a378d679147d7f18cb90a\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":5330,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":5334,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":5338,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":5340,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":5342,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":5344,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":5346,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":5350,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":5356,"contract":"contracts/examples/libraries/Migrate_1_3_0_to_1_2_0.sol:Migration","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"migrate()":{"notice":"Migrates the Safe to the Singleton contract at `migrationSingleton`."}},"version":1}}},"contracts/external/SafeMath.sol":{"SafeMath":{"abi":[],"devdoc":{"kind":"dev","methods":{},"title":"SafeMath","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220edbefc8269fd702dc28be5ef0eac4030c6ed319ab071cfe57d1eda75e1f0dd6464736f6c63430007060033","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 0xED 0xBE 0xFC DUP3 PUSH10 0xFD702DC28BE5EF0EAC40 ADDRESS 0xC6 0xED BALANCE SWAP11 0xB0 PUSH18 0xCFE57D1EDA75E1F0DD6464736F6C63430007 MOD STOP CALLER ","sourceMap":"190:1563:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220edbefc8269fd702dc28be5ef0eac4030c6ed319ab071cfe57d1eda75e1f0dd6464736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xED 0xBE 0xFC DUP3 PUSH10 0xFD702DC28BE5EF0EAC40 ADDRESS 0xC6 0xED BALANCE SWAP11 0xB0 PUSH18 0xCFE57D1EDA75E1F0DD6464736F6C63430007 MOD STOP CALLER ","sourceMap":"190:1563:27:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"97","totalCost":"17297"},"internal":{"add(uint256,uint256)":"infinite","max(uint256,uint256)":"infinite","mul(uint256,uint256)":"infinite","sub(uint256,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeMath\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Math operations with safety checks that revert on error (overflow/underflow)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/external/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Math operations with safety checks that revert on error (overflow/underflow)","version":1}}},"contracts/handler/CompatibilityFallbackHandler.sol":{"CompatibilityFallbackHandler":{"abi":[{"inputs":[{"internalType":"contract Safe","name":"safe","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"encodeMessageDataForSafe","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"message","type":"bytes"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Safe","name":"safe","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"getMessageHashForSafe","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getModules","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dataHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"targetContract","type":"address"},{"internalType":"bytes","name":"calldataPayload","type":"bytes"}],"name":"simulate","outputs":[{"internalType":"bytes","name":"response","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"pure","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"encodeMessageDataForSafe(address,bytes)":{"details":"Returns the pre-image of the message hash (see getMessageHashForSafe).","params":{"message":"Message that should be encoded.","safe":"Safe to which the message is targeted."},"returns":{"_0":"Encoded message."}},"getMessageHash(bytes)":{"details":"Returns the hash of a message to be signed by owners.","params":{"message":"Raw message bytes."},"returns":{"_0":"Message hash."}},"getMessageHashForSafe(address,bytes)":{"details":"Returns hash of a message that can be signed by owners.","params":{"message":"Message that should be hashed.","safe":"Safe to which the message is targeted."},"returns":{"_0":"Message hash."}},"getModules()":{"details":"Returns array of first 10 modules.","returns":{"_0":"Array of modules."}},"isValidSignature(bytes,bytes)":{"details":"Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)","params":{"_data":"Arbitrary length data signed on the behalf of address(msg.sender).","_signature":"Signature byte array associated with _data."},"returns":{"_0":"The EIP-1271 magic value."}},"isValidSignature(bytes32,bytes)":{"params":{"_dataHash":"Hash of the data signed on the behalf of address(msg.sender)","_signature":"Signature byte array associated with _dataHash"},"returns":{"_0":"Updated EIP1271 magic value if signature is valid, otherwise 0x0"}},"simulate(address,bytes)":{"details":"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). Catches revert and returns encoded result as bytes.Inspired by https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol","params":{"calldataPayload":"Calldata that should be sent to the target contract (encoded method name and arguments).","targetContract":"Address of the contract containing the code to execute."}},"supportsInterface(bytes4)":{"params":{"interfaceId":"Id of the interface."},"returns":{"_0":"if the interface is supported."}}},"title":"Compatibility Fallback Handler - Provides compatibility between pre 1.3.0 and 1.3.0+ Safe contracts.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50611605806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b35760003560e01c8063230316401161007157806323031640146106535780636ac24784146107a7578063b2494df314610896578063bc197c81146108f5578063bd61951d14610a8b578063f23a6e6114610b9d576100b3565b806223de29146100b857806301ffc9a7146101f05780630a1028c414610253578063150b7a02146103225780631626ba7e1461041857806320c13b0b146104ce575b600080fd5b6101ee600480360360c08110156100ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561015557600080fd5b82018360208201111561016757600080fd5b8035906020019184600183028401116401000000008311171561018957600080fd5b9091929391929390803590602001906401000000008111156101aa57600080fd5b8201836020820111156101bc57600080fd5b803590602001918460018302840111640100000000831117156101de57600080fd5b9091929391929390505050610c9d565b005b61023b6004803603602081101561020657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610ca7565b60405180821515815260200191505060405180910390f35b61030c6004803603602081101561026957600080fd5b810190808035906020019064010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460018302840111640100000000831117156102ba57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610de1565b6040518082815260200191505060405180910390f35b6103e36004803603608081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561039f57600080fd5b8201836020820111156103b157600080fd5b803590602001918460018302840111640100000000831117156103d357600080fd5b9091929391929390505050610df4565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6104996004803603604081101561042e57600080fd5b81019080803590602001909291908035906020019064010000000081111561045557600080fd5b82018360208201111561046757600080fd5b8035906020019184600183028401116401000000008311171561048957600080fd5b9091929391929390505050610e09565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61061e600480360360408110156104e457600080fd5b810190808035906020019064010000000081111561050157600080fd5b82018360208201111561051357600080fd5b8035906020019184600183028401116401000000008311171561053557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561059857600080fd5b8201836020820111156105aa57600080fd5b803590602001918460018302840111640100000000831117156105cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610fc1565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61072c6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156106a657600080fd5b8201836020820111156106b857600080fd5b803590602001918460018302840111640100000000831117156106da57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611249565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561076c578082015181840152602081019050610751565b50505050905090810190601f1680156107995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610880600480360360408110156107bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156107fa57600080fd5b82018360208201111561080c57600080fd5b8035906020019184600183028401116401000000008311171561082e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113b5565b6040518082815260200191505060405180910390f35b61089e6113d0565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108e15780820151818401526020810190506108c6565b505050509050019250505060405180910390f35b610a56600480360360a081101561090b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561096857600080fd5b82018360208201111561097a57600080fd5b8035906020019184602083028401116401000000008311171561099c57600080fd5b9091929391929390803590602001906401000000008111156109bd57600080fd5b8201836020820111156109cf57600080fd5b803590602001918460208302840111640100000000831117156109f157600080fd5b909192939192939080359060200190640100000000811115610a1257600080fd5b820183602082011115610a2457600080fd5b80359060200191846001830284011164010000000083111715610a4657600080fd5b9091929391929390505050611537565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610b2260048036036040811015610aa157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ade57600080fd5b820183602082011115610af057600080fd5b80359060200191846001830284011164010000000083111715610b1257600080fd5b909192939192939050505061154f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b62578082015181840152602081019050610b47565b50505050905090810190601f168015610b8f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c68600480360360a0811015610bb357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610c2457600080fd5b820183602082011115610c3657600080fd5b80359060200191846001830284011164010000000083111715610c5857600080fd5b90919293919293905050506115b9565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d7257507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dda57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610ded33836113b5565b9050919050565b600063150b7a0260e01b905095945050505050565b60008033905060008173ffffffffffffffffffffffffffffffffffffffff166320c13b0b876040516020018082815260200191505060405160208183030381529060405287876040518463ffffffff1660e01b8152600401808060200180602001838103835286818151815260200191508051906020019080838360005b83811015610ea2578082015181840152602081019050610e87565b50505050905090810190601f168015610ecf5780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b158015610f1a57600080fd5b505afa158015610f2e573d6000803e3d6000fd5b505050506040513d6020811015610f4457600080fd5b810190808051906020019092919050505090506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610fad57600060e01b610fb6565b631626ba7e60e01b5b925050509392505050565b6000803390506000610fd38286611249565b90506000818051906020012090506000855114156110f25760008373ffffffffffffffffffffffffffffffffffffffff16635ae6bd37836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561103e57600080fd5b505afa158015611052573d6000803e3d6000fd5b505050506040513d602081101561106857600080fd5b810190808051906020019092919050505014156110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f48617368206e6f7420617070726f76656400000000000000000000000000000081525060200191505060405180910390fd5b611236565b8273ffffffffffffffffffffffffffffffffffffffff1663934f3a118284886040518463ffffffff1660e01b8152600401808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561116a57808201518184015260208101905061114f565b50505050905090810190601f1680156111975780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156111d05780820151818401526020810190506111b5565b50505050905090810190601f1680156111fd5780820380516001836020036101000a031916815260200191505b509550505050505060006040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050505b6320c13b0b60e01b935050505092915050565b606060007f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b8573ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f857600080fd5b505afa15801561130c573d6000803e3d6000fd5b505050506040513d602081101561132257600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260010183815260200182815260200194505050505060405160208183030381529060405291505092915050565b60006113c18383611249565b80519060200120905092915050565b6060600033905060008173ffffffffffffffffffffffffffffffffffffffff1663cc2f84526001600a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060006040518083038186803b15801561144a57600080fd5b505afa15801561145e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561148857600080fd5b81019080805160405193929190846401000000008211156114a857600080fd5b838201915060208201858111156114be57600080fd5b82518660208202830111640100000000821117156114db57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156115125780820151818401526020810190506114f7565b5050505090500160405260200180519060200190929190505050509050809250505090565b600063bc197c8160e01b905098975050505050505050565b60606040517fb4faba09000000000000000000000000000000000000000000000000000000008152600436036004808301376020600036836000335af15060203d036040519250808301604052806020843e6000516115b057825160208401fd5b50509392505050565b600063f23a6e6160e01b9050969550505050505056fea26469706673582212201b4a724e94687b6683f72064694993023a1b3dbf13a3418c0926ebb253c030fe64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1605 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 0xB3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x23031640 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x23031640 EQ PUSH2 0x653 JUMPI DUP1 PUSH4 0x6AC24784 EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0xB2494DF3 EQ PUSH2 0x896 JUMPI DUP1 PUSH4 0xBC197C81 EQ PUSH2 0x8F5 JUMPI DUP1 PUSH4 0xBD61951D EQ PUSH2 0xA8B JUMPI DUP1 PUSH4 0xF23A6E61 EQ PUSH2 0xB9D JUMPI PUSH2 0xB3 JUMP JUMPDEST DUP1 PUSH3 0x23DE29 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0xA1028C4 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x322 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0x4CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1EE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xC9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x23B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xCA7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x30C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xDE1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3E3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xDF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x499 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x489 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xE09 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xFC1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x72C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x1249 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x76C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x751 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x799 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 0x880 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x82E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x13B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x89E PUSH2 0x13D0 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8E1 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x8C6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA56 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x90B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x968 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x97A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x99C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x9F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB22 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xAA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xADE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x154F JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0xB62 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xB47 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB8F 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 0xC68 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xBB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x15B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x4E2312E000000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0xD72 JUMPI POP PUSH32 0x150B7A0200000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST DUP1 PUSH2 0xDDA JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDED CALLER DUP4 PUSH2 0x13B5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x20C13B0B DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP8 DUP8 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 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 0xEA2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE87 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xECF 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 DUP4 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0xFAD JUMPI PUSH1 0x0 PUSH1 0xE0 SHL PUSH2 0xFB6 JUMP JUMPDEST PUSH4 0x1626BA7E PUSH1 0xE0 SHL JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER SWAP1 POP PUSH1 0x0 PUSH2 0xFD3 DUP3 DUP7 PUSH2 0x1249 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP6 MLOAD EQ ISZERO PUSH2 0x10F2 JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5AE6BD37 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x103E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1052 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1068 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP EQ ISZERO PUSH2 0x10ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x48617368206E6F7420617070726F766564000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1236 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x934F3A11 DUP3 DUP5 DUP9 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 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 0x116A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x114F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1197 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 DUP4 DUP2 SUB DUP3 MSTORE DUP5 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 0x11D0 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11FD 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 SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x121D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1231 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH4 0x20C13B0B PUSH1 0xE0 SHL SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x60B3CBF8B4A223D68D641B3B6DDF9A298E7F33710CF3D3A9D1146B5A6150FBCA PUSH1 0x0 SHL DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF698DA25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x130C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13C1 DUP4 DUP4 PUSH2 0x1249 JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCC2F8452 PUSH1 0x1 PUSH1 0xA PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x144A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x145E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1488 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 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x14BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x14DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1512 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x14F7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP SWAP1 POP DUP1 SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xBC197C81 PUSH1 0xE0 SHL SWAP1 POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD PUSH32 0xB4FABA0900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 CALLDATASIZE SUB PUSH1 0x4 DUP1 DUP4 ADD CALLDATACOPY PUSH1 0x20 PUSH1 0x0 CALLDATASIZE DUP4 PUSH1 0x0 CALLER GAS CALL POP PUSH1 0x20 RETURNDATASIZE SUB PUSH1 0x40 MLOAD SWAP3 POP DUP1 DUP4 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP5 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH2 0x15B0 JUMPI DUP3 MLOAD PUSH1 0x20 DUP5 ADD REVERT JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xF23A6E61 PUSH1 0xE0 SHL SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x4A PUSH19 0x4E94687B6683F72064694993023A1B3DBF13A3 COINBASE DUP13 MULMOD 0x26 0xEB 0xB2 MSTORE8 0xC0 ADDRESS INVALID PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"343:7385:28:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100b35760003560e01c8063230316401161007157806323031640146106535780636ac24784146107a7578063b2494df314610896578063bc197c81146108f5578063bd61951d14610a8b578063f23a6e6114610b9d576100b3565b806223de29146100b857806301ffc9a7146101f05780630a1028c414610253578063150b7a02146103225780631626ba7e1461041857806320c13b0b146104ce575b600080fd5b6101ee600480360360c08110156100ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561015557600080fd5b82018360208201111561016757600080fd5b8035906020019184600183028401116401000000008311171561018957600080fd5b9091929391929390803590602001906401000000008111156101aa57600080fd5b8201836020820111156101bc57600080fd5b803590602001918460018302840111640100000000831117156101de57600080fd5b9091929391929390505050610c9d565b005b61023b6004803603602081101561020657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610ca7565b60405180821515815260200191505060405180910390f35b61030c6004803603602081101561026957600080fd5b810190808035906020019064010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460018302840111640100000000831117156102ba57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610de1565b6040518082815260200191505060405180910390f35b6103e36004803603608081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561039f57600080fd5b8201836020820111156103b157600080fd5b803590602001918460018302840111640100000000831117156103d357600080fd5b9091929391929390505050610df4565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6104996004803603604081101561042e57600080fd5b81019080803590602001909291908035906020019064010000000081111561045557600080fd5b82018360208201111561046757600080fd5b8035906020019184600183028401116401000000008311171561048957600080fd5b9091929391929390505050610e09565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61061e600480360360408110156104e457600080fd5b810190808035906020019064010000000081111561050157600080fd5b82018360208201111561051357600080fd5b8035906020019184600183028401116401000000008311171561053557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561059857600080fd5b8201836020820111156105aa57600080fd5b803590602001918460018302840111640100000000831117156105cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610fc1565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61072c6004803603604081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156106a657600080fd5b8201836020820111156106b857600080fd5b803590602001918460018302840111640100000000831117156106da57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611249565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561076c578082015181840152602081019050610751565b50505050905090810190601f1680156107995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610880600480360360408110156107bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156107fa57600080fd5b82018360208201111561080c57600080fd5b8035906020019184600183028401116401000000008311171561082e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113b5565b6040518082815260200191505060405180910390f35b61089e6113d0565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108e15780820151818401526020810190506108c6565b505050509050019250505060405180910390f35b610a56600480360360a081101561090b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561096857600080fd5b82018360208201111561097a57600080fd5b8035906020019184602083028401116401000000008311171561099c57600080fd5b9091929391929390803590602001906401000000008111156109bd57600080fd5b8201836020820111156109cf57600080fd5b803590602001918460208302840111640100000000831117156109f157600080fd5b909192939192939080359060200190640100000000811115610a1257600080fd5b820183602082011115610a2457600080fd5b80359060200191846001830284011164010000000083111715610a4657600080fd5b9091929391929390505050611537565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610b2260048036036040811015610aa157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ade57600080fd5b820183602082011115610af057600080fd5b80359060200191846001830284011164010000000083111715610b1257600080fd5b909192939192939050505061154f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b62578082015181840152602081019050610b47565b50505050905090810190601f168015610b8f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c68600480360360a0811015610bb357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610c2457600080fd5b820183602082011115610c3657600080fd5b80359060200191846001830284011164010000000083111715610c5857600080fd5b90919293919293905050506115b9565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d7257507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dda57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610ded33836113b5565b9050919050565b600063150b7a0260e01b905095945050505050565b60008033905060008173ffffffffffffffffffffffffffffffffffffffff166320c13b0b876040516020018082815260200191505060405160208183030381529060405287876040518463ffffffff1660e01b8152600401808060200180602001838103835286818151815260200191508051906020019080838360005b83811015610ea2578082015181840152602081019050610e87565b50505050905090810190601f168015610ecf5780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b158015610f1a57600080fd5b505afa158015610f2e573d6000803e3d6000fd5b505050506040513d6020811015610f4457600080fd5b810190808051906020019092919050505090506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610fad57600060e01b610fb6565b631626ba7e60e01b5b925050509392505050565b6000803390506000610fd38286611249565b90506000818051906020012090506000855114156110f25760008373ffffffffffffffffffffffffffffffffffffffff16635ae6bd37836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561103e57600080fd5b505afa158015611052573d6000803e3d6000fd5b505050506040513d602081101561106857600080fd5b810190808051906020019092919050505014156110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f48617368206e6f7420617070726f76656400000000000000000000000000000081525060200191505060405180910390fd5b611236565b8273ffffffffffffffffffffffffffffffffffffffff1663934f3a118284886040518463ffffffff1660e01b8152600401808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561116a57808201518184015260208101905061114f565b50505050905090810190601f1680156111975780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156111d05780820151818401526020810190506111b5565b50505050905090810190601f1680156111fd5780820380516001836020036101000a031916815260200191505b509550505050505060006040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050505b6320c13b0b60e01b935050505092915050565b606060007f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b8573ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f857600080fd5b505afa15801561130c573d6000803e3d6000fd5b505050506040513d602081101561132257600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260010183815260200182815260200194505050505060405160208183030381529060405291505092915050565b60006113c18383611249565b80519060200120905092915050565b6060600033905060008173ffffffffffffffffffffffffffffffffffffffff1663cc2f84526001600a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060006040518083038186803b15801561144a57600080fd5b505afa15801561145e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561148857600080fd5b81019080805160405193929190846401000000008211156114a857600080fd5b838201915060208201858111156114be57600080fd5b82518660208202830111640100000000821117156114db57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156115125780820151818401526020810190506114f7565b5050505090500160405260200180519060200190929190505050509050809250505090565b600063bc197c8160e01b905098975050505050505050565b60606040517fb4faba09000000000000000000000000000000000000000000000000000000008152600436036004808301376020600036836000335af15060203d036040519250808301604052806020843e6000516115b057825160208401fd5b50509392505050565b600063f23a6e6160e01b9050969550505050505056fea26469706673582212201b4a724e94687b6683f72064694993023a1b3dbf13a3418c0926ebb253c030fe64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x23031640 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x23031640 EQ PUSH2 0x653 JUMPI DUP1 PUSH4 0x6AC24784 EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0xB2494DF3 EQ PUSH2 0x896 JUMPI DUP1 PUSH4 0xBC197C81 EQ PUSH2 0x8F5 JUMPI DUP1 PUSH4 0xBD61951D EQ PUSH2 0xA8B JUMPI DUP1 PUSH4 0xF23A6E61 EQ PUSH2 0xB9D JUMPI PUSH2 0xB3 JUMP JUMPDEST DUP1 PUSH3 0x23DE29 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0xA1028C4 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x322 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0x4CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1EE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xC9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x23B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xCA7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x30C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xDE1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3E3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xDF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x499 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x489 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xE09 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xFC1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x72C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x1249 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x76C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x751 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x799 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 0x880 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x82E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x13B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x89E PUSH2 0x13D0 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8E1 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x8C6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA56 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x90B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x968 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x97A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x99C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x9F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB22 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xAA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xADE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x154F JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0xB62 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xB47 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB8F 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 0xC68 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xBB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x15B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x4E2312E000000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0xD72 JUMPI POP PUSH32 0x150B7A0200000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST DUP1 PUSH2 0xDDA JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDED CALLER DUP4 PUSH2 0x13B5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x20C13B0B DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP8 DUP8 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 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 0xEA2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE87 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xECF 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 DUP4 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0xFAD JUMPI PUSH1 0x0 PUSH1 0xE0 SHL PUSH2 0xFB6 JUMP JUMPDEST PUSH4 0x1626BA7E PUSH1 0xE0 SHL JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER SWAP1 POP PUSH1 0x0 PUSH2 0xFD3 DUP3 DUP7 PUSH2 0x1249 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP6 MLOAD EQ ISZERO PUSH2 0x10F2 JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5AE6BD37 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x103E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1052 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1068 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP EQ ISZERO PUSH2 0x10ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x48617368206E6F7420617070726F766564000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1236 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x934F3A11 DUP3 DUP5 DUP9 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 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 0x116A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x114F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1197 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 DUP4 DUP2 SUB DUP3 MSTORE DUP5 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 0x11D0 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11FD 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 SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x121D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1231 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH4 0x20C13B0B PUSH1 0xE0 SHL SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x60B3CBF8B4A223D68D641B3B6DDF9A298E7F33710CF3D3A9D1146B5A6150FBCA PUSH1 0x0 SHL DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF698DA25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x130C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13C1 DUP4 DUP4 PUSH2 0x1249 JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCC2F8452 PUSH1 0x1 PUSH1 0xA PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x144A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x145E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1488 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 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x14BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x14DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1512 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x14F7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP SWAP1 POP DUP1 SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xBC197C81 PUSH1 0xE0 SHL SWAP1 POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD PUSH32 0xB4FABA0900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 CALLDATASIZE SUB PUSH1 0x4 DUP1 DUP4 ADD CALLDATACOPY PUSH1 0x20 PUSH1 0x0 CALLDATASIZE DUP4 PUSH1 0x0 CALLER GAS CALL POP PUSH1 0x20 RETURNDATASIZE SUB PUSH1 0x40 MLOAD SWAP3 POP DUP1 DUP4 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP5 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH2 0x15B0 JUMPI DUP3 MLOAD PUSH1 0x20 DUP5 ADD REVERT JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xF23A6E61 PUSH1 0xE0 SHL SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x4A PUSH19 0x4E94687B6683F72064694993023A1B3DBF13A3 COINBASE DUP13 MULMOD 0x26 0xEB 0xB2 MSTORE8 0xC0 ADDRESS INVALID PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"343:7385:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1553:199:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1977:306;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1925:157:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1301:143:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3374:350:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1187:580;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2331:307;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2868:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3826:259;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:226:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;4664:3062:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;656:153:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1553:199;;;;;;;;;:::o;1977:306::-;2064:4;2114:38;2099:53;;;:11;:53;;;;:121;;;;2183:37;2168:52;;;:11;:52;;;;2099:121;:177;;;;2251:25;2236:40;;;:11;:40;;;;2099:177;2080:196;;1977:306;;;:::o;1925:157:28:-;1992:7;2018:57;2053:10;2067:7;2018:21;:57::i;:::-;2011:64;;1925:157;;;:::o;1301:143:30:-;1402:6;1427:10;1420:17;;;;1301:143;;;;;;;:::o;3374:350:28:-;3469:6;3487:29;3539:10;3487:63;;3560:12;3575:9;:26;;;3613:9;3602:21;;;;;;;;;;;;;;;;;;;;;;;;;3625:10;;3575:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3560:76;;223:10:35;3663:19:28;;3654:28;;;:5;:28;;;;3653:64;;3715:1;3708:9;;3653:64;;;804:10;3686:19;;3653:64;3646:71;;;;3374:350;;;;;:::o;1187:580::-;1288:6;1341:9;1366:10;1341:37;;1388:24;1415:37;1440:4;1446:5;1415:24;:37::i;:::-;1388:64;;1462:19;1494:11;1484:22;;;;;;1462:44;;1541:1;1520:10;:17;:22;1516:209;;;1602:1;1566:4;:19;;;1586:11;1566:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:37;;1558:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1516:209;;;1656:4;:20;;;1677:11;1690;1703:10;1656:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1516:209;223:10:35;1741:19:28;;1734:26;;;;;1187:580;;;;:::o;2331:307::-;2419:12;2443:23;525:66;2490:17;;2519:7;2509:18;;;;;;2479:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2469:60;;;;;;2443:86;;2570:4;2563:12;;2584:4;2577:12;;2591:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2615:15;2546:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:92;;;2331:307;;;;:::o;2868:168::-;2953:7;2989:39;3014:4;3020:7;2989:24;:39::i;:::-;2979:50;;;;;;2972:57;;2868:168;;;;:::o;3826:259::-;3871:16;3934:9;3959:10;3934:37;;3982:22;4010:4;:24;;;747:3;4053:2;4010:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3981:75;;;4073:5;4066:12;;;;3826:259;:::o;948:226:30:-;1132:6;1157:10;1150:17;;;;948:226;;;;;;;;;;:::o;4664:3062:28:-;4756:21;5157:4;5151:11;5351:18;5333:16;5326:44;5835:4;5819:14;5815:25;5809:4;5802;5784:16;5780:27;5767:74;6974:4;6948;6466:14;6428:16;6405:1;6375:8;6248:5;6222:774;6201:809;7445:4;7427:16;7423:27;7481:4;7475:11;7463:23;;7526:12;7516:8;7512:27;7506:4;7499:41;7584:12;7578:4;7568:8;7553:44;7627:4;7621:11;7611:2;;7686:8;7680:15;7673:4;7663:8;7659:19;7652:44;7611:2;5113:2607;;;;;;;:::o;656:153:30:-;767:6;792:10;785:17;;;;656:153;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"1127400","executionCost":"1174","totalCost":"1128574"},"external":{"encodeMessageDataForSafe(address,bytes)":"infinite","getMessageHash(bytes)":"infinite","getMessageHashForSafe(address,bytes)":"infinite","getModules()":"infinite","isValidSignature(bytes,bytes)":"infinite","isValidSignature(bytes32,bytes)":"infinite","onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"962","onERC1155Received(address,address,uint256,uint256,bytes)":"704","onERC721Received(address,address,uint256,bytes)":"632","simulate(address,bytes)":"infinite","supportsInterface(bytes4)":"454","tokensReceived(address,address,address,uint256,bytes,bytes)":"694"}},"methodIdentifiers":{"encodeMessageDataForSafe(address,bytes)":"23031640","getMessageHash(bytes)":"0a1028c4","getMessageHashForSafe(address,bytes)":"6ac24784","getModules()":"b2494df3","isValidSignature(bytes,bytes)":"20c13b0b","isValidSignature(bytes32,bytes)":"1626ba7e","onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61","onERC721Received(address,address,uint256,bytes)":"150b7a02","simulate(address,bytes)":"bd61951d","supportsInterface(bytes4)":"01ffc9a7","tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Safe\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"encodeMessageDataForSafe\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Safe\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"getMessageHashForSafe\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getModules\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"response\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"encodeMessageDataForSafe(address,bytes)\":{\"details\":\"Returns the pre-image of the message hash (see getMessageHashForSafe).\",\"params\":{\"message\":\"Message that should be encoded.\",\"safe\":\"Safe to which the message is targeted.\"},\"returns\":{\"_0\":\"Encoded message.\"}},\"getMessageHash(bytes)\":{\"details\":\"Returns the hash of a message to be signed by owners.\",\"params\":{\"message\":\"Raw message bytes.\"},\"returns\":{\"_0\":\"Message hash.\"}},\"getMessageHashForSafe(address,bytes)\":{\"details\":\"Returns hash of a message that can be signed by owners.\",\"params\":{\"message\":\"Message that should be hashed.\",\"safe\":\"Safe to which the message is targeted.\"},\"returns\":{\"_0\":\"Message hash.\"}},\"getModules()\":{\"details\":\"Returns array of first 10 modules.\",\"returns\":{\"_0\":\"Array of modules.\"}},\"isValidSignature(bytes,bytes)\":{\"details\":\"Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)\",\"params\":{\"_data\":\"Arbitrary length data signed on the behalf of address(msg.sender).\",\"_signature\":\"Signature byte array associated with _data.\"},\"returns\":{\"_0\":\"The EIP-1271 magic value.\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"_dataHash\":\"Hash of the data signed on the behalf of address(msg.sender)\",\"_signature\":\"Signature byte array associated with _dataHash\"},\"returns\":{\"_0\":\"Updated EIP1271 magic value if signature is valid, otherwise 0x0\"}},\"simulate(address,bytes)\":{\"details\":\"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). Catches revert and returns encoded result as bytes.Inspired by https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\",\"params\":{\"calldataPayload\":\"Calldata that should be sent to the target contract (encoded method name and arguments).\",\"targetContract\":\"Address of the contract containing the code to execute.\"}},\"supportsInterface(bytes4)\":{\"params\":{\"interfaceId\":\"Id of the interface.\"},\"returns\":{\"_0\":\"if the interface is supported.\"}}},\"title\":\"Compatibility Fallback Handler - Provides compatibility between pre 1.3.0 and 1.3.0+ Safe contracts.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isValidSignature(bytes,bytes)\":{\"notice\":\"Legacy EIP-1271 signature validation method.\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Implementation of updated EIP-1271 signature validation method.\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Handles ERC1155 Token batch callback. return Standardized onERC1155BatchReceived return value.\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Handles ERC1155 Token callback. return Standardized onERC1155Received return value.\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Handles ERC721 Token callback.  return Standardized onERC721Received return value.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165.\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Handles ERC777 Token callback. return nothing (not standardized)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/handler/CompatibilityFallbackHandler.sol\":\"CompatibilityFallbackHandler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/handler/CompatibilityFallbackHandler.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./TokenCallbackHandler.sol\\\";\\nimport \\\"../interfaces/ISignatureValidator.sol\\\";\\nimport \\\"../Safe.sol\\\";\\n\\n/**\\n * @title Compatibility Fallback Handler - Provides compatibility between pre 1.3.0 and 1.3.0+ Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract CompatibilityFallbackHandler is TokenCallbackHandler, ISignatureValidator {\\n    // keccak256(\\\"SafeMessage(bytes message)\\\");\\n    bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;\\n\\n    bytes4 internal constant SIMULATE_SELECTOR = bytes4(keccak256(\\\"simulate(address,bytes)\\\"));\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n    bytes4 internal constant UPDATED_MAGIC_VALUE = 0x1626ba7e;\\n\\n    /**\\n     * @notice Legacy EIP-1271 signature validation method.\\n     * @dev Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)\\n     * @param _data Arbitrary length data signed on the behalf of address(msg.sender).\\n     * @param _signature Signature byte array associated with _data.\\n     * @return The EIP-1271 magic value.\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view override returns (bytes4) {\\n        // Caller should be a Safe\\n        Safe safe = Safe(payable(msg.sender));\\n        bytes memory messageData = encodeMessageDataForSafe(safe, _data);\\n        bytes32 messageHash = keccak256(messageData);\\n        if (_signature.length == 0) {\\n            require(safe.signedMessages(messageHash) != 0, \\\"Hash not approved\\\");\\n        } else {\\n            safe.checkSignatures(messageHash, messageData, _signature);\\n        }\\n        return EIP1271_MAGIC_VALUE;\\n    }\\n\\n    /**\\n     * @dev Returns the hash of a message to be signed by owners.\\n     * @param message Raw message bytes.\\n     * @return Message hash.\\n     */\\n    function getMessageHash(bytes memory message) public view returns (bytes32) {\\n        return getMessageHashForSafe(Safe(payable(msg.sender)), message);\\n    }\\n\\n    /**\\n     * @dev Returns the pre-image of the message hash (see getMessageHashForSafe).\\n     * @param safe Safe to which the message is targeted.\\n     * @param message Message that should be encoded.\\n     * @return Encoded message.\\n     */\\n    function encodeMessageDataForSafe(Safe safe, bytes memory message) public view returns (bytes memory) {\\n        bytes32 safeMessageHash = keccak256(abi.encode(SAFE_MSG_TYPEHASH, keccak256(message)));\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), safe.domainSeparator(), safeMessageHash);\\n    }\\n\\n    /**\\n     * @dev Returns hash of a message that can be signed by owners.\\n     * @param safe Safe to which the message is targeted.\\n     * @param message Message that should be hashed.\\n     * @return Message hash.\\n     */\\n    function getMessageHashForSafe(Safe safe, bytes memory message) public view returns (bytes32) {\\n        return keccak256(encodeMessageDataForSafe(safe, message));\\n    }\\n\\n    /**\\n     * @notice Implementation of updated EIP-1271 signature validation method.\\n     * @param _dataHash Hash of the data signed on the behalf of address(msg.sender)\\n     * @param _signature Signature byte array associated with _dataHash\\n     * @return Updated EIP1271 magic value if signature is valid, otherwise 0x0\\n     */\\n    function isValidSignature(bytes32 _dataHash, bytes calldata _signature) external view returns (bytes4) {\\n        ISignatureValidator validator = ISignatureValidator(msg.sender);\\n        bytes4 value = validator.isValidSignature(abi.encode(_dataHash), _signature);\\n        return (value == EIP1271_MAGIC_VALUE) ? UPDATED_MAGIC_VALUE : bytes4(0);\\n    }\\n\\n    /**\\n     * @dev Returns array of first 10 modules.\\n     * @return Array of modules.\\n     */\\n    function getModules() external view returns (address[] memory) {\\n        // Caller should be a Safe\\n        Safe safe = Safe(payable(msg.sender));\\n        (address[] memory array, ) = safe.getModulesPaginated(SENTINEL_MODULES, 10);\\n        return array;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static). Catches revert and returns encoded result as bytes.\\n     * @dev Inspired by https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulate(address targetContract, bytes calldata calldataPayload) external returns (bytes memory response) {\\n        /**\\n         * Suppress compiler warnings about not using parameters, while allowing\\n         * parameters to keep names for documentation purposes. This does not\\n         * generate code.\\n         */\\n        targetContract;\\n        calldataPayload;\\n\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let internalCalldata := mload(0x40)\\n            /**\\n             * Store `simulateAndRevert.selector`.\\n             * String representation is used to force right padding\\n             */\\n            mstore(internalCalldata, \\\"\\\\xb4\\\\xfa\\\\xba\\\\x09\\\")\\n            /**\\n             * Abuse the fact that both this and the internal methods have the\\n             * same signature, and differ only in symbol name (and therefore,\\n             * selector) and copy calldata directly. This saves us approximately\\n             * 250 bytes of code and 300 gas at runtime over the\\n             * `abi.encodeWithSelector` builtin.\\n             */\\n            calldatacopy(add(internalCalldata, 0x04), 0x04, sub(calldatasize(), 0x04))\\n\\n            /**\\n             * `pop` is required here by the compiler, as top level expressions\\n             * can't have return values in inline assembly. `call` typically\\n             * returns a 0 or 1 value indicated whether or not it reverted, but\\n             * since we know it will always revert, we can safely ignore it.\\n             */\\n            pop(\\n                call(\\n                    gas(),\\n                    // address() has been changed to caller() to use the implementation of the Safe\\n                    caller(),\\n                    0,\\n                    internalCalldata,\\n                    calldatasize(),\\n                    /**\\n                     * The `simulateAndRevert` call always reverts, and\\n                     * instead encodes whether or not it was successful in the return\\n                     * data. The first 32-byte word of the return data contains the\\n                     * `success` value, so write it to memory address 0x00 (which is\\n                     * reserved Solidity scratch space and OK to use).\\n                     */\\n                    0x00,\\n                    0x20\\n                )\\n            )\\n\\n            /**\\n             * Allocate and copy the response bytes, making sure to increment\\n             * the free memory pointer accordingly (in case this method is\\n             * called as an internal function). The remaining `returndata[0x20:]`\\n             * contains the ABI encoded response bytes, so we can just write it\\n             * as is to memory.\\n             */\\n            let responseSize := sub(returndatasize(), 0x20)\\n            response := mload(0x40)\\n            mstore(0x40, add(response, responseSize))\\n            returndatacopy(response, 0x20, responseSize)\\n\\n            if iszero(mload(0x00)) {\\n                revert(add(response, 0x20), mload(response))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3eee5c142041e92895d45f8e9acb9ac2203b0ac39418e8d2971e78bf0775bcf7\",\"license\":\"LGPL-3.0-only\"},\"contracts/handler/TokenCallbackHandler.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../interfaces/ERC1155TokenReceiver.sol\\\";\\nimport \\\"../interfaces/ERC721TokenReceiver.sol\\\";\\nimport \\\"../interfaces/ERC777TokensRecipient.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\n/**\\n * @title Default Callback Handler - Handles supported tokens' callbacks, allowing Safes receiving these tokens.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract TokenCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 {\\n    /**\\n     * @notice Handles ERC1155 Token callback.\\n     * return Standardized onERC1155Received return value.\\n     */\\n    function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure override returns (bytes4) {\\n        return 0xf23a6e61;\\n    }\\n\\n    /**\\n     * @notice Handles ERC1155 Token batch callback.\\n     * return Standardized onERC1155BatchReceived return value.\\n     */\\n    function onERC1155BatchReceived(\\n        address,\\n        address,\\n        uint256[] calldata,\\n        uint256[] calldata,\\n        bytes calldata\\n    ) external pure override returns (bytes4) {\\n        return 0xbc197c81;\\n    }\\n\\n    /**\\n     * @notice Handles ERC721 Token callback.\\n     *  return Standardized onERC721Received return value.\\n     */\\n    function onERC721Received(address, address, uint256, bytes calldata) external pure override returns (bytes4) {\\n        return 0x150b7a02;\\n    }\\n\\n    /**\\n     * @notice Handles ERC777 Token callback.\\n     * return nothing (not standardized)\\n     */\\n    function tokensReceived(address, address, address, uint256, bytes calldata, bytes calldata) external pure override {\\n        // We implement this for completeness, doesn't really have any value\\n    }\\n\\n    /**\\n     * @notice Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165.\\n     * @param interfaceId Id of the interface.\\n     * @return if the interface is supported.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(ERC1155TokenReceiver).interfaceId ||\\n            interfaceId == type(ERC721TokenReceiver).interfaceId ||\\n            interfaceId == type(IERC165).interfaceId;\\n    }\\n}\\n\",\"keccak256\":\"0xc8fb9e60f5e561c7e4992a396e928344c278c2fbec8af65aebec44281542e7cb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ERC1155TokenReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n// Note: The ERC-165 identifier for this interface is 0x4e2312e0.\\ninterface ERC1155TokenReceiver {\\n    /**\\n     * @notice Handle the receipt of a single ERC1155 token type.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61) if it accepts the transfer.\\n     *      This function MUST revert if it rejects the transfer.\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _id        The ID of the token being transferred.\\n     * @param _value     The amount of tokens being transferred.\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`.\\n     */\\n    function onERC1155Received(\\n        address _operator,\\n        address _from,\\n        uint256 _id,\\n        uint256 _value,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n\\n    /**\\n     * @notice Handle the receipt of multiple ERC1155 token types.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).\\n     *      This function MUST revert if it rejects the transfer(s).\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the batch transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _ids       An array containing ids of each token being transferred (order and length must match _values array).\\n     * @param _values    An array containing amounts of each token being transferred (order and length must match _ids array).\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`.\\n     */\\n    function onERC1155BatchReceived(\\n        address _operator,\\n        address _from,\\n        uint256[] calldata _ids,\\n        uint256[] calldata _values,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x87e62665c041cade64e753ecdccf931cb100ab6e4bcc98769c1e6474be9db493\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ERC721TokenReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.\\ninterface ERC721TokenReceiver {\\n    /**\\n     * @notice Handle the receipt of an NFT\\n     * @dev The ERC721 smart contract calls this function on the recipient\\n     *  after a `transfer`. This function MAY throw to revert and reject the\\n     *  transfer. Return of other than the magic value MUST result in the\\n     *  transaction being reverted.\\n     *  Note: the contract address is always the message sender.\\n     * @param _operator The address which called `safeTransferFrom` function.\\n     * @param _from The address which previously owned the token.\\n     * @param _tokenId The NFT identifier which is being transferred.\\n     * @param _data Additional data with no specified format.\\n     * @return `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`.\\n     *  unless throwing\\n     */\\n    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x96c4c5457fede2d4c6012011dfda36f8e8ffdb7388468f2dddb35661538bf479\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ERC777TokensRecipient.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title ERC777TokensRecipient\\n * @dev Interface for contracts that will be called with the ERC777 token's `tokensReceived` method.\\n * The contract receiving the tokens must implement this interface in order to receive the tokens.\\n */\\ninterface ERC777TokensRecipient {\\n    /**\\n     * @dev Called by the ERC777 token contract after a successful transfer or a minting operation.\\n     * @param operator The address of the operator performing the transfer or minting operation.\\n     * @param from The address of the sender.\\n     * @param to The address of the recipient.\\n     * @param amount The amount of tokens that were transferred or minted.\\n     * @param data Additional data that was passed during the transfer or minting operation.\\n     * @param operatorData Additional data that was passed by the operator during the transfer or minting operation.\\n     */\\n    function tokensReceived(\\n        address operator,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        bytes calldata data,\\n        bytes calldata operatorData\\n    ) external;\\n}\\n\",\"keccak256\":\"0x32ca7f1610659f35e52f5a989e1d844b7847ad57fab06e0cae5bc027248536ac\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"isValidSignature(bytes,bytes)":{"notice":"Legacy EIP-1271 signature validation method."},"isValidSignature(bytes32,bytes)":{"notice":"Implementation of updated EIP-1271 signature validation method."},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Handles ERC1155 Token batch callback. return Standardized onERC1155BatchReceived return value."},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Handles ERC1155 Token callback. return Standardized onERC1155Received return value."},"onERC721Received(address,address,uint256,bytes)":{"notice":"Handles ERC721 Token callback.  return Standardized onERC721Received return value."},"supportsInterface(bytes4)":{"notice":"Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165."},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Handles ERC777 Token callback. return nothing (not standardized)"}},"version":1}}},"contracts/handler/HandlerContext.sol":{"HandlerContext":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","details":"The fallback manager appends the following context to the calldata:      1. Fallback manager caller address (non-padded) based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/f8cc8b844a9f92f63dc55aa581f7d643a1bc5ac1/contracts/metatx/ERC2771Context.sol","kind":"dev","methods":{},"title":"Handler Context - Allows the fallback handler to extract addition context from the calldata","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"details\":\"The fallback manager appends the following context to the calldata:      1. Fallback manager caller address (non-padded) based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/f8cc8b844a9f92f63dc55aa581f7d643a1bc5ac1/contracts/metatx/ERC2771Context.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Handler Context - Allows the fallback handler to extract addition context from the calldata\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/handler/HandlerContext.sol\":\"HandlerContext\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/handler/HandlerContext.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Handler Context - Allows the fallback handler to extract addition context from the calldata\\n * @dev The fallback manager appends the following context to the calldata:\\n *      1. Fallback manager caller address (non-padded)\\n * based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/f8cc8b844a9f92f63dc55aa581f7d643a1bc5ac1/contracts/metatx/ERC2771Context.sol\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract HandlerContext {\\n    /**\\n     * @notice Allows fetching the original caller address.\\n     * @dev This is only reliable in combination with a FallbackManager that supports this (e.g. Safe contract >=1.3.0).\\n     *      When using this functionality make sure that the linked _manager (aka msg.sender) supports this.\\n     *      This function does not rely on a trusted forwarder. Use the returned value only to\\n     *      check information against the calling manager.\\n     * @return sender Original caller address.\\n     */\\n    function _msgSender() internal pure returns (address sender) {\\n        // The assembly code is more direct than the Solidity version using `abi.decode`.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sender := shr(96, calldataload(sub(calldatasize(), 20)))\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the FallbackManager address\\n     * @return Fallback manager address\\n     */\\n    function _manager() internal view returns (address) {\\n        return msg.sender;\\n    }\\n}\\n\",\"keccak256\":\"0xce6da4c47f8691a4fcf07d20266b1a23ea757e49eedbfcf929f535f3f6e8072d\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/handler/TokenCallbackHandler.sol":{"TokenCallbackHandler":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"pure","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"supportsInterface(bytes4)":{"params":{"interfaceId":"Id of the interface."},"returns":{"_0":"if the interface is supported."}}},"title":"Default Callback Handler - Handles supported tokens' callbacks, allowing Safes receiving these tokens.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061073f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100565760003560e01c806223de291461005b57806301ffc9a714610193578063150b7a02146101f6578063bc197c81146102ec578063f23a6e6114610482575b600080fd5b610191600480360360c081101561007157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b90919293919293908035906020019064010000000081111561014d57600080fd5b82018360208201111561015f57600080fd5b8035906020019184600183028401116401000000008311171561018157600080fd5b9091929391929390505050610582565b005b6101de600480360360208110156101a957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061058c565b60405180821515815260200191505060405180910390f35b6102b76004803603608081101561020c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561027357600080fd5b82018360208201111561028557600080fd5b803590602001918460018302840111640100000000831117156102a757600080fd5b90919293919293905050506106c6565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61044d600480360360a081101561030257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561035f57600080fd5b82018360208201111561037157600080fd5b8035906020019184602083028401116401000000008311171561039357600080fd5b9091929391929390803590602001906401000000008111156103b457600080fd5b8201836020820111156103c657600080fd5b803590602001918460208302840111640100000000831117156103e857600080fd5b90919293919293908035906020019064010000000081111561040957600080fd5b82018360208201111561041b57600080fd5b8035906020019184600183028401116401000000008311171561043d57600080fd5b90919293919293905050506106db565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61054d600480360360a081101561049857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561050957600080fd5b82018360208201111561051b57600080fd5b8035906020019184600183028401116401000000008311171561053d57600080fd5b90919293919293905050506106f3565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065757507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106bf57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600063150b7a0260e01b905095945050505050565b600063bc197c8160e01b905098975050505050505050565b600063f23a6e6160e01b9050969550505050505056fea2646970667358221220f62cd059f3672bb04062df149e7ae71534a8512cca0172e695d98a43cff0c53564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x73F 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 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0x23DE29 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xBC197C81 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0xF23A6E61 EQ PUSH2 0x482 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x191 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x14D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x582 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1DE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x58C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6C6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x44D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x54D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x4E2312E000000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x657 JUMPI POP PUSH32 0x150B7A0200000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST DUP1 PUSH2 0x6BF JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xBC197C81 PUSH1 0xE0 SHL SWAP1 POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xF23A6E61 PUSH1 0xE0 SHL SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF6 0x2C 0xD0 MSIZE RETURN PUSH8 0x2BB04062DF149E7A 0xE7 ISZERO CALLVALUE 0xA8 MLOAD 0x2C 0xCA ADD PUSH19 0xE695D98A43CFF0C53564736F6C634300070600 CALLER ","sourceMap":"421:1864:30:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100565760003560e01c806223de291461005b57806301ffc9a714610193578063150b7a02146101f6578063bc197c81146102ec578063f23a6e6114610482575b600080fd5b610191600480360360c081101561007157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b90919293919293908035906020019064010000000081111561014d57600080fd5b82018360208201111561015f57600080fd5b8035906020019184600183028401116401000000008311171561018157600080fd5b9091929391929390505050610582565b005b6101de600480360360208110156101a957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061058c565b60405180821515815260200191505060405180910390f35b6102b76004803603608081101561020c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561027357600080fd5b82018360208201111561028557600080fd5b803590602001918460018302840111640100000000831117156102a757600080fd5b90919293919293905050506106c6565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61044d600480360360a081101561030257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561035f57600080fd5b82018360208201111561037157600080fd5b8035906020019184602083028401116401000000008311171561039357600080fd5b9091929391929390803590602001906401000000008111156103b457600080fd5b8201836020820111156103c657600080fd5b803590602001918460208302840111640100000000831117156103e857600080fd5b90919293919293908035906020019064010000000081111561040957600080fd5b82018360208201111561041b57600080fd5b8035906020019184600183028401116401000000008311171561043d57600080fd5b90919293919293905050506106db565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b61054d600480360360a081101561049857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561050957600080fd5b82018360208201111561051b57600080fd5b8035906020019184600183028401116401000000008311171561053d57600080fd5b90919293919293905050506106f3565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065757507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106bf57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600063150b7a0260e01b905095945050505050565b600063bc197c8160e01b905098975050505050505050565b600063f23a6e6160e01b9050969550505050505056fea2646970667358221220f62cd059f3672bb04062df149e7ae71534a8512cca0172e695d98a43cff0c53564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0x23DE29 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xBC197C81 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0xF23A6E61 EQ PUSH2 0x482 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x191 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x14D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x582 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1DE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x58C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6C6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x44D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x54D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x4E2312E000000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x657 JUMPI POP PUSH32 0x150B7A0200000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST DUP1 PUSH2 0x6BF JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xBC197C81 PUSH1 0xE0 SHL SWAP1 POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xF23A6E61 PUSH1 0xE0 SHL SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF6 0x2C 0xD0 MSIZE RETURN PUSH8 0x2BB04062DF149E7A 0xE7 ISZERO CALLVALUE 0xA8 MLOAD 0x2C 0xCA ADD PUSH19 0xE695D98A43CFF0C53564736F6C634300070600 CALLER ","sourceMap":"421:1864:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1553:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1977:306;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1301:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;948:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;656:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1553:199;;;;;;;;;:::o;1977:306::-;2064:4;2114:38;2099:53;;;:11;:53;;;;:121;;;;2183:37;2168:52;;;:11;:52;;;;2099:121;:177;;;;2251:25;2236:40;;;:11;:40;;;;2099:177;2080:196;;1977:306;;;:::o;1301:143::-;1402:6;1427:10;1420:17;;;;1301:143;;;;;;;:::o;948:226::-;1132:6;1157:10;1150:17;;;;948:226;;;;;;;;;;:::o;656:153::-;767:6;792:10;785:17;;;;656:153;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"371000","executionCost":"405","totalCost":"371405"},"external":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"940","onERC1155Received(address,address,uint256,uint256,bytes)":"660","onERC721Received(address,address,uint256,bytes)":"587","supportsInterface(bytes4)":"431","tokensReceived(address,address,address,uint256,bytes,bytes)":"671"}},"methodIdentifiers":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61","onERC721Received(address,address,uint256,bytes)":"150b7a02","supportsInterface(bytes4)":"01ffc9a7","tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"params\":{\"interfaceId\":\"Id of the interface.\"},\"returns\":{\"_0\":\"if the interface is supported.\"}}},\"title\":\"Default Callback Handler - Handles supported tokens' callbacks, allowing Safes receiving these tokens.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Handles ERC1155 Token batch callback. return Standardized onERC1155BatchReceived return value.\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Handles ERC1155 Token callback. return Standardized onERC1155Received return value.\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Handles ERC721 Token callback.  return Standardized onERC721Received return value.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165.\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Handles ERC777 Token callback. return nothing (not standardized)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/handler/TokenCallbackHandler.sol\":\"TokenCallbackHandler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/handler/TokenCallbackHandler.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../interfaces/ERC1155TokenReceiver.sol\\\";\\nimport \\\"../interfaces/ERC721TokenReceiver.sol\\\";\\nimport \\\"../interfaces/ERC777TokensRecipient.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\n/**\\n * @title Default Callback Handler - Handles supported tokens' callbacks, allowing Safes receiving these tokens.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract TokenCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 {\\n    /**\\n     * @notice Handles ERC1155 Token callback.\\n     * return Standardized onERC1155Received return value.\\n     */\\n    function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure override returns (bytes4) {\\n        return 0xf23a6e61;\\n    }\\n\\n    /**\\n     * @notice Handles ERC1155 Token batch callback.\\n     * return Standardized onERC1155BatchReceived return value.\\n     */\\n    function onERC1155BatchReceived(\\n        address,\\n        address,\\n        uint256[] calldata,\\n        uint256[] calldata,\\n        bytes calldata\\n    ) external pure override returns (bytes4) {\\n        return 0xbc197c81;\\n    }\\n\\n    /**\\n     * @notice Handles ERC721 Token callback.\\n     *  return Standardized onERC721Received return value.\\n     */\\n    function onERC721Received(address, address, uint256, bytes calldata) external pure override returns (bytes4) {\\n        return 0x150b7a02;\\n    }\\n\\n    /**\\n     * @notice Handles ERC777 Token callback.\\n     * return nothing (not standardized)\\n     */\\n    function tokensReceived(address, address, address, uint256, bytes calldata, bytes calldata) external pure override {\\n        // We implement this for completeness, doesn't really have any value\\n    }\\n\\n    /**\\n     * @notice Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165.\\n     * @param interfaceId Id of the interface.\\n     * @return if the interface is supported.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(ERC1155TokenReceiver).interfaceId ||\\n            interfaceId == type(ERC721TokenReceiver).interfaceId ||\\n            interfaceId == type(IERC165).interfaceId;\\n    }\\n}\\n\",\"keccak256\":\"0xc8fb9e60f5e561c7e4992a396e928344c278c2fbec8af65aebec44281542e7cb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ERC1155TokenReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n// Note: The ERC-165 identifier for this interface is 0x4e2312e0.\\ninterface ERC1155TokenReceiver {\\n    /**\\n     * @notice Handle the receipt of a single ERC1155 token type.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61) if it accepts the transfer.\\n     *      This function MUST revert if it rejects the transfer.\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _id        The ID of the token being transferred.\\n     * @param _value     The amount of tokens being transferred.\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`.\\n     */\\n    function onERC1155Received(\\n        address _operator,\\n        address _from,\\n        uint256 _id,\\n        uint256 _value,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n\\n    /**\\n     * @notice Handle the receipt of multiple ERC1155 token types.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).\\n     *      This function MUST revert if it rejects the transfer(s).\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the batch transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _ids       An array containing ids of each token being transferred (order and length must match _values array).\\n     * @param _values    An array containing amounts of each token being transferred (order and length must match _ids array).\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`.\\n     */\\n    function onERC1155BatchReceived(\\n        address _operator,\\n        address _from,\\n        uint256[] calldata _ids,\\n        uint256[] calldata _values,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x87e62665c041cade64e753ecdccf931cb100ab6e4bcc98769c1e6474be9db493\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ERC721TokenReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.\\ninterface ERC721TokenReceiver {\\n    /**\\n     * @notice Handle the receipt of an NFT\\n     * @dev The ERC721 smart contract calls this function on the recipient\\n     *  after a `transfer`. This function MAY throw to revert and reject the\\n     *  transfer. Return of other than the magic value MUST result in the\\n     *  transaction being reverted.\\n     *  Note: the contract address is always the message sender.\\n     * @param _operator The address which called `safeTransferFrom` function.\\n     * @param _from The address which previously owned the token.\\n     * @param _tokenId The NFT identifier which is being transferred.\\n     * @param _data Additional data with no specified format.\\n     * @return `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`.\\n     *  unless throwing\\n     */\\n    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x96c4c5457fede2d4c6012011dfda36f8e8ffdb7388468f2dddb35661538bf479\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ERC777TokensRecipient.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title ERC777TokensRecipient\\n * @dev Interface for contracts that will be called with the ERC777 token's `tokensReceived` method.\\n * The contract receiving the tokens must implement this interface in order to receive the tokens.\\n */\\ninterface ERC777TokensRecipient {\\n    /**\\n     * @dev Called by the ERC777 token contract after a successful transfer or a minting operation.\\n     * @param operator The address of the operator performing the transfer or minting operation.\\n     * @param from The address of the sender.\\n     * @param to The address of the recipient.\\n     * @param amount The amount of tokens that were transferred or minted.\\n     * @param data Additional data that was passed during the transfer or minting operation.\\n     * @param operatorData Additional data that was passed by the operator during the transfer or minting operation.\\n     */\\n    function tokensReceived(\\n        address operator,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        bytes calldata data,\\n        bytes calldata operatorData\\n    ) external;\\n}\\n\",\"keccak256\":\"0x32ca7f1610659f35e52f5a989e1d844b7847ad57fab06e0cae5bc027248536ac\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Handles ERC1155 Token batch callback. return Standardized onERC1155BatchReceived return value."},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Handles ERC1155 Token callback. return Standardized onERC1155Received return value."},"onERC721Received(address,address,uint256,bytes)":{"notice":"Handles ERC721 Token callback.  return Standardized onERC721Received return value."},"supportsInterface(bytes4)":{"notice":"Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165."},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Handles ERC777 Token callback. return nothing (not standardized)"}},"version":1}}},"contracts/interfaces/ERC1155TokenReceiver.sol":{"ERC1155TokenReceiver":{"abi":[{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"details":"An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.      This function MUST return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).      This function MUST revert if it rejects the transfer(s).      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.","params":{"_data":"Additional data with no specified format.","_from":"The address which previously owned the token.","_ids":"An array containing ids of each token being transferred (order and length must match _values array).","_operator":"The address which initiated the batch transfer (i.e. msg.sender).","_values":"An array containing amounts of each token being transferred (order and length must match _ids array)."},"returns":{"_0":"`bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`."}},"onERC1155Received(address,address,uint256,uint256,bytes)":{"details":"An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.      This function MUST return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61) if it accepts the transfer.      This function MUST revert if it rejects the transfer.      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.","params":{"_data":"Additional data with no specified format.","_from":"The address which previously owned the token.","_id":"The ID of the token being transferred.","_operator":"The address which initiated the transfer (i.e. msg.sender).","_value":"The amount of tokens being transferred."},"returns":{"_0":"`bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`."}}},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.      This function MUST return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).      This function MUST revert if it rejects the transfer(s).      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\",\"params\":{\"_data\":\"Additional data with no specified format.\",\"_from\":\"The address which previously owned the token.\",\"_ids\":\"An array containing ids of each token being transferred (order and length must match _values array).\",\"_operator\":\"The address which initiated the batch transfer (i.e. msg.sender).\",\"_values\":\"An array containing amounts of each token being transferred (order and length must match _ids array).\"},\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`.\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.      This function MUST return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61) if it accepts the transfer.      This function MUST revert if it rejects the transfer.      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\",\"params\":{\"_data\":\"Additional data with no specified format.\",\"_from\":\"The address which previously owned the token.\",\"_id\":\"The ID of the token being transferred.\",\"_operator\":\"The address which initiated the transfer (i.e. msg.sender).\",\"_value\":\"The amount of tokens being transferred.\"},\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Handle the receipt of multiple ERC1155 token types.\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Handle the receipt of a single ERC1155 token type.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ERC1155TokenReceiver.sol\":\"ERC1155TokenReceiver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC1155TokenReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n// Note: The ERC-165 identifier for this interface is 0x4e2312e0.\\ninterface ERC1155TokenReceiver {\\n    /**\\n     * @notice Handle the receipt of a single ERC1155 token type.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61) if it accepts the transfer.\\n     *      This function MUST revert if it rejects the transfer.\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _id        The ID of the token being transferred.\\n     * @param _value     The amount of tokens being transferred.\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`.\\n     */\\n    function onERC1155Received(\\n        address _operator,\\n        address _from,\\n        uint256 _id,\\n        uint256 _value,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n\\n    /**\\n     * @notice Handle the receipt of multiple ERC1155 token types.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).\\n     *      This function MUST revert if it rejects the transfer(s).\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the batch transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _ids       An array containing ids of each token being transferred (order and length must match _values array).\\n     * @param _values    An array containing amounts of each token being transferred (order and length must match _ids array).\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`.\\n     */\\n    function onERC1155BatchReceived(\\n        address _operator,\\n        address _from,\\n        uint256[] calldata _ids,\\n        uint256[] calldata _values,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x87e62665c041cade64e753ecdccf931cb100ab6e4bcc98769c1e6474be9db493\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Handle the receipt of multiple ERC1155 token types."},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Handle the receipt of a single ERC1155 token type."}},"version":1}}},"contracts/interfaces/ERC721TokenReceiver.sol":{"ERC721TokenReceiver":{"abi":[{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Note: the ERC-165 identifier for this interface is 0x150b7a02.","kind":"dev","methods":{"onERC721Received(address,address,uint256,bytes)":{"details":"The ERC721 smart contract calls this function on the recipient  after a `transfer`. This function MAY throw to revert and reject the  transfer. Return of other than the magic value MUST result in the  transaction being reverted.  Note: the contract address is always the message sender.","params":{"_data":"Additional data with no specified format.","_from":"The address which previously owned the token.","_operator":"The address which called `safeTransferFrom` function.","_tokenId":"The NFT identifier which is being transferred."},"returns":{"_0":"`bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`.  unless throwing"}}},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"onERC721Received(address,address,uint256,bytes)":"150b7a02"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note: the ERC-165 identifier for this interface is 0x150b7a02.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"The ERC721 smart contract calls this function on the recipient  after a `transfer`. This function MAY throw to revert and reject the  transfer. Return of other than the magic value MUST result in the  transaction being reverted.  Note: the contract address is always the message sender.\",\"params\":{\"_data\":\"Additional data with no specified format.\",\"_from\":\"The address which previously owned the token.\",\"_operator\":\"The address which called `safeTransferFrom` function.\",\"_tokenId\":\"The NFT identifier which is being transferred.\"},\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`.  unless throwing\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Handle the receipt of an NFT\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ERC721TokenReceiver.sol\":\"ERC721TokenReceiver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC721TokenReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.\\ninterface ERC721TokenReceiver {\\n    /**\\n     * @notice Handle the receipt of an NFT\\n     * @dev The ERC721 smart contract calls this function on the recipient\\n     *  after a `transfer`. This function MAY throw to revert and reject the\\n     *  transfer. Return of other than the magic value MUST result in the\\n     *  transaction being reverted.\\n     *  Note: the contract address is always the message sender.\\n     * @param _operator The address which called `safeTransferFrom` function.\\n     * @param _from The address which previously owned the token.\\n     * @param _tokenId The NFT identifier which is being transferred.\\n     * @param _data Additional data with no specified format.\\n     * @return `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`.\\n     *  unless throwing\\n     */\\n    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x96c4c5457fede2d4c6012011dfda36f8e8ffdb7388468f2dddb35661538bf479\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"onERC721Received(address,address,uint256,bytes)":{"notice":"Handle the receipt of an NFT"}},"version":1}}},"contracts/interfaces/ERC777TokensRecipient.sol":{"ERC777TokensRecipient":{"abi":[{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface for contracts that will be called with the ERC777 token's `tokensReceived` method. The contract receiving the tokens must implement this interface in order to receive the tokens.","kind":"dev","methods":{"tokensReceived(address,address,address,uint256,bytes,bytes)":{"details":"Called by the ERC777 token contract after a successful transfer or a minting operation.","params":{"amount":"The amount of tokens that were transferred or minted.","data":"Additional data that was passed during the transfer or minting operation.","from":"The address of the sender.","operator":"The address of the operator performing the transfer or minting operation.","operatorData":"Additional data that was passed by the operator during the transfer or minting operation.","to":"The address of the recipient."}}},"title":"ERC777TokensRecipient","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for contracts that will be called with the ERC777 token's `tokensReceived` method. The contract receiving the tokens must implement this interface in order to receive the tokens.\",\"kind\":\"dev\",\"methods\":{\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"details\":\"Called by the ERC777 token contract after a successful transfer or a minting operation.\",\"params\":{\"amount\":\"The amount of tokens that were transferred or minted.\",\"data\":\"Additional data that was passed during the transfer or minting operation.\",\"from\":\"The address of the sender.\",\"operator\":\"The address of the operator performing the transfer or minting operation.\",\"operatorData\":\"Additional data that was passed by the operator during the transfer or minting operation.\",\"to\":\"The address of the recipient.\"}}},\"title\":\"ERC777TokensRecipient\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ERC777TokensRecipient.sol\":\"ERC777TokensRecipient\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ERC777TokensRecipient.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title ERC777TokensRecipient\\n * @dev Interface for contracts that will be called with the ERC777 token's `tokensReceived` method.\\n * The contract receiving the tokens must implement this interface in order to receive the tokens.\\n */\\ninterface ERC777TokensRecipient {\\n    /**\\n     * @dev Called by the ERC777 token contract after a successful transfer or a minting operation.\\n     * @param operator The address of the operator performing the transfer or minting operation.\\n     * @param from The address of the sender.\\n     * @param to The address of the recipient.\\n     * @param amount The amount of tokens that were transferred or minted.\\n     * @param data Additional data that was passed during the transfer or minting operation.\\n     * @param operatorData Additional data that was passed by the operator during the transfer or minting operation.\\n     */\\n    function tokensReceived(\\n        address operator,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        bytes calldata data,\\n        bytes calldata operatorData\\n    ) external;\\n}\\n\",\"keccak256\":\"0x32ca7f1610659f35e52f5a989e1d844b7847ad57fab06e0cae5bc027248536ac\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/interfaces/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding EIP section https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol","version":1}}},"contracts/interfaces/ISignatureValidator.sol":{"ISignatureValidator":{"abi":[{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"isValidSignature(bytes,bytes)":{"params":{"_data":"Arbitrary length data signed on the behalf of address(this).","_signature":"Signature byte array associated with _data. MUST return the bytes4 magic value 0x20c13b0b when function passes. MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5) MUST allow external calls"}}},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"isValidSignature(bytes,bytes)":"20c13b0b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isValidSignature(bytes,bytes)\":{\"params\":{\"_data\":\"Arbitrary length data signed on the behalf of address(this).\",\"_signature\":\"Signature byte array associated with _data. MUST return the bytes4 magic value 0x20c13b0b when function passes. MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5) MUST allow external calls\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isValidSignature(bytes,bytes)\":{\"notice\":\"Legacy EIP1271 method to validate a signature.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ISignatureValidator.sol\":\"ISignatureValidator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"isValidSignature(bytes,bytes)":{"notice":"Legacy EIP1271 method to validate a signature."}},"version":1}},"ISignatureValidatorConstants":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212203615497132de5030615c9512b13fb6dd2def86745a8c743d2776c6f56e468de564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE ISZERO 0x49 PUSH18 0x32DE5030615C9512B13FB6DD2DEF86745A8C PUSH21 0x3D2776C6F56E468DE564736F6C6343000706003300 ","sourceMap":"75:161:35:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212203615497132de5030615c9512b13fb6dd2def86745a8c743d2776c6f56e468de564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE ISZERO 0x49 PUSH18 0x32DE5030615C9512B13FB6DD2DEF86745A8C PUSH21 0x3D2776C6F56E468DE564736F6C6343000706003300 ","sourceMap":"75:161:35:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"66","totalCost":"12666"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ISignatureValidator.sol\":\"ISignatureValidatorConstants\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/interfaces/ViewStorageAccessible.sol":{"ViewStorageAccessible":{"abi":[{"inputs":[{"internalType":"address","name":"targetContract","type":"address"},{"internalType":"bytes","name":"calldataPayload","type":"bytes"}],"name":"simulate","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"simulate(address,bytes)":{"details":"Same as `simulate` on StorageAccessible. Marked as view so that it can be called from external contracts that want to run simulations from within view functions. Will revert if the invoked simulation attempts to change state."}},"title":"ViewStorageAccessible - Interface on top of StorageAccessible base class to allow simulations from view functions.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"simulate(address,bytes)":"bd61951d"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"simulate(address,bytes)\":{\"details\":\"Same as `simulate` on StorageAccessible. Marked as view so that it can be called from external contracts that want to run simulations from within view functions. Will revert if the invoked simulation attempts to change state.\"}},\"title\":\"ViewStorageAccessible - Interface on top of StorageAccessible base class to allow simulations from view functions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Adjusted version of https://github.com/gnosis/util-contracts/blob/3db1e531cb243a48ea91c60a800d537c1000612a/contracts/StorageAccessible.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ViewStorageAccessible.sol\":\"ViewStorageAccessible\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ViewStorageAccessible.sol\":{\"content\":\"pragma solidity >=0.5.0 <0.9.0;\\n\\n/// @title ViewStorageAccessible - Interface on top of StorageAccessible base class to allow simulations from view functions.\\n/// @notice Adjusted version of https://github.com/gnosis/util-contracts/blob/3db1e531cb243a48ea91c60a800d537c1000612a/contracts/StorageAccessible.sol\\ninterface ViewStorageAccessible {\\n    /**\\n     * @dev Same as `simulate` on StorageAccessible. Marked as view so that it can be called from external contracts\\n     * that want to run simulations from within view functions. Will revert if the invoked simulation attempts to change state.\\n     */\\n    function simulate(address targetContract, bytes calldata calldataPayload) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x4ba84a42d82986735a5edfa512b71f5150d41c0bad712e62783bc05c9d78b0da\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Adjusted version of https://github.com/gnosis/util-contracts/blob/3db1e531cb243a48ea91c60a800d537c1000612a/contracts/StorageAccessible.sol","version":1}}},"contracts/libraries/CreateCall.sol":{"CreateCall":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newContract","type":"address"}],"name":"ContractCreation","type":"event"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"deploymentData","type":"bytes"}],"name":"performCreate","outputs":[{"internalType":"address","name":"newContract","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"deploymentData","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"performCreate2","outputs":[{"internalType":"address","name":"newContract","type":"address"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"performCreate(uint256,bytes)":{"params":{"deploymentData":"The initialisation code of the contract to be created.","value":"The value in wei to be sent with the contract creation."},"returns":{"newContract":"The address of the newly created contract."}},"performCreate2(uint256,bytes,bytes32)":{"params":{"deploymentData":"The initialisation code of the contract to be created.","salt":"The salt value to use for the contract creation.","value":"The value in wei to be sent with the contract creation."},"returns":{"newContract":"The address of the newly created contract."}}},"title":"Create Call - Allows to use the different create opcodes to deploy a contract.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061044b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634847be6f1461003b5780634c8c9ea114610134575b600080fd5b6101086004803603606081101561005157600080fd5b81019080803590602001909291908035906020019064010000000081111561007857600080fd5b82018360208201111561008a57600080fd5b803590602001918460018302840111640100000000831117156100ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610223565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f76004803603604081101561014a57600080fd5b81019080803590602001909291908035906020019064010000000081111561017157600080fd5b82018360208201111561018357600080fd5b803590602001918460018302840111640100000000831117156101a557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061031d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008183518460200186f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156102d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f756c64206e6f74206465706c6f7920636f6e74726163740000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51160405160405180910390a29392505050565b600081516020830184f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f756c64206e6f74206465706c6f7920636f6e74726163740000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51160405160405180910390a29291505056fea26469706673582212204f5b682b785a4bde69d22ce13d07ddd6c58ec565b71a1a95733b0ee584b5e47864736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B 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 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4847BE6F EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x4C8C9EA1 EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x108 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x223 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x31D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 DUP4 MLOAD DUP5 PUSH1 0x20 ADD DUP7 CREATE2 SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x436F756C64206E6F74206465706C6F7920636F6E747261637400000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4DB17DD5E4732FB6DA34A148104A592783CA119A1E7BB8829EBA6CBADEF0B511 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP5 CREATE SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x436F756C64206E6F74206465706C6F7920636F6E747261637400000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4DB17DD5E4732FB6DA34A148104A592783CA119A1E7BB8829EBA6CBADEF0B511 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F JUMPDEST PUSH9 0x2B785A4BDE69D22CE1 RETURNDATASIZE SMOD 0xDD 0xD6 0xC5 DUP15 0xC5 PUSH6 0xB71A1A95733B 0xE 0xE5 DUP5 0xB5 0xE4 PUSH25 0x64736F6C634300070600330000000000000000000000000000 ","sourceMap":"325:1664:37:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c80634847be6f1461003b5780634c8c9ea114610134575b600080fd5b6101086004803603606081101561005157600080fd5b81019080803590602001909291908035906020019064010000000081111561007857600080fd5b82018360208201111561008a57600080fd5b803590602001918460018302840111640100000000831117156100ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610223565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f76004803603604081101561014a57600080fd5b81019080803590602001909291908035906020019064010000000081111561017157600080fd5b82018360208201111561018357600080fd5b803590602001918460018302840111640100000000831117156101a557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061031d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008183518460200186f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156102d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f756c64206e6f74206465706c6f7920636f6e74726163740000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51160405160405180910390a29392505050565b600081516020830184f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f756c64206e6f74206465706c6f7920636f6e74726163740000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51160405160405180910390a29291505056fea26469706673582212204f5b682b785a4bde69d22ce13d07ddd6c58ec565b71a1a95733b0ee584b5e47864736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4847BE6F EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x4C8C9EA1 EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x108 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x223 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x31D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 DUP4 MLOAD DUP5 PUSH1 0x20 ADD DUP7 CREATE2 SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x436F756C64206E6F74206465706C6F7920636F6E747261637400000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4DB17DD5E4732FB6DA34A148104A592783CA119A1E7BB8829EBA6CBADEF0B511 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP5 CREATE SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x436F756C64206E6F74206465706C6F7920636F6E747261637400000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4DB17DD5E4732FB6DA34A148104A592783CA119A1E7BB8829EBA6CBADEF0B511 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F JUMPDEST PUSH9 0x2B785A4BDE69D22CE1 RETURNDATASIZE SMOD 0xDD 0xD6 0xC5 DUP15 0xC5 PUSH6 0xB71A1A95733B 0xE 0xE5 DUP5 0xB5 0xE4 PUSH25 0x64736F6C634300070600330000000000000000000000000000 ","sourceMap":"325:1664:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;842:426;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1583:404;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;842:426;940:19;1130:4;1113:14;1107:21;1090:14;1084:4;1080:25;1073:5;1065:70;1050:85;;1185:1;1162:25;;:11;:25;;;;1154:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1249:11;1232:29;;;;;;;;;;;;842:426;;;;;:::o;1583:404::-;1666:19;1838:14;1832:21;1825:4;1809:14;1805:25;1798:5;1791:63;1776:78;;1904:1;1881:25;;:11;:25;;;;1873:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:11;1951:29;;;;;;;;;;;;1583:404;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"219800","executionCost":"263","totalCost":"220063"},"external":{"performCreate(uint256,bytes)":"infinite","performCreate2(uint256,bytes,bytes32)":"infinite"}},"methodIdentifiers":{"performCreate(uint256,bytes)":"4c8c9ea1","performCreate2(uint256,bytes,bytes32)":"4847be6f"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newContract\",\"type\":\"address\"}],\"name\":\"ContractCreation\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"deploymentData\",\"type\":\"bytes\"}],\"name\":\"performCreate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"deploymentData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"performCreate2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"performCreate(uint256,bytes)\":{\"params\":{\"deploymentData\":\"The initialisation code of the contract to be created.\",\"value\":\"The value in wei to be sent with the contract creation.\"},\"returns\":{\"newContract\":\"The address of the newly created contract.\"}},\"performCreate2(uint256,bytes,bytes32)\":{\"params\":{\"deploymentData\":\"The initialisation code of the contract to be created.\",\"salt\":\"The salt value to use for the contract creation.\",\"value\":\"The value in wei to be sent with the contract creation.\"},\"returns\":{\"newContract\":\"The address of the newly created contract.\"}}},\"title\":\"Create Call - Allows to use the different create opcodes to deploy a contract.\",\"version\":1},\"userdoc\":{\"events\":{\"ContractCreation(address)\":{\"notice\":\"Emitted when a new contract is created\"}},\"kind\":\"user\",\"methods\":{\"performCreate(uint256,bytes)\":{\"notice\":\"Deploys a new contract using the create opcode.\"},\"performCreate2(uint256,bytes,bytes32)\":{\"notice\":\"Deploys a new contract using the create2 opcode.\"}},\"notice\":\"This contract provides functions for deploying a new contract using the create and create2 opcodes.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/CreateCall.sol\":\"CreateCall\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/CreateCall.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Create Call - Allows to use the different create opcodes to deploy a contract.\\n * @author Richard Meissner - @rmeissner\\n * @notice This contract provides functions for deploying a new contract using the create and create2 opcodes.\\n */\\ncontract CreateCall {\\n    /// @notice Emitted when a new contract is created\\n    event ContractCreation(address indexed newContract);\\n\\n    /**\\n     * @notice Deploys a new contract using the create2 opcode.\\n     * @param value The value in wei to be sent with the contract creation.\\n     * @param deploymentData The initialisation code of the contract to be created.\\n     * @param salt The salt value to use for the contract creation.\\n     * @return newContract The address of the newly created contract.\\n     */\\n    function performCreate2(uint256 value, bytes memory deploymentData, bytes32 salt) public returns (address newContract) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            newContract := create2(value, add(0x20, deploymentData), mload(deploymentData), salt)\\n        }\\n        require(newContract != address(0), \\\"Could not deploy contract\\\");\\n        emit ContractCreation(newContract);\\n    }\\n\\n    /**\\n     * @notice Deploys a new contract using the create opcode.\\n     * @param value The value in wei to be sent with the contract creation.\\n     * @param deploymentData The initialisation code of the contract to be created.\\n     * @return newContract The address of the newly created contract.\\n     */\\n    function performCreate(uint256 value, bytes memory deploymentData) public returns (address newContract) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            newContract := create(value, add(deploymentData, 0x20), mload(deploymentData))\\n        }\\n        require(newContract != address(0), \\\"Could not deploy contract\\\");\\n        emit ContractCreation(newContract);\\n    }\\n}\\n\",\"keccak256\":\"0x868f7d9b935ce8f71ef71da05ff40c4795fd4ccf55e03ed802b6e01979b863f8\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"ContractCreation(address)":{"notice":"Emitted when a new contract is created"}},"kind":"user","methods":{"performCreate(uint256,bytes)":{"notice":"Deploys a new contract using the create opcode."},"performCreate2(uint256,bytes,bytes32)":{"notice":"Deploys a new contract using the create2 opcode."}},"notice":"This contract provides functions for deploying a new contract using the create and create2 opcodes.","version":1}}},"contracts/libraries/MultiSend.sol":{"MultiSend":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Nick Dodson - <nick.dodson@consensys.net>Gonçalo Sá - <goncalo.sa@consensys.net>Stefan George - @Georgi87Richard Meissner - @rmeissner","kind":"dev","methods":{"multiSend(bytes)":{"details":"Sends multiple transactions and reverts all if one fails.","params":{"transactions":"Encoded transactions. Each transaction is encoded as a packed bytes of                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),                     to as a address (=> 20 bytes),                     value as a uint256 (=> 32 bytes),                     data length as a uint256 (=> 32 bytes),                     data as bytes.                     see abi.encodePacked for more information on packed encoding"}}},"title":"Multi Send - Allows to batch multiple transactions into one.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60a060405234801561001057600080fd5b503073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060805160601c6102756100646000398060e052506102756000f3fe60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102106030913960400191505060405180910390fd5b805160205b8181101561020a578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101cd57600181146101dd576101e8565b6000808585888a5af191506101e8565b6000808585895af491505b5060008114156101f757600080fd5b8260550187019650505050505050610188565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca264697066735822122021102e6d5bc1da75411b41fe2792a1748bf5c49c794e51e81405ccd2399da13564736f6c63430007060033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0x275 PUSH2 0x64 PUSH1 0x0 CODECOPY DUP1 PUSH1 0xE0 MSTORE POP PUSH2 0x275 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D80FF0A EQ PUSH2 0x23 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xDE JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x183 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x210 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x20A JUMPI DUP1 DUP4 ADD MLOAD PUSH1 0xF8 SHR PUSH1 0x1 DUP3 ADD DUP5 ADD MLOAD PUSH1 0x60 SHR PUSH1 0x15 DUP4 ADD DUP6 ADD MLOAD PUSH1 0x35 DUP5 ADD DUP7 ADD MLOAD PUSH1 0x55 DUP6 ADD DUP8 ADD PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 EQ PUSH2 0x1CD JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x1DD JUMPI PUSH2 0x1E8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP9 DUP11 GAS CALL SWAP2 POP PUSH2 0x1E8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP10 GAS DELEGATECALL SWAP2 POP JUMPDEST POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x55 ADD DUP8 ADD SWAP7 POP POP POP POP POP POP POP PUSH2 0x188 JUMP JUMPDEST POP POP POP JUMP INVALID 0x4D PUSH22 0x6C746953656E642073686F756C64206F6E6C79206265 KECCAK256 PUSH4 0x616C6C65 PUSH5 0x2076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6CA264697066735822122021102E6D5BC1 0xDA PUSH22 0x411B41FE2792A1748BF5C49C794E51E81405CCD2399D LOG1 CALLDATALOAD PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"338:3110:38:-:0;;;414:65;;;;;;;;;;467:4;438:34;;;;;;;;;;;;338:3110;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5093":[{"length":32,"start":224}]},"linkReferences":{},"object":"60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102106030913960400191505060405180910390fd5b805160205b8181101561020a578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101cd57600181146101dd576101e8565b6000808585888a5af191506101e8565b6000808585895af491505b5060008114156101f757600080fd5b8260550187019650505050505050610188565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca264697066735822122021102e6d5bc1da75411b41fe2792a1748bf5c49c794e51e81405ccd2399da13564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D80FF0A EQ PUSH2 0x23 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xDE JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x183 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x210 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x20A JUMPI DUP1 DUP4 ADD MLOAD PUSH1 0xF8 SHR PUSH1 0x1 DUP3 ADD DUP5 ADD MLOAD PUSH1 0x60 SHR PUSH1 0x15 DUP4 ADD DUP6 ADD MLOAD PUSH1 0x35 DUP5 ADD DUP7 ADD MLOAD PUSH1 0x55 DUP6 ADD DUP8 ADD PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 EQ PUSH2 0x1CD JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x1DD JUMPI PUSH2 0x1E8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP9 DUP11 GAS CALL SWAP2 POP PUSH2 0x1E8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP10 GAS DELEGATECALL SWAP2 POP JUMPDEST POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x55 ADD DUP8 ADD SWAP7 POP POP POP POP POP POP POP PUSH2 0x188 JUMP JUMPDEST POP POP POP JUMP INVALID 0x4D PUSH22 0x6C746953656E642073686F756C64206F6E6C79206265 KECCAK256 PUSH4 0x616C6C65 PUSH5 0x2076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6CA264697066735822122021102E6D5BC1 0xDA PUSH22 0x411B41FE2792A1748BF5C49C794E51E81405CCD2399D LOG1 CALLDATALOAD PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"338:3110:38:-:0;;;;;;;;;;;;;;;;;;;;;1286:2160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1382:18;1365:35;;1373:4;1365:35;;;;1357:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1562:12;1556:19;1597:4;1614:1816;1697:6;1694:1;1691:13;1614:1816;;;2088:1;2074:12;2070:20;2064:27;2058:4;2054:38;2362:4;2359:1;2355:12;2341;2337:31;2331:38;2325:4;2321:49;2524:4;2521:1;2517:12;2503;2499:31;2493:38;2707:4;2704:1;2700:12;2686;2682:31;2676:38;2901:4;2898:1;2894:12;2880;2876:31;2939:1;2964:9;2995:1;2990:104;;;;3116:1;3111:105;;;;2957:259;;2990:104;3074:1;3071;3059:10;3053:4;3046:5;3042:2;3035:5;3030:46;3019:57;;2990:104;;3111:105;3196:1;3193;3181:10;3175:4;3171:2;3164:5;3151:47;3140:58;;2957:259;;3248:1;3239:7;3236:14;3233:2;;;3283:1;3280;3273:12;3233:2;3404:10;3398:4;3394:21;3391:1;3387:29;3382:34;;1779:1651;;;;;;1614:1816;;;1528:1912;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"125800","executionCost":"infinite","totalCost":"infinite"},"external":{"multiSend(bytes)":"infinite"}},"methodIdentifiers":{"multiSend(bytes)":"8d80ff0a"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"}],\"name\":\"multiSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Nick Dodson - <nick.dodson@consensys.net>Gon\\u00e7alo S\\u00e1 - <goncalo.sa@consensys.net>Stefan George - @Georgi87Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"multiSend(bytes)\":{\"details\":\"Sends multiple transactions and reverts all if one fails.\",\"params\":{\"transactions\":\"Encoded transactions. Each transaction is encoded as a packed bytes of                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),                     to as a address (=> 20 bytes),                     value as a uint256 (=> 32 bytes),                     data length as a uint256 (=> 32 bytes),                     data as bytes.                     see abi.encodePacked for more information on packed encoding\"}}},\"title\":\"Multi Send - Allows to batch multiple transactions into one.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multiSend(bytes)\":{\"notice\":\"This method is payable as delegatecalls keep the msg.value from the previous call         If the calling method (e.g. execTransaction) received ETH this would revert otherwise\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/MultiSend.sol\":\"MultiSend\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/MultiSend.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Multi Send - Allows to batch multiple transactions into one.\\n * @author Nick Dodson - <nick.dodson@consensys.net>\\n * @author Gon\\u00e7alo S\\u00e1 - <goncalo.sa@consensys.net>\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract MultiSend {\\n    address private immutable multisendSingleton;\\n\\n    constructor() {\\n        multisendSingleton = address(this);\\n    }\\n\\n    /**\\n     * @dev Sends multiple transactions and reverts all if one fails.\\n     * @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\\n     *                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),\\n     *                     to as a address (=> 20 bytes),\\n     *                     value as a uint256 (=> 32 bytes),\\n     *                     data length as a uint256 (=> 32 bytes),\\n     *                     data as bytes.\\n     *                     see abi.encodePacked for more information on packed encoding\\n     * @notice This method is payable as delegatecalls keep the msg.value from the previous call\\n     *         If the calling method (e.g. execTransaction) received ETH this would revert otherwise\\n     */\\n    function multiSend(bytes memory transactions) public payable {\\n        require(address(this) != multisendSingleton, \\\"MultiSend should only be called via delegatecall\\\");\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let length := mload(transactions)\\n            let i := 0x20\\n            for {\\n                // Pre block is not used in \\\"while mode\\\"\\n            } lt(i, length) {\\n                // Post block is not used in \\\"while mode\\\"\\n            } {\\n                // First byte of the data is the operation.\\n                // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).\\n                // This will also zero out unused data.\\n                let operation := shr(0xf8, mload(add(transactions, i)))\\n                // We offset the load address by 1 byte (operation byte)\\n                // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.\\n                let to := shr(0x60, mload(add(transactions, add(i, 0x01))))\\n                // We offset the load address by 21 byte (operation byte + 20 address bytes)\\n                let value := mload(add(transactions, add(i, 0x15)))\\n                // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)\\n                let dataLength := mload(add(transactions, add(i, 0x35)))\\n                // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)\\n                let data := add(transactions, add(i, 0x55))\\n                let success := 0\\n                switch operation\\n                case 0 {\\n                    success := call(gas(), to, value, data, dataLength, 0, 0)\\n                }\\n                case 1 {\\n                    success := delegatecall(gas(), to, data, dataLength, 0, 0)\\n                }\\n                if eq(success, 0) {\\n                    revert(0, 0)\\n                }\\n                // Next entry starts at 85 byte + data length\\n                i := add(i, add(0x55, dataLength))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x030bc8f4195cc8cba16efacba3da6870188af2d4b44d739de5d25e01e1473f9f\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"multiSend(bytes)":{"notice":"This method is payable as delegatecalls keep the msg.value from the previous call         If the calling method (e.g. execTransaction) received ETH this would revert otherwise"}},"version":1}}},"contracts/libraries/MultiSendCallOnly.sol":{"MultiSendCallOnly":{"abi":[{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Stefan George - @Georgi87Richard Meissner - @rmeissner","kind":"dev","methods":{"multiSend(bytes)":{"details":"Sends multiple transactions and reverts all if one fails.","params":{"transactions":"Encoded transactions. Each transaction is encoded as a packed bytes of                     operation has to be uint8(0) in this version (=> 1 byte),                     to as a address (=> 20 bytes),                     value as a uint256 (=> 32 bytes),                     data length as a uint256 (=> 32 bytes),                     data as bytes.                     see abi.encodePacked for more information on packed encoding"}}},"title":"Multi Send Call Only - Allows to batch multiple transactions into one, but only calls","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061019a806100206000396000f3fe60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b805160205b8181101561015f578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461012857600181146101385761013d565b6000808585888a5af1915061013d565b600080fd5b50600081141561014c57600080fd5b82605501870196505050505050506100e3565b50505056fea26469706673582212208d297bb003abee230b5dfb38774688f37a6fbb97a82a21728e8049b2acb9b73564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D80FF0A EQ PUSH2 0x23 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xDE JUMP JUMPDEST STOP JUMPDEST DUP1 MLOAD PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x15F JUMPI DUP1 DUP4 ADD MLOAD PUSH1 0xF8 SHR PUSH1 0x1 DUP3 ADD DUP5 ADD MLOAD PUSH1 0x60 SHR PUSH1 0x15 DUP4 ADD DUP6 ADD MLOAD PUSH1 0x35 DUP5 ADD DUP7 ADD MLOAD PUSH1 0x55 DUP6 ADD DUP8 ADD PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 EQ PUSH2 0x128 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x138 JUMPI PUSH2 0x13D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP9 DUP11 GAS CALL SWAP2 POP PUSH2 0x13D JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x55 ADD DUP8 ADD SWAP7 POP POP POP POP POP POP POP PUSH2 0xE3 JUMP JUMPDEST POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0x29 PUSH28 0xB003ABEE230B5DFB38774688F37A6FBB97A82A21728E8049B2ACB9B7 CALLDATALOAD PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"360:3059:39:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b805160205b8181101561015f578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461012857600181146101385761013d565b6000808585888a5af1915061013d565b600080fd5b50600081141561014c57600080fd5b82605501870196505050505050506100e3565b50505056fea26469706673582212208d297bb003abee230b5dfb38774688f37a6fbb97a82a21728e8049b2acb9b73564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D80FF0A EQ PUSH2 0x23 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0xDE JUMP JUMPDEST STOP JUMPDEST DUP1 MLOAD PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x15F JUMPI DUP1 DUP4 ADD MLOAD PUSH1 0xF8 SHR PUSH1 0x1 DUP3 ADD DUP5 ADD MLOAD PUSH1 0x60 SHR PUSH1 0x15 DUP4 ADD DUP6 ADD MLOAD PUSH1 0x35 DUP5 ADD DUP7 ADD MLOAD PUSH1 0x55 DUP6 ADD DUP8 ADD PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 EQ PUSH2 0x128 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x138 JUMPI PUSH2 0x13D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP9 DUP11 GAS CALL SWAP2 POP PUSH2 0x13D JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x55 ADD DUP8 ADD SWAP7 POP POP POP POP POP POP POP PUSH2 0xE3 JUMP JUMPDEST POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0x29 PUSH28 0xB003ABEE230B5DFB38774688F37A6FBB97A82A21728E8049B2ACB9B7 CALLDATALOAD PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"360:3059:39:-:0;;;;;;;;;;;;;;;;;;;;;1348:2069;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1518:12;1512:19;1553:4;1570:1831;1653:6;1650:1;1647:13;1570:1831;;;2044:1;2030:12;2026:20;2020:27;2014:4;2010:38;2318:4;2315:1;2311:12;2297;2293:31;2287:38;2281:4;2277:49;2480:4;2477:1;2473:12;2459;2455:31;2449:38;2663:4;2660:1;2656:12;2642;2638:31;2632:38;2857:4;2854:1;2850:12;2836;2832:31;2895:1;2920:9;2951:1;2946:104;;;;3133:1;3128:59;;;;2913:274;;2946:104;3030:1;3027;3015:10;3009:4;3002:5;2998:2;2991:5;2986:46;2975:57;;2946:104;;3128:59;3167:1;3164;3157:12;2913:274;;3219:1;3210:7;3207:14;3204:2;;;3254:1;3251;3244:12;3204:2;3375:10;3369:4;3365:21;3362:1;3358:29;3353:34;;1735:1666;;;;;;1570:1831;;;1484:1927;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"82000","executionCost":"129","totalCost":"82129"},"external":{"multiSend(bytes)":"infinite"}},"methodIdentifiers":{"multiSend(bytes)":"8d80ff0a"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"}],\"name\":\"multiSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Stefan George - @Georgi87Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"multiSend(bytes)\":{\"details\":\"Sends multiple transactions and reverts all if one fails.\",\"params\":{\"transactions\":\"Encoded transactions. Each transaction is encoded as a packed bytes of                     operation has to be uint8(0) in this version (=> 1 byte),                     to as a address (=> 20 bytes),                     value as a uint256 (=> 32 bytes),                     data length as a uint256 (=> 32 bytes),                     data as bytes.                     see abi.encodePacked for more information on packed encoding\"}}},\"title\":\"Multi Send Call Only - Allows to batch multiple transactions into one, but only calls\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multiSend(bytes)\":{\"notice\":\"The code is for most part the same as the normal MultiSend (to keep compatibility),         but reverts if a transaction tries to use a delegatecall.This method is payable as delegatecalls keep the msg.value from the previous call         If the calling method (e.g. execTransaction) received ETH this would revert otherwise\"}},\"notice\":\"The guard logic is not required here as this contract doesn't support nested delegate calls\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/MultiSendCallOnly.sol\":\"MultiSendCallOnly\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/MultiSendCallOnly.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls\\n * @notice The guard logic is not required here as this contract doesn't support nested delegate calls\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract MultiSendCallOnly {\\n    /**\\n     * @dev Sends multiple transactions and reverts all if one fails.\\n     * @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\\n     *                     operation has to be uint8(0) in this version (=> 1 byte),\\n     *                     to as a address (=> 20 bytes),\\n     *                     value as a uint256 (=> 32 bytes),\\n     *                     data length as a uint256 (=> 32 bytes),\\n     *                     data as bytes.\\n     *                     see abi.encodePacked for more information on packed encoding\\n     * @notice The code is for most part the same as the normal MultiSend (to keep compatibility),\\n     *         but reverts if a transaction tries to use a delegatecall.\\n     * @notice This method is payable as delegatecalls keep the msg.value from the previous call\\n     *         If the calling method (e.g. execTransaction) received ETH this would revert otherwise\\n     */\\n    function multiSend(bytes memory transactions) public payable {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let length := mload(transactions)\\n            let i := 0x20\\n            for {\\n                // Pre block is not used in \\\"while mode\\\"\\n            } lt(i, length) {\\n                // Post block is not used in \\\"while mode\\\"\\n            } {\\n                // First byte of the data is the operation.\\n                // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).\\n                // This will also zero out unused data.\\n                let operation := shr(0xf8, mload(add(transactions, i)))\\n                // We offset the load address by 1 byte (operation byte)\\n                // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.\\n                let to := shr(0x60, mload(add(transactions, add(i, 0x01))))\\n                // We offset the load address by 21 byte (operation byte + 20 address bytes)\\n                let value := mload(add(transactions, add(i, 0x15)))\\n                // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)\\n                let dataLength := mload(add(transactions, add(i, 0x35)))\\n                // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)\\n                let data := add(transactions, add(i, 0x55))\\n                let success := 0\\n                switch operation\\n                case 0 {\\n                    success := call(gas(), to, value, data, dataLength, 0, 0)\\n                }\\n                // This version does not allow delegatecalls\\n                case 1 {\\n                    revert(0, 0)\\n                }\\n                if eq(success, 0) {\\n                    revert(0, 0)\\n                }\\n                // Next entry starts at 85 byte + data length\\n                i := add(i, add(0x55, dataLength))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x66c326b0845b97c2ecef741eab1f3121630c1e1e04b6b369ab9faa4410dc33cd\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"multiSend(bytes)":{"notice":"The code is for most part the same as the normal MultiSend (to keep compatibility),         but reverts if a transaction tries to use a delegatecall.This method is payable as delegatecalls keep the msg.value from the previous call         If the calling method (e.g. execTransaction) received ETH this would revert otherwise"}},"notice":"The guard logic is not required here as this contract doesn't support nested delegate calls","version":1}}},"contracts/libraries/SafeMigration.sol":{"ISafe":{"abi":[{"inputs":[{"internalType":"address","name":"handler","type":"address"}],"name":"setFallbackHandler","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"setFallbackHandler(address)":"f08a0323"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SafeMigration.sol\":\"ISafe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/SafeMigration.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport {SafeStorage} from \\\"../libraries/SafeStorage.sol\\\";\\n\\ninterface ISafe {\\n    function setFallbackHandler(address handler) external;\\n}\\n\\n/**\\n * @title Migration Contract for Safe Upgrade\\n * @notice This is a generic contract that facilitates Safe and SafeL2 proxy contracts to migrate their singleton address.\\n *         The supported target Safe version is immutable and set in the constructor during the deployment of the contract.\\n *         This contract also supports migration with fallback handler update.\\n * @author @safe-global/safe-protocol\\n * @dev IMPORTANT: The library is intended to be used with the Safe standard proxy that stores the singleton address\\n *      at the storage slot 0. Use at your own risk with custom proxy implementations. The contract will allow invocations\\n *      to the migration functions only via delegatecall.\\n */\\ncontract SafeMigration is SafeStorage {\\n    /**\\n     * @notice Address of this contract\\n     */\\n    address public immutable MIGRATION_SINGLETON;\\n    /**\\n     * @notice Address of the Safe Singleton implementation\\n     */\\n    address public immutable SAFE_SINGLETON;\\n    /**\\n     * @notice Address of the Safe Singleton (L2) implementation\\n     */\\n    address public immutable SAFE_L2_SINGLETON;\\n    /**\\n     * @notice Address of the Fallback Handler\\n     */\\n    address public immutable SAFE_FALLBACK_HANDLER;\\n\\n    /**\\n     * @notice Event indicating a change of a singleton address. Named master copy here for legacy reasons.\\n     * @param singleton New master copy address\\n     */\\n    event ChangedMasterCopy(address singleton);\\n\\n    /**\\n     * @notice Modifier to make a function callable via delegatecall only.\\n     * If the function is called via a regular call, it will revert.\\n     */\\n    modifier onlyDelegateCall() {\\n        require(address(this) != MIGRATION_SINGLETON, \\\"Migration should only be called via delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Constructor\\n     * @param safeSingleton Address of the Safe Singleton implementation\\n     * @param safeL2Singleton Address of the SafeL2 Singleton implementation\\n     * @param fallbackHandler Address of the fallback handler implementation\\n     */\\n    constructor(address safeSingleton, address safeL2Singleton, address fallbackHandler) {\\n        MIGRATION_SINGLETON = address(this);\\n\\n        require(hasCode(safeSingleton), \\\"Safe Singleton is not deployed\\\");\\n        require(hasCode(safeL2Singleton), \\\"Safe Singleton (L2) is not deployed\\\");\\n        require(hasCode(fallbackHandler), \\\"fallback handler is not deployed\\\");\\n\\n        SAFE_SINGLETON = safeSingleton;\\n        SAFE_L2_SINGLETON = safeL2Singleton;\\n        SAFE_FALLBACK_HANDLER = fallbackHandler;\\n    }\\n\\n    /**\\n     * @notice Migrate the Safe contract to a new Safe Singleton implementation.\\n     */\\n    function migrateSingleton() public onlyDelegateCall {\\n        singleton = SAFE_SINGLETON;\\n        emit ChangedMasterCopy(SAFE_SINGLETON);\\n    }\\n\\n    /**\\n     * @notice Migrate to Safe Singleton and set the fallback handler. This function is intended to be used when migrating\\n     *         a Safe to a version which also requires updating fallback handler.\\n     */\\n    function migrateWithFallbackHandler() external onlyDelegateCall {\\n        migrateSingleton();\\n        ISafe(payable(address(this))).setFallbackHandler(SAFE_FALLBACK_HANDLER);\\n    }\\n\\n    /**\\n     * @notice Migrate the Safe contract to a new Safe Singleton (L2) implementation.\\n     */\\n    function migrateL2Singleton() public onlyDelegateCall {\\n        singleton = SAFE_L2_SINGLETON;\\n        emit ChangedMasterCopy(SAFE_L2_SINGLETON);\\n    }\\n\\n    /**\\n     * @notice Migrate to Safe Singleton (L2) and set the fallback handler. This function is intended to be used when migrating\\n     *         a Safe to a version which also requires updating fallback handler.\\n     */\\n    function migrateL2WithFallbackHandler() external onlyDelegateCall {\\n        migrateL2Singleton();\\n        ISafe(payable(address(this))).setFallbackHandler(SAFE_FALLBACK_HANDLER);\\n    }\\n\\n    /**\\n     * @notice Checks whether an account has code.\\n     * @param account The address of the account to be checked.\\n     * @return A boolean value indicating whether the address has code (true) or not (false).\\n     * @dev This function relies on the `extcodesize` assembly opcode to determine whether an address has code.\\n     * It does not reliably determine whether or not an address is a smart contract or an EOA.\\n     */\\n    function hasCode(address account) internal view returns (bool) {\\n        uint256 size;\\n        /* solhint-disable no-inline-assembly */\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        /* solhint-enable no-inline-assembly */\\n\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xc8d852280aed92b8aa8d0bc03c6832cef1668737ecbb9fa7b16bdce2483b8df4\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"SafeMigration":{"abi":[{"inputs":[{"internalType":"address","name":"safeSingleton","type":"address"},{"internalType":"address","name":"safeL2Singleton","type":"address"},{"internalType":"address","name":"fallbackHandler","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"singleton","type":"address"}],"name":"ChangedMasterCopy","type":"event"},{"inputs":[],"name":"MIGRATION_SINGLETON","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SAFE_FALLBACK_HANDLER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SAFE_L2_SINGLETON","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SAFE_SINGLETON","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrateL2Singleton","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateL2WithFallbackHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateSingleton","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateWithFallbackHandler","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"@safe-global/safe-protocol","details":"IMPORTANT: The library is intended to be used with the Safe standard proxy that stores the singleton address      at the storage slot 0. Use at your own risk with custom proxy implementations. The contract will allow invocations      to the migration functions only via delegatecall.","events":{"ChangedMasterCopy(address)":{"params":{"singleton":"New master copy address"}}},"kind":"dev","methods":{"constructor":{"params":{"fallbackHandler":"Address of the fallback handler implementation","safeL2Singleton":"Address of the SafeL2 Singleton implementation","safeSingleton":"Address of the Safe Singleton implementation"}}},"title":"Migration Contract for Safe Upgrade","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"61010060405234801561001157600080fd5b50604051610b4f380380610b4f8339818101604052606081101561003457600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050503073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505061009f836102a360201b60201c565b610111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166652053696e676c65746f6e206973206e6f74206465706c6f796564000081525060200191505060405180910390fd5b610120826102a360201b60201c565b610175576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610b2c6023913960400191505060405180910390fd5b610184816102a360201b60201c565b6101f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f66616c6c6261636b2068616e646c6572206973206e6f74206465706c6f79656481525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050506102b6565b600080823b905060008111915050919050565b60805160601c60a05160601c60c05160601c60e05160601c610803610329600039806102fb52806103e852806105a452508061022c52806102ad52806104935250806104b752806106d05280610751525080610187528061031f528061046f52806104db528061062b52506108036000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639bf47d6e1161005b5780639bf47d6e14610109578063caa12add1461013d578063ed007fc614610171578063f6682ab01461017b57610088565b806307f464a41461008d5780630d7101f71461009757806368cb3d94146100cb57806372f7a956146100d5575b600080fd5b610095610185565b005b61009f6102f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100d361031d565b005b6100dd61046d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610111610491565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101456104b5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101796104d9565b005b610183610629565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561022a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b87f0000000000000000000000000000000000000000000000000000000000000000604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156103c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b6103ca610185565b3073ffffffffffffffffffffffffffffffffffffffff1663f08a03237f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561057e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b610586610629565b3073ffffffffffffffffffffffffffffffffffffffff1663f08a03237f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156106ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b87f0000000000000000000000000000000000000000000000000000000000000000604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a156fe4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212203dcc36a73e4a5638bd7d18ba665b50d8f36519acacf0689a6a0a8fb5f29c9bf164736f6c63430007060033536166652053696e676c65746f6e20284c3229206973206e6f74206465706c6f796564","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xB4F CODESIZE SUB DUP1 PUSH2 0xB4F DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH2 0x9F DUP4 PUSH2 0x2A3 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x111 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166652053696E676C65746F6E206973206E6F74206465706C6F7965640000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x120 DUP3 PUSH2 0x2A3 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x175 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB2C PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x184 DUP2 PUSH2 0x2A3 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x66616C6C6261636B2068616E646C6572206973206E6F74206465706C6F796564 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xE0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP POP POP POP PUSH2 0x2B6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x803 PUSH2 0x329 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2FB MSTORE DUP1 PUSH2 0x3E8 MSTORE DUP1 PUSH2 0x5A4 MSTORE POP DUP1 PUSH2 0x22C MSTORE DUP1 PUSH2 0x2AD MSTORE DUP1 PUSH2 0x493 MSTORE POP DUP1 PUSH2 0x4B7 MSTORE DUP1 PUSH2 0x6D0 MSTORE DUP1 PUSH2 0x751 MSTORE POP DUP1 PUSH2 0x187 MSTORE DUP1 PUSH2 0x31F MSTORE DUP1 PUSH2 0x46F MSTORE DUP1 PUSH2 0x4DB MSTORE DUP1 PUSH2 0x62B MSTORE POP PUSH2 0x803 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 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9BF47D6E GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x9BF47D6E EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0xCAA12ADD EQ PUSH2 0x13D JUMPI DUP1 PUSH4 0xED007FC6 EQ PUSH2 0x171 JUMPI DUP1 PUSH4 0xF6682AB0 EQ PUSH2 0x17B JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x7F464A4 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xD7101F7 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x68CB3D94 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x72F7A956 EQ PUSH2 0xD5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x185 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x2F9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD3 PUSH2 0x31D JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDD PUSH2 0x46D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x179 PUSH2 0x4D9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x183 PUSH2 0x629 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x22A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 PUSH32 0x0 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3CA PUSH2 0x185 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF08A0323 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x467 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x57E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x586 PUSH2 0x629 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF08A0323 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x623 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x6CE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 PUSH32 0x0 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP INVALID 0x4D PUSH10 0x67726174696F6E207368 PUSH16 0x756C64206F6E6C792062652063616C6C PUSH6 0x642076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6CA26469706673582212203DCC36A73E4A JUMP CODESIZE 0xBD PUSH30 0x18BA665B50D8F36519ACACF0689A6A0A8FB5F29C9BF164736F6C63430007 MOD STOP CALLER MSTORE8 PUSH2 0x6665 KECCAK256 MSTORE8 PUSH10 0x6E676C65746F6E20284C ORIGIN 0x29 KECCAK256 PUSH10 0x73206E6F74206465706C PUSH16 0x79656400000000000000000000000000 ","sourceMap":"930:3931:40:-:0;;;2256:509;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2381:4;2351:35;;;;;;;;;;;;2405:22;2413:13;2405:7;;;:22;;:::i;:::-;2397:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2480:24;2488:15;2480:7;;;:24;;:::i;:::-;2472:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2562:24;2570:15;2562:7;;;:24;;:::i;:::-;2554:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2651:13;2634:30;;;;;;;;;;;;2694:15;2674:35;;;;;;;;;;;;2743:15;2719:39;;;;;;;;;;;;2256:509;;;930:3931;;4531:328;4588:4;4604:12;4761:7;4749:20;4741:28;;4851:1;4844:4;:8;4837:15;;;4531:328;;;:::o;930:3931::-;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5151":[{"length":32,"start":391},{"length":32,"start":799},{"length":32,"start":1135},{"length":32,"start":1243},{"length":32,"start":1579}],"5154":[{"length":32,"start":1207},{"length":32,"start":1744},{"length":32,"start":1873}],"5157":[{"length":32,"start":556},{"length":32,"start":685},{"length":32,"start":1171}],"5160":[{"length":32,"start":763},{"length":32,"start":1000},{"length":32,"start":1444}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c80639bf47d6e1161005b5780639bf47d6e14610109578063caa12add1461013d578063ed007fc614610171578063f6682ab01461017b57610088565b806307f464a41461008d5780630d7101f71461009757806368cb3d94146100cb57806372f7a956146100d5575b600080fd5b610095610185565b005b61009f6102f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100d361031d565b005b6100dd61046d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610111610491565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101456104b5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101796104d9565b005b610183610629565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561022a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b87f0000000000000000000000000000000000000000000000000000000000000000604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156103c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b6103ca610185565b3073ffffffffffffffffffffffffffffffffffffffff1663f08a03237f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561057e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b610586610629565b3073ffffffffffffffffffffffffffffffffffffffff1663f08a03237f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156106ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061079e6030913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b87f0000000000000000000000000000000000000000000000000000000000000000604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a156fe4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212203dcc36a73e4a5638bd7d18ba665b50d8f36519acacf0689a6a0a8fb5f29c9bf164736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9BF47D6E GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x9BF47D6E EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0xCAA12ADD EQ PUSH2 0x13D JUMPI DUP1 PUSH4 0xED007FC6 EQ PUSH2 0x171 JUMPI DUP1 PUSH4 0xF6682AB0 EQ PUSH2 0x17B JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x7F464A4 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xD7101F7 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x68CB3D94 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x72F7A956 EQ PUSH2 0xD5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x185 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x2F9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD3 PUSH2 0x31D JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDD PUSH2 0x46D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x179 PUSH2 0x4D9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x183 PUSH2 0x629 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x22A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 PUSH32 0x0 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3CA PUSH2 0x185 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF08A0323 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x467 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x57E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x586 PUSH2 0x629 JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF08A0323 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x623 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x6CE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x79E PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 PUSH32 0x0 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP INVALID 0x4D PUSH10 0x67726174696F6E207368 PUSH16 0x756C64206F6E6C792062652063616C6C PUSH6 0x642076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6CA26469706673582212203DCC36A73E4A JUMP CODESIZE 0xBD PUSH30 0x18BA665B50D8F36519ACACF0689A6A0A8FB5F29C9BF164736F6C63430007 MOD STOP CALLER ","sourceMap":"930:3931:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3526:151;;;:::i;:::-;;1393:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3909:184;;;:::i;:::-;;1030:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1282:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1156:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3238:180;;;:::i;:::-;;2868:143;;;:::i;:::-;;3526:151;1890:19;1873:36;;1881:4;1873:36;;;;1865:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3602:17:::1;3590:9;::::0;:29:::1;;;;;;;;;;;;;;;;;;3634:36;3652:17;3634:36;;;;;;;;;;;;;;;;;;;;3526:151::o:0;1393:46::-;;;:::o;3909:184::-;1890:19;1873:36;;1881:4;1873:36;;;;1865:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3985:20:::1;:18;:20::i;:::-;4037:4;4015:48;;;4064:21;4015:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3909:184::o:0;1030:44::-;;;:::o;1282:42::-;;;:::o;1156:39::-;;;:::o;3238:180::-;1890:19;1873:36;;1881:4;1873:36;;;;1865:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3312:18:::1;:16;:18::i;:::-;3362:4;3340:48;;;3389:21;3340:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3238:180::o:0;2868:143::-;1890:19;1873:36;;1881:4;1873:36;;;;1865:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2942:14:::1;2930:9;::::0;:26:::1;;;;;;;;;;;;;;;;;;2971:33;2989:14;2971:33;;;;;;;;;;;;;;;;;;;;2868:143::o:0"},"gasEstimates":{"creation":{"codeDepositCost":"410200","executionCost":"infinite","totalCost":"infinite"},"external":{"MIGRATION_SINGLETON()":"infinite","SAFE_FALLBACK_HANDLER()":"infinite","SAFE_L2_SINGLETON()":"infinite","SAFE_SINGLETON()":"infinite","migrateL2Singleton()":"infinite","migrateL2WithFallbackHandler()":"infinite","migrateSingleton()":"infinite","migrateWithFallbackHandler()":"infinite"},"internal":{"hasCode(address)":"infinite"}},"methodIdentifiers":{"MIGRATION_SINGLETON()":"72f7a956","SAFE_FALLBACK_HANDLER()":"0d7101f7","SAFE_L2_SINGLETON()":"9bf47d6e","SAFE_SINGLETON()":"caa12add","migrateL2Singleton()":"07f464a4","migrateL2WithFallbackHandler()":"68cb3d94","migrateSingleton()":"f6682ab0","migrateWithFallbackHandler()":"ed007fc6"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safeSingleton\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"safeL2Singleton\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"}],\"name\":\"ChangedMasterCopy\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MIGRATION_SINGLETON\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SAFE_FALLBACK_HANDLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SAFE_L2_SINGLETON\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SAFE_SINGLETON\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateL2Singleton\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateL2WithFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateSingleton\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateWithFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"@safe-global/safe-protocol\",\"details\":\"IMPORTANT: The library is intended to be used with the Safe standard proxy that stores the singleton address      at the storage slot 0. Use at your own risk with custom proxy implementations. The contract will allow invocations      to the migration functions only via delegatecall.\",\"events\":{\"ChangedMasterCopy(address)\":{\"params\":{\"singleton\":\"New master copy address\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"fallbackHandler\":\"Address of the fallback handler implementation\",\"safeL2Singleton\":\"Address of the SafeL2 Singleton implementation\",\"safeSingleton\":\"Address of the Safe Singleton implementation\"}}},\"title\":\"Migration Contract for Safe Upgrade\",\"version\":1},\"userdoc\":{\"events\":{\"ChangedMasterCopy(address)\":{\"notice\":\"Event indicating a change of a singleton address. Named master copy here for legacy reasons.\"}},\"kind\":\"user\",\"methods\":{\"MIGRATION_SINGLETON()\":{\"notice\":\"Address of this contract\"},\"SAFE_FALLBACK_HANDLER()\":{\"notice\":\"Address of the Fallback Handler\"},\"SAFE_L2_SINGLETON()\":{\"notice\":\"Address of the Safe Singleton (L2) implementation\"},\"SAFE_SINGLETON()\":{\"notice\":\"Address of the Safe Singleton implementation\"},\"constructor\":{\"notice\":\"Constructor\"},\"migrateL2Singleton()\":{\"notice\":\"Migrate the Safe contract to a new Safe Singleton (L2) implementation.\"},\"migrateL2WithFallbackHandler()\":{\"notice\":\"Migrate to Safe Singleton (L2) and set the fallback handler. This function is intended to be used when migrating         a Safe to a version which also requires updating fallback handler.\"},\"migrateSingleton()\":{\"notice\":\"Migrate the Safe contract to a new Safe Singleton implementation.\"},\"migrateWithFallbackHandler()\":{\"notice\":\"Migrate to Safe Singleton and set the fallback handler. This function is intended to be used when migrating         a Safe to a version which also requires updating fallback handler.\"}},\"notice\":\"This is a generic contract that facilitates Safe and SafeL2 proxy contracts to migrate their singleton address.         The supported target Safe version is immutable and set in the constructor during the deployment of the contract.         This contract also supports migration with fallback handler update.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SafeMigration.sol\":\"SafeMigration\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/SafeMigration.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport {SafeStorage} from \\\"../libraries/SafeStorage.sol\\\";\\n\\ninterface ISafe {\\n    function setFallbackHandler(address handler) external;\\n}\\n\\n/**\\n * @title Migration Contract for Safe Upgrade\\n * @notice This is a generic contract that facilitates Safe and SafeL2 proxy contracts to migrate their singleton address.\\n *         The supported target Safe version is immutable and set in the constructor during the deployment of the contract.\\n *         This contract also supports migration with fallback handler update.\\n * @author @safe-global/safe-protocol\\n * @dev IMPORTANT: The library is intended to be used with the Safe standard proxy that stores the singleton address\\n *      at the storage slot 0. Use at your own risk with custom proxy implementations. The contract will allow invocations\\n *      to the migration functions only via delegatecall.\\n */\\ncontract SafeMigration is SafeStorage {\\n    /**\\n     * @notice Address of this contract\\n     */\\n    address public immutable MIGRATION_SINGLETON;\\n    /**\\n     * @notice Address of the Safe Singleton implementation\\n     */\\n    address public immutable SAFE_SINGLETON;\\n    /**\\n     * @notice Address of the Safe Singleton (L2) implementation\\n     */\\n    address public immutable SAFE_L2_SINGLETON;\\n    /**\\n     * @notice Address of the Fallback Handler\\n     */\\n    address public immutable SAFE_FALLBACK_HANDLER;\\n\\n    /**\\n     * @notice Event indicating a change of a singleton address. Named master copy here for legacy reasons.\\n     * @param singleton New master copy address\\n     */\\n    event ChangedMasterCopy(address singleton);\\n\\n    /**\\n     * @notice Modifier to make a function callable via delegatecall only.\\n     * If the function is called via a regular call, it will revert.\\n     */\\n    modifier onlyDelegateCall() {\\n        require(address(this) != MIGRATION_SINGLETON, \\\"Migration should only be called via delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Constructor\\n     * @param safeSingleton Address of the Safe Singleton implementation\\n     * @param safeL2Singleton Address of the SafeL2 Singleton implementation\\n     * @param fallbackHandler Address of the fallback handler implementation\\n     */\\n    constructor(address safeSingleton, address safeL2Singleton, address fallbackHandler) {\\n        MIGRATION_SINGLETON = address(this);\\n\\n        require(hasCode(safeSingleton), \\\"Safe Singleton is not deployed\\\");\\n        require(hasCode(safeL2Singleton), \\\"Safe Singleton (L2) is not deployed\\\");\\n        require(hasCode(fallbackHandler), \\\"fallback handler is not deployed\\\");\\n\\n        SAFE_SINGLETON = safeSingleton;\\n        SAFE_L2_SINGLETON = safeL2Singleton;\\n        SAFE_FALLBACK_HANDLER = fallbackHandler;\\n    }\\n\\n    /**\\n     * @notice Migrate the Safe contract to a new Safe Singleton implementation.\\n     */\\n    function migrateSingleton() public onlyDelegateCall {\\n        singleton = SAFE_SINGLETON;\\n        emit ChangedMasterCopy(SAFE_SINGLETON);\\n    }\\n\\n    /**\\n     * @notice Migrate to Safe Singleton and set the fallback handler. This function is intended to be used when migrating\\n     *         a Safe to a version which also requires updating fallback handler.\\n     */\\n    function migrateWithFallbackHandler() external onlyDelegateCall {\\n        migrateSingleton();\\n        ISafe(payable(address(this))).setFallbackHandler(SAFE_FALLBACK_HANDLER);\\n    }\\n\\n    /**\\n     * @notice Migrate the Safe contract to a new Safe Singleton (L2) implementation.\\n     */\\n    function migrateL2Singleton() public onlyDelegateCall {\\n        singleton = SAFE_L2_SINGLETON;\\n        emit ChangedMasterCopy(SAFE_L2_SINGLETON);\\n    }\\n\\n    /**\\n     * @notice Migrate to Safe Singleton (L2) and set the fallback handler. This function is intended to be used when migrating\\n     *         a Safe to a version which also requires updating fallback handler.\\n     */\\n    function migrateL2WithFallbackHandler() external onlyDelegateCall {\\n        migrateL2Singleton();\\n        ISafe(payable(address(this))).setFallbackHandler(SAFE_FALLBACK_HANDLER);\\n    }\\n\\n    /**\\n     * @notice Checks whether an account has code.\\n     * @param account The address of the account to be checked.\\n     * @return A boolean value indicating whether the address has code (true) or not (false).\\n     * @dev This function relies on the `extcodesize` assembly opcode to determine whether an address has code.\\n     * It does not reliably determine whether or not an address is a smart contract or an EOA.\\n     */\\n    function hasCode(address account) internal view returns (bool) {\\n        uint256 size;\\n        /* solhint-disable no-inline-assembly */\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        /* solhint-enable no-inline-assembly */\\n\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xc8d852280aed92b8aa8d0bc03c6832cef1668737ecbb9fa7b16bdce2483b8df4\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":5330,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":5334,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":5338,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":5340,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":5342,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":5344,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":5346,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":5350,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":5356,"contract":"contracts/libraries/SafeMigration.sol:SafeMigration","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"ChangedMasterCopy(address)":{"notice":"Event indicating a change of a singleton address. Named master copy here for legacy reasons."}},"kind":"user","methods":{"MIGRATION_SINGLETON()":{"notice":"Address of this contract"},"SAFE_FALLBACK_HANDLER()":{"notice":"Address of the Fallback Handler"},"SAFE_L2_SINGLETON()":{"notice":"Address of the Safe Singleton (L2) implementation"},"SAFE_SINGLETON()":{"notice":"Address of the Safe Singleton implementation"},"constructor":{"notice":"Constructor"},"migrateL2Singleton()":{"notice":"Migrate the Safe contract to a new Safe Singleton (L2) implementation."},"migrateL2WithFallbackHandler()":{"notice":"Migrate to Safe Singleton (L2) and set the fallback handler. This function is intended to be used when migrating         a Safe to a version which also requires updating fallback handler."},"migrateSingleton()":{"notice":"Migrate the Safe contract to a new Safe Singleton implementation."},"migrateWithFallbackHandler()":{"notice":"Migrate to Safe Singleton and set the fallback handler. This function is intended to be used when migrating         a Safe to a version which also requires updating fallback handler."}},"notice":"This is a generic contract that facilitates Safe and SafeL2 proxy contracts to migrate their singleton address.         The supported target Safe version is immutable and set in the constructor during the deployment of the contract.         This contract also supports migration with fallback handler update.","version":1}}},"contracts/libraries/SafeStorage.sol":{"SafeStorage":{"abi":[],"devdoc":{"author":"Richard Meissner - @rmeissner","details":"Should be always the first base contract of a library that is used with a Safe.","kind":"dev","methods":{},"title":"SafeStorage - Storage layout of the Safe contracts to be used in libraries.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212209ec6de94c8c0bf27bb9fc3808dbfb950a38cc157640c5ec8ed4f5c0b2ae6aa1a64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xC6 0xDE SWAP5 0xC8 0xC0 0xBF 0x27 0xBB SWAP16 0xC3 DUP1 DUP14 0xBF 0xB9 POP LOG3 DUP13 0xC1 JUMPI PUSH5 0xC5EC8ED4F 0x5C SIGNEXTEND 0x2A 0xE6 0xAA BYTE PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"298:563:41:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212209ec6de94c8c0bf27bb9fc3808dbfb950a38cc157640c5ec8ed4f5c0b2ae6aa1a64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xC6 0xDE SWAP5 0xC8 0xC0 0xBF 0x27 0xBB SWAP16 0xC3 DUP1 DUP14 0xBF 0xB9 POP LOG3 DUP13 0xC1 JUMPI PUSH5 0xC5EC8ED4F 0x5C SIGNEXTEND 0x2A 0xE6 0xAA BYTE PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"298:563:41:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"66","totalCost":"12666"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"details\":\"Should be always the first base contract of a library that is used with a Safe.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeStorage - Storage layout of the Safe contracts to be used in libraries.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SafeStorage.sol\":\"SafeStorage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":5330,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":5334,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":5338,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":5340,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":5342,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":5344,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":5346,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":5350,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":5356,"contract":"contracts/libraries/SafeStorage.sol:SafeStorage","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/libraries/SafeToL2Migration.sol":{"ISafe":{"abi":[{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"handler","type":"address"}],"name":"setFallbackHandler","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"VERSION()":"ffa1ad74","setFallbackHandler(address)":"f08a0323"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SafeToL2Migration.sol\":\"ISafe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeToL2Migration.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\n/* solhint-disable one-contract-per-file */\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport {SafeStorage} from \\\"../libraries/SafeStorage.sol\\\";\\nimport {Enum} from \\\"../common/Enum.sol\\\";\\n\\ninterface ISafe {\\n    // solhint-disable-next-line\\n    function VERSION() external view returns (string memory);\\n\\n    function setFallbackHandler(address handler) external;\\n}\\n\\n/**\\n * @title Migration Contract for updating a Safe from 1.1.1/1.3.0/1.4.1 versions to a L2 version. Useful when replaying a Safe from a non L2 network in a L2 network.\\n * @notice This contract facilitates the migration of a Safe contract from version 1.1.1 to 1.3.0/1.4.1 L2, 1.3.0 to 1.3.0L2 or from 1.4.1 to 1.4.1L2\\n *         Other versions are not supported\\n * @dev IMPORTANT: The migration will only work with proxies that store the implementation address in the storage slot 0.\\n */\\ncontract SafeToL2Migration is SafeStorage {\\n    // Address of this contract\\n    address public immutable MIGRATION_SINGLETON;\\n\\n    /**\\n     * @notice Constructor\\n     * @dev Initializes the migrationSingleton with the contract's own address.\\n     */\\n    constructor() {\\n        MIGRATION_SINGLETON = address(this);\\n    }\\n\\n    /**\\n     * @notice Event indicating a change of master copy address.\\n     * @param singleton New master copy address\\n     */\\n    event ChangedMasterCopy(address singleton);\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n\\n    event SafeMultiSigTransaction(\\n        address to,\\n        uint256 value,\\n        bytes data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes signatures,\\n        // We combine nonce, sender and threshold into one to avoid stack too deep\\n        // Dev note: additionalInfo should not contain `bytes`, as this complicates decoding\\n        bytes additionalInfo\\n    );\\n\\n    /**\\n     * @notice Modifier to make a function callable via delegatecall only.\\n     * If the function is called via a regular call, it will revert.\\n     */\\n    modifier onlyDelegateCall() {\\n        require(address(this) != MIGRATION_SINGLETON, \\\"Migration should only be called via delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Modifier to prevent using initialized Safes.\\n     * If Safe has a nonce higher than 0, it will revert\\n     */\\n    modifier onlyNonceZero() {\\n        // Nonce is increased before executing a tx, so first executed tx will have nonce=1\\n        require(nonce == 1, \\\"Safe must have not executed any tx\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Internal function with common migration steps, changes the singleton and emits SafeMultiSigTransaction event\\n     */\\n    function migrate(address l2Singleton, bytes memory functionData) private {\\n        singleton = l2Singleton;\\n\\n        // Encode nonce, sender, threshold\\n        bytes memory additionalInfo = abi.encode(0, msg.sender, threshold);\\n\\n        // Simulate a L2 transaction so Safe Tx Service indexer picks up the Safe\\n        emit SafeMultiSigTransaction(\\n            MIGRATION_SINGLETON,\\n            0,\\n            functionData,\\n            Enum.Operation.DelegateCall,\\n            0,\\n            0,\\n            0,\\n            address(0),\\n            payable(address(0)),\\n            \\\"\\\", // We cannot detect signatures\\n            additionalInfo\\n        );\\n        emit ChangedMasterCopy(l2Singleton);\\n    }\\n\\n    /**\\n     * @notice Migrate from Safe 1.3.0/1.4.1 Singleton (L1) to the same version provided L2 singleton\\n     * Safe is required to have nonce 0 so backend can support it after the migration\\n     * @dev This function should only be called via a delegatecall to perform the upgrade.\\n     * Singletons versions will be compared, so it implies that contracts exist\\n     */\\n    function migrateToL2(address l2Singleton) external onlyDelegateCall onlyNonceZero {\\n        address _singleton = singleton;\\n        require(_singleton != l2Singleton, \\\"Safe is already using the singleton\\\");\\n        bytes32 oldSingletonVersion = keccak256(abi.encodePacked(ISafe(_singleton).VERSION()));\\n        bytes32 newSingletonVersion = keccak256(abi.encodePacked(ISafe(l2Singleton).VERSION()));\\n\\n        require(oldSingletonVersion == newSingletonVersion, \\\"L2 singleton must match current version singleton\\\");\\n        // There's no way to make sure if address is a valid singleton, unless we configure the contract for every chain\\n        require(\\n            newSingletonVersion == keccak256(abi.encodePacked(\\\"1.3.0\\\")) || newSingletonVersion == keccak256(abi.encodePacked(\\\"1.4.1\\\")),\\n            \\\"Provided singleton version is not supported\\\"\\n        );\\n\\n        // 0xef2624ae - bytes4(keccak256(\\\"migrateToL2(address)\\\"))\\n        bytes memory functionData = abi.encodeWithSelector(0xef2624ae, l2Singleton);\\n        migrate(l2Singleton, functionData);\\n    }\\n\\n    /**\\n     * @notice Migrate from Safe 1.1.1 Singleton to 1.3.0 or 1.4.1 L2\\n     * Safe is required to have nonce 0 so backend can support it after the migration\\n     * @dev This function should only be called via a delegatecall to perform the upgrade.\\n     * Singletons version will be checked, so it implies that contracts exist.\\n     * A valid and compatible fallbackHandler needs to be provided, only existence will be checked.\\n     */\\n    function migrateFromV111(address l2Singleton, address fallbackHandler) external onlyDelegateCall onlyNonceZero {\\n        require(isContract(fallbackHandler), \\\"fallbackHandler is not a contract\\\");\\n\\n        bytes32 oldSingletonVersion = keccak256(abi.encodePacked(ISafe(singleton).VERSION()));\\n        require(oldSingletonVersion == keccak256(abi.encodePacked(\\\"1.1.1\\\")), \\\"Provided singleton version is not supported\\\");\\n\\n        bytes32 newSingletonVersion = keccak256(abi.encodePacked(ISafe(l2Singleton).VERSION()));\\n        require(\\n            newSingletonVersion == keccak256(abi.encodePacked(\\\"1.3.0\\\")) || newSingletonVersion == keccak256(abi.encodePacked(\\\"1.4.1\\\")),\\n            \\\"Provided singleton version is not supported\\\"\\n        );\\n\\n        ISafe safe = ISafe(address(this));\\n        safe.setFallbackHandler(fallbackHandler);\\n\\n        // Safes < 1.3.0 did not emit SafeSetup, so Safe Tx Service backend needs the event to index the Safe\\n        emit SafeSetup(MIGRATION_SINGLETON, getOwners(), threshold, address(0), fallbackHandler);\\n\\n        // 0xd9a20812 - bytes4(keccak256(\\\"migrateFromV111(address,address)\\\"))\\n        bytes memory functionData = abi.encodeWithSelector(0xd9a20812, l2Singleton, fallbackHandler);\\n        migrate(l2Singleton, functionData);\\n    }\\n\\n    /**\\n     * @notice Checks whether an Ethereum address corresponds to a contract or an externally owned account (EOA).\\n     * @param account The Ethereum address to be checked.\\n     * @return A boolean value indicating whether the address is associated with a contract (true) or an EOA (false).\\n     * @dev This function relies on the `extcodesize` assembly opcode to determine whether an address is a contract.\\n     * It may return incorrect results in some edge cases (see documentation for details).\\n     * Developers should use caution when relying on the results of this function for critical decision-making.\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n\\n        // If the code size is greater than 0, it is a contract; otherwise, it is an EOA.\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @dev This function is copied from `OwnerManager.sol` and takes advantage of the fact that\\n     * migration happens with a `DELEGATECALL` in the context of the migrating account, which allows\\n     * us to read the owners directly from storage and avoid the additional overhead of a `CALL`\\n     * into the account implementation. Note that we can rely on the memory layout of the {owners}\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() internal view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n        address sentinelOwners = address(0x1);\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[sentinelOwners];\\n        while (currentOwner != sentinelOwners) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0x4a69b889fc09f2aabd397c6112b4b7c562871bf4cdf004daee4430c078731a6a\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"SafeToL2Migration":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"singleton","type":"address"}],"name":"ChangedMasterCopy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"enum Enum.Operation","name":"operation","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"safeTxGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"baseGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasPrice","type":"uint256"},{"indexed":false,"internalType":"address","name":"gasToken","type":"address"},{"indexed":false,"internalType":"address payable","name":"refundReceiver","type":"address"},{"indexed":false,"internalType":"bytes","name":"signatures","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"additionalInfo","type":"bytes"}],"name":"SafeMultiSigTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":false,"internalType":"address[]","name":"owners","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"address","name":"initializer","type":"address"},{"indexed":false,"internalType":"address","name":"fallbackHandler","type":"address"}],"name":"SafeSetup","type":"event"},{"inputs":[],"name":"MIGRATION_SINGLETON","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l2Singleton","type":"address"},{"internalType":"address","name":"fallbackHandler","type":"address"}],"name":"migrateFromV111","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"l2Singleton","type":"address"}],"name":"migrateToL2","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"IMPORTANT: The migration will only work with proxies that store the implementation address in the storage slot 0.","events":{"ChangedMasterCopy(address)":{"params":{"singleton":"New master copy address"}}},"kind":"dev","methods":{"constructor":{"details":"Initializes the migrationSingleton with the contract's own address."},"migrateFromV111(address,address)":{"details":"This function should only be called via a delegatecall to perform the upgrade. Singletons version will be checked, so it implies that contracts exist. A valid and compatible fallbackHandler needs to be provided, only existence will be checked."},"migrateToL2(address)":{"details":"This function should only be called via a delegatecall to perform the upgrade. Singletons versions will be compared, so it implies that contracts exist"}},"title":"Migration Contract for updating a Safe from 1.1.1/1.3.0/1.4.1 versions to a L2 version. Useful when replaying a Safe from a non L2 network in a L2 network.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60a060405234801561001057600080fd5b503073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060805160601c61164b610079600039806101245280610148528061084152806109df5280611328525061164b6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806372f7a95614610046578063d9a208121461007a578063ef2624ae146100de575b600080fd5b61004e610122565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100dc6004803603604081101561009057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610146565b005b610120600480360360208110156100f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109dd565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156101eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806115476030913960400191505060405180910390fd5b600160055414610246576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806115f46022913960400191505060405180910390fd5b61024f816110b8565b6102a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806115776021913960400191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b15801561030d57600080fd5b505afa158015610321573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561034b57600080fd5b810190808051604051939291908464010000000082111561036b57600080fd5b8382019150602082018581111561038157600080fd5b825186600182028301116401000000008211171561039e57600080fd5b8083526020830192505050908051906020019080838360005b838110156103d25780820151818401526020810190506103b7565b50505050905090810190601f1680156103ff5780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b6020831061043c5780518252602082019150602081019050602083039250610419565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405160200180807f312e312e310000000000000000000000000000000000000000000000000000008152506005019050604051602081830303815290604052805190602001208114610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611598602b913960400191505060405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b15801561055f57600080fd5b505afa158015610573573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561059d57600080fd5b81019080805160405193929190846401000000008211156105bd57600080fd5b838201915060208201858111156105d357600080fd5b82518660018202830111640100000000821117156105f057600080fd5b8083526020830192505050908051906020019080838360005b83811015610624578082015181840152602081019050610609565b50505050905090810190601f1680156106515780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b6020831061068e578051825260208201915060208101905060208303925061066b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405160200180807f312e332e30000000000000000000000000000000000000000000000000000000815250600501905060405160208183030381529060405280519060200120811480610764575060405160200180807f312e342e3100000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012081145b6107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611598602b913960400191505060405180910390fd5b60003090508073ffffffffffffffffffffffffffffffffffffffff1663f08a0323856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a861089f6110cb565b60045460008860405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825286818151815260200191508051906020019060200280838360005b8381101561092657808201518184015260208101905061090b565b505050509050019550505050505060405180910390a2600063d9a208128686604051602401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506109d58682611279565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806115476030913960400191505060405180910390fd5b600160055414610add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806115f46022913960400191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806115246023913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b158015610bd057600080fd5b505afa158015610be4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610c0e57600080fd5b8101908080516040519392919084640100000000821115610c2e57600080fd5b83820191506020820185811115610c4457600080fd5b8251866001820283011164010000000082111715610c6157600080fd5b8083526020830192505050908051906020019080838360005b83811015610c95578082015181840152602081019050610c7a565b50505050905090810190601f168015610cc25780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b60208310610cff5780518252602082019150602081019050602083039250610cdc565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060008373ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610dc257600080fd5b8101908080516040519392919084640100000000821115610de257600080fd5b83820191506020820185811115610df857600080fd5b8251866001820283011164010000000082111715610e1557600080fd5b8083526020830192505050908051906020019080838360005b83811015610e49578082015181840152602081019050610e2e565b50505050905090810190601f168015610e765780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b60208310610eb35780518252602082019150602081019050602083039250610e90565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050808214610f48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806115c36031913960400191505060405180910390fd5b60405160200180807f312e332e30000000000000000000000000000000000000000000000000000000815250600501905060405160208183030381529060405280519060200120811480610fe1575060405160200180807f312e342e3100000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012081145b611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611598602b913960400191505060405180910390fd5b600063ef2624ae85604051602401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506110b18582611279565b5050505050565b600080823b905060008111915050919050565b6060600060035467ffffffffffffffff811180156110e857600080fd5b506040519080825280602002602001820160405280156111175781602001602082028036833780820191505090505b509050600060019050600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126f57808483815181106111c657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050611186565b8394505050505090565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008033600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed7f0000000000000000000000000000000000000000000000000000000000000000600084600160008060008060008a604051808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018060200189600181111561138b57fe5b81526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528c818151815260200191508051906020019080838360005b8381101561141a5780820151818401526020810190506113ff565b50505050905090810190601f1680156114475780820380516001836020036101000a031916815260200191505b50848103835260008152602001848103825285818151815260200191508051906020019080838360005b8381101561148c578082015181840152602081019050611471565b50505050905090810190601f1680156114b95780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a17f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b883604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150505056fe5361666520697320616c7265616479207573696e67207468652073696e676c65746f6e4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c66616c6c6261636b48616e646c6572206973206e6f74206120636f6e747261637450726f76696465642073696e676c65746f6e2076657273696f6e206973206e6f7420737570706f727465644c322073696e676c65746f6e206d757374206d617463682063757272656e742076657273696f6e2073696e676c65746f6e53616665206d7573742068617665206e6f7420657865637574656420616e79207478a2646970667358221220d914c30647fc923b19a050a72872aeedb4f96d94ca6646a06297dff0c83f728564736f6c63430007060033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0x164B PUSH2 0x79 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x124 MSTORE DUP1 PUSH2 0x148 MSTORE DUP1 PUSH2 0x841 MSTORE DUP1 PUSH2 0x9DF MSTORE DUP1 PUSH2 0x1328 MSTORE POP PUSH2 0x164B 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 0x72F7A956 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD9A20812 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xEF2624AE EQ PUSH2 0xDE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x120 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x9DD JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1547 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x5 SLOAD EQ PUSH2 0x246 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15F4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x24F DUP2 PUSH2 0x10B8 JUMP JUMPDEST PUSH2 0x2A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1577 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x321 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B 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 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3D2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3B7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3FF 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x43C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x419 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E312E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1598 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x59D 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 0x5BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x5F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x624 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x609 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x651 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x68E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x66B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E332E30000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ DUP1 PUSH2 0x764 JUMPI POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ JUMPDEST PUSH2 0x7B9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1598 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ADDRESS SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF08A0323 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x827 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x83B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x141DF868A6331AF528E38C83B7AA03EDC19BE66E37AE67F9285BF4F8E3C6A1A8 PUSH2 0x89F PUSH2 0x10CB JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 DUP9 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x926 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x90B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x0 PUSH4 0xD9A20812 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH2 0x9D5 DUP7 DUP3 PUSH2 0x1279 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1547 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x5 SLOAD EQ PUSH2 0xADD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15F4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xB88 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1524 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC0E 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 0xC2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xC44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xC61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC95 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xC7A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xCC2 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xCFF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0xD84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD98 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDC2 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 0xDE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xDF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xE15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE49 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE2E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE76 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xEB3 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xE90 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 EQ PUSH2 0xF48 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x31 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15C3 PUSH1 0x31 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E332E30000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ DUP1 PUSH2 0xFE1 JUMPI POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ JUMPDEST PUSH2 0x1036 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1598 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH4 0xEF2624AE DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH2 0x10B1 DUP6 DUP3 PUSH2 0x1279 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x10E8 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 0x1117 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x126F JUMPI DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11C6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x2 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x1186 JUMP JUMPDEST DUP4 SWAP5 POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 CALLER PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH32 0x66753CD2356569EE081232E3BE8909B950E0A76C1F8460C3A5E3C2BE32B11BED PUSH32 0x0 PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH1 0x40 MLOAD DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP10 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x138B JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP13 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 0x141A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x13FF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1447 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 DUP5 DUP2 SUB DUP4 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 SUB DUP3 MSTORE DUP6 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 0x148C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1471 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x14B9 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 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP INVALID MSTORE8 PUSH2 0x6665 KECCAK256 PUSH10 0x7320616C726561647920 PUSH22 0x73696E67207468652073696E676C65746F6E4D696772 PUSH2 0x7469 PUSH16 0x6E2073686F756C64206F6E6C79206265 KECCAK256 PUSH4 0x616C6C65 PUSH5 0x2076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6C66616C6C6261636B48616E646C657220 PUSH10 0x73206E6F74206120636F PUSH15 0x747261637450726F76696465642073 PUSH10 0x6E676C65746F6E207665 PUSH19 0x73696F6E206973206E6F7420737570706F7274 PUSH6 0x644C32207369 PUSH15 0x676C65746F6E206D757374206D6174 PUSH4 0x68206375 PUSH19 0x72656E742076657273696F6E2073696E676C65 PUSH21 0x6F6E53616665206D7573742068617665206E6F7420 PUSH6 0x786563757465 PUSH5 0x20616E7920 PUSH21 0x78A2646970667358221220D914C30647FC923B19A0 POP 0xA7 0x28 PUSH19 0xAEEDB4F96D94CA6646A06297DFF0C83F728564 PUSH20 0x6F6C634300070600330000000000000000000000 ","sourceMap":"885:7760:42:-:0;;;1139:66;;;;;;;;;;1193:4;1163:35;;;;;;;;;;;;885:7760;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5379":[{"length":32,"start":292},{"length":32,"start":328},{"length":32,"start":2113},{"length":32,"start":2527},{"length":32,"start":4904}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c806372f7a95614610046578063d9a208121461007a578063ef2624ae146100de575b600080fd5b61004e610122565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100dc6004803603604081101561009057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610146565b005b610120600480360360208110156100f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109dd565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156101eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806115476030913960400191505060405180910390fd5b600160055414610246576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806115f46022913960400191505060405180910390fd5b61024f816110b8565b6102a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806115776021913960400191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b15801561030d57600080fd5b505afa158015610321573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561034b57600080fd5b810190808051604051939291908464010000000082111561036b57600080fd5b8382019150602082018581111561038157600080fd5b825186600182028301116401000000008211171561039e57600080fd5b8083526020830192505050908051906020019080838360005b838110156103d25780820151818401526020810190506103b7565b50505050905090810190601f1680156103ff5780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b6020831061043c5780518252602082019150602081019050602083039250610419565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405160200180807f312e312e310000000000000000000000000000000000000000000000000000008152506005019050604051602081830303815290604052805190602001208114610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611598602b913960400191505060405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b15801561055f57600080fd5b505afa158015610573573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561059d57600080fd5b81019080805160405193929190846401000000008211156105bd57600080fd5b838201915060208201858111156105d357600080fd5b82518660018202830111640100000000821117156105f057600080fd5b8083526020830192505050908051906020019080838360005b83811015610624578082015181840152602081019050610609565b50505050905090810190601f1680156106515780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b6020831061068e578051825260208201915060208101905060208303925061066b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405160200180807f312e332e30000000000000000000000000000000000000000000000000000000815250600501905060405160208183030381529060405280519060200120811480610764575060405160200180807f312e342e3100000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012081145b6107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611598602b913960400191505060405180910390fd5b60003090508073ffffffffffffffffffffffffffffffffffffffff1663f08a0323856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a861089f6110cb565b60045460008860405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825286818151815260200191508051906020019060200280838360005b8381101561092657808201518184015260208101905061090b565b505050509050019550505050505060405180910390a2600063d9a208128686604051602401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506109d58682611279565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806115476030913960400191505060405180910390fd5b600160055414610add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806115f46022913960400191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806115246023913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b158015610bd057600080fd5b505afa158015610be4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610c0e57600080fd5b8101908080516040519392919084640100000000821115610c2e57600080fd5b83820191506020820185811115610c4457600080fd5b8251866001820283011164010000000082111715610c6157600080fd5b8083526020830192505050908051906020019080838360005b83811015610c95578082015181840152602081019050610c7a565b50505050905090810190601f168015610cc25780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b60208310610cff5780518252602082019150602081019050602083039250610cdc565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060008373ffffffffffffffffffffffffffffffffffffffff1663ffa1ad746040518163ffffffff1660e01b815260040160006040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610dc257600080fd5b8101908080516040519392919084640100000000821115610de257600080fd5b83820191506020820185811115610df857600080fd5b8251866001820283011164010000000082111715610e1557600080fd5b8083526020830192505050908051906020019080838360005b83811015610e49578082015181840152602081019050610e2e565b50505050905090810190601f168015610e765780820380516001836020036101000a031916815260200191505b506040525050506040516020018082805190602001908083835b60208310610eb35780518252602082019150602081019050602083039250610e90565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050808214610f48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806115c36031913960400191505060405180910390fd5b60405160200180807f312e332e30000000000000000000000000000000000000000000000000000000815250600501905060405160208183030381529060405280519060200120811480610fe1575060405160200180807f312e342e3100000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012081145b611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611598602b913960400191505060405180910390fd5b600063ef2624ae85604051602401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506110b18582611279565b5050505050565b600080823b905060008111915050919050565b6060600060035467ffffffffffffffff811180156110e857600080fd5b506040519080825280602002602001820160405280156111175781602001602082028036833780820191505090505b509050600060019050600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126f57808483815181106111c657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050611186565b8394505050505090565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008033600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed7f0000000000000000000000000000000000000000000000000000000000000000600084600160008060008060008a604051808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018060200189600181111561138b57fe5b81526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528c818151815260200191508051906020019080838360005b8381101561141a5780820151818401526020810190506113ff565b50505050905090810190601f1680156114475780820380516001836020036101000a031916815260200191505b50848103835260008152602001848103825285818151815260200191508051906020019080838360005b8381101561148c578082015181840152602081019050611471565b50505050905090810190601f1680156114b95780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a17f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b883604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150505056fe5361666520697320616c7265616479207573696e67207468652073696e676c65746f6e4d6967726174696f6e2073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c66616c6c6261636b48616e646c6572206973206e6f74206120636f6e747261637450726f76696465642073696e676c65746f6e2076657273696f6e206973206e6f7420737570706f727465644c322073696e676c65746f6e206d757374206d617463682063757272656e742076657273696f6e2073696e676c65746f6e53616665206d7573742068617665206e6f7420657865637574656420616e79207478a2646970667358221220d914c30647fc923b19a050a72872aeedb4f96d94ca6646a06297dff0c83f728564736f6c63430007060033","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 0x72F7A956 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD9A20812 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xEF2624AE EQ PUSH2 0xDE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x120 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x9DD JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1547 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x5 SLOAD EQ PUSH2 0x246 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15F4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x24F DUP2 PUSH2 0x10B8 JUMP JUMPDEST PUSH2 0x2A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1577 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x321 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B 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 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3D2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3B7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3FF 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x43C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x419 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E312E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1598 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x59D 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 0x5BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x5F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x624 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x609 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x651 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x68E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x66B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E332E30000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ DUP1 PUSH2 0x764 JUMPI POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ JUMPDEST PUSH2 0x7B9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1598 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ADDRESS SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF08A0323 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x827 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x83B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x141DF868A6331AF528E38C83B7AA03EDC19BE66E37AE67F9285BF4F8E3C6A1A8 PUSH2 0x89F PUSH2 0x10CB JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 DUP9 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x926 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x90B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x0 PUSH4 0xD9A20812 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH2 0x9D5 DUP7 DUP3 PUSH2 0x1279 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1547 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x5 SLOAD EQ PUSH2 0xADD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15F4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xB88 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1524 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC0E 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 0xC2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xC44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xC61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC95 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xC7A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xCC2 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xCFF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFFA1AD74 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 0xD84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD98 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDC2 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 0xDE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xDF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x1 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xE15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 POP POP POP SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE49 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE2E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE76 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 POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xEB3 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xE90 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 EQ PUSH2 0xF48 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x31 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15C3 PUSH1 0x31 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E332E30000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ DUP1 PUSH2 0xFE1 JUMPI POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x312E342E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x5 ADD SWAP1 POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 EQ JUMPDEST PUSH2 0x1036 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1598 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH4 0xEF2624AE DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH2 0x10B1 DUP6 DUP3 PUSH2 0x1279 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x10E8 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 0x1117 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x126F JUMPI DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11C6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x2 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x1186 JUMP JUMPDEST DUP4 SWAP5 POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 CALLER PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH32 0x66753CD2356569EE081232E3BE8909B950E0A76C1F8460C3A5E3C2BE32B11BED PUSH32 0x0 PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH1 0x40 MLOAD DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP10 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x138B JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP13 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 0x141A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x13FF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1447 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 DUP5 DUP2 SUB DUP4 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 SUB DUP3 MSTORE DUP6 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 0x148C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1471 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x14B9 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 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP INVALID MSTORE8 PUSH2 0x6665 KECCAK256 PUSH10 0x7320616C726561647920 PUSH22 0x73696E67207468652073696E676C65746F6E4D696772 PUSH2 0x7469 PUSH16 0x6E2073686F756C64206F6E6C79206265 KECCAK256 PUSH4 0x616C6C65 PUSH5 0x2076696120 PUSH5 0x656C656761 PUSH21 0x6563616C6C66616C6C6261636B48616E646C657220 PUSH10 0x73206E6F74206120636F PUSH15 0x747261637450726F76696465642073 PUSH10 0x6E676C65746F6E207665 PUSH19 0x73696F6E206973206E6F7420737570706F7274 PUSH6 0x644C32207369 PUSH15 0x676C65746F6E206D757374206D6174 PUSH4 0x68206375 PUSH19 0x72656E742076657273696F6E2073696E676C65 PUSH21 0x6F6E53616665206D7573742068617665206E6F7420 PUSH6 0x786563757465 PUSH5 0x20616E7920 PUSH21 0x78A2646970667358221220D914C30647FC923B19A0 POP 0xA7 0x28 PUSH19 0xAEEDB4F96D94CA6646A06297DFF0C83F728564 PUSH20 0x6F6C634300070600330000000000000000000000 ","sourceMap":"885:7760:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;965:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5422:1270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3915:1059;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;965:44;;;:::o;5422:1270::-;2259:19;2242:36;;2250:4;2242:36;;;;2234:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2632:1:::1;2623:5;;:10;2615:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5551:27:::2;5562:15;5551:10;:27::i;:::-;5543:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5627:27;5690:9:::0;::::2;;;;;;;;;;5684:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;5667:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5657:55;;;;;;5627:85;;5763:25;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;5753:36;;;;;;5730:19;:59;5722:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5848:27;5911:11;5905:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;5888:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5878:57;;;;;;5848:87;;5999:25;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;5989:36;;;;;;5966:19;:59;:122;;;;6062:25;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;6052:36;;;;;;6029:19;:59;5966:122;5945:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6168:10;6195:4;6168:33;;6211:4;:23;;;6235:15;6211:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;6387:19;6377:83;;;6408:11;:9;:11::i;:::-;6421:9;;6440:1;6444:15;6377:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6549:25;6600:10;6612:11;6625:15;6577:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6549:92;;6651:34;6659:11;6672:12;6651:7;:34::i;:::-;2682:1;;;;5422:1270:::0;;:::o;3915:1059::-;2259:19;2242:36;;2250:4;2242:36;;;;2234:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2632:1:::1;2623:5;;:10;2615:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:18:::2;4028:9:::0;::::2;;;;;;;;;;4007:30;;4069:11;4055:25;;:10;:25;;;;4047:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4130:27;4193:10;4187:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;4170:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4160:56;;;;;;4130:86;;4226:27;4289:11;4283:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;4266:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4256:57;;;;;;4226:87;;4355:19;4332;:42;4324:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4613:25;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;4603:36;;;;;;4580:19;:59;:122;;;;4676:25;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;4666:36;;;;;;4643:19;:59;4580:122;4559:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4848:25;4899:10;4911:11;4876:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4848:75;;4933:34;4941:11;4954:12;4933:7;:34::i;:::-;2682:1;;;;3915:1059:::0;:::o;7324:337::-;7384:4;7400:12;7521:7;7509:20;7501:28;;7653:1;7646:4;:8;7639:15;;;7324:337;;;:::o;8160:483::-;8204:16;8232:22;8271:10;;8257:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8232:50;;8292:22;8325:3;8292:37;;8372:13;8399:20;8422:6;:22;8429:14;8422:22;;;;;;;;;;;;;;;;;;;;;;;;;8399:45;;8454:161;8477:14;8461:30;;:12;:30;;;8454:161;;8522:12;8507:5;8513;8507:12;;;;;;;;;;;;;:27;;;;;;;;;;;8563:6;:20;8570:12;8563:20;;;;;;;;;;;;;;;;;;;;;;;;;8548:35;;8597:7;;;;;;;8454:161;;;8631:5;8624:12;;;;;;8160:483;:::o;2833:701::-;2928:11;2916:9;;:23;;;;;;;;;;;;;;;;;;2993:27;3034:1;3037:10;3049:9;;3023:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2993:66;;3157:325;3194:19;3227:1;3242:12;3268:27;3309:1;3324;3339;3362;3394;3458:14;3157:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3497:30;3515:11;3497:30;;;;;;;;;;;;;;;;;;;;2833:701;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"1141400","executionCost":"infinite","totalCost":"infinite"},"external":{"MIGRATION_SINGLETON()":"infinite","migrateFromV111(address,address)":"infinite","migrateToL2(address)":"infinite"},"internal":{"getOwners()":"infinite","isContract(address)":"747","migrate(address,bytes memory)":"infinite"}},"methodIdentifiers":{"MIGRATION_SINGLETON()":"72f7a956","migrateFromV111(address,address)":"d9a20812","migrateToL2(address)":"ef2624ae"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"}],\"name\":\"ChangedMasterCopy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"additionalInfo\",\"type\":\"bytes\"}],\"name\":\"SafeMultiSigTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initializer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"}],\"name\":\"SafeSetup\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MIGRATION_SINGLETON\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Singleton\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"}],\"name\":\"migrateFromV111\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Singleton\",\"type\":\"address\"}],\"name\":\"migrateToL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"IMPORTANT: The migration will only work with proxies that store the implementation address in the storage slot 0.\",\"events\":{\"ChangedMasterCopy(address)\":{\"params\":{\"singleton\":\"New master copy address\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the migrationSingleton with the contract's own address.\"},\"migrateFromV111(address,address)\":{\"details\":\"This function should only be called via a delegatecall to perform the upgrade. Singletons version will be checked, so it implies that contracts exist. A valid and compatible fallbackHandler needs to be provided, only existence will be checked.\"},\"migrateToL2(address)\":{\"details\":\"This function should only be called via a delegatecall to perform the upgrade. Singletons versions will be compared, so it implies that contracts exist\"}},\"title\":\"Migration Contract for updating a Safe from 1.1.1/1.3.0/1.4.1 versions to a L2 version. Useful when replaying a Safe from a non L2 network in a L2 network.\",\"version\":1},\"userdoc\":{\"events\":{\"ChangedMasterCopy(address)\":{\"notice\":\"Event indicating a change of master copy address.\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor\"},\"migrateFromV111(address,address)\":{\"notice\":\"Migrate from Safe 1.1.1 Singleton to 1.3.0 or 1.4.1 L2 Safe is required to have nonce 0 so backend can support it after the migration\"},\"migrateToL2(address)\":{\"notice\":\"Migrate from Safe 1.3.0/1.4.1 Singleton (L1) to the same version provided L2 singleton Safe is required to have nonce 0 so backend can support it after the migration\"}},\"notice\":\"This contract facilitates the migration of a Safe contract from version 1.1.1 to 1.3.0/1.4.1 L2, 1.3.0 to 1.3.0L2 or from 1.4.1 to 1.4.1L2         Other versions are not supported\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SafeToL2Migration.sol\":\"SafeToL2Migration\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeToL2Migration.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\n/* solhint-disable one-contract-per-file */\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport {SafeStorage} from \\\"../libraries/SafeStorage.sol\\\";\\nimport {Enum} from \\\"../common/Enum.sol\\\";\\n\\ninterface ISafe {\\n    // solhint-disable-next-line\\n    function VERSION() external view returns (string memory);\\n\\n    function setFallbackHandler(address handler) external;\\n}\\n\\n/**\\n * @title Migration Contract for updating a Safe from 1.1.1/1.3.0/1.4.1 versions to a L2 version. Useful when replaying a Safe from a non L2 network in a L2 network.\\n * @notice This contract facilitates the migration of a Safe contract from version 1.1.1 to 1.3.0/1.4.1 L2, 1.3.0 to 1.3.0L2 or from 1.4.1 to 1.4.1L2\\n *         Other versions are not supported\\n * @dev IMPORTANT: The migration will only work with proxies that store the implementation address in the storage slot 0.\\n */\\ncontract SafeToL2Migration is SafeStorage {\\n    // Address of this contract\\n    address public immutable MIGRATION_SINGLETON;\\n\\n    /**\\n     * @notice Constructor\\n     * @dev Initializes the migrationSingleton with the contract's own address.\\n     */\\n    constructor() {\\n        MIGRATION_SINGLETON = address(this);\\n    }\\n\\n    /**\\n     * @notice Event indicating a change of master copy address.\\n     * @param singleton New master copy address\\n     */\\n    event ChangedMasterCopy(address singleton);\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n\\n    event SafeMultiSigTransaction(\\n        address to,\\n        uint256 value,\\n        bytes data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes signatures,\\n        // We combine nonce, sender and threshold into one to avoid stack too deep\\n        // Dev note: additionalInfo should not contain `bytes`, as this complicates decoding\\n        bytes additionalInfo\\n    );\\n\\n    /**\\n     * @notice Modifier to make a function callable via delegatecall only.\\n     * If the function is called via a regular call, it will revert.\\n     */\\n    modifier onlyDelegateCall() {\\n        require(address(this) != MIGRATION_SINGLETON, \\\"Migration should only be called via delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Modifier to prevent using initialized Safes.\\n     * If Safe has a nonce higher than 0, it will revert\\n     */\\n    modifier onlyNonceZero() {\\n        // Nonce is increased before executing a tx, so first executed tx will have nonce=1\\n        require(nonce == 1, \\\"Safe must have not executed any tx\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Internal function with common migration steps, changes the singleton and emits SafeMultiSigTransaction event\\n     */\\n    function migrate(address l2Singleton, bytes memory functionData) private {\\n        singleton = l2Singleton;\\n\\n        // Encode nonce, sender, threshold\\n        bytes memory additionalInfo = abi.encode(0, msg.sender, threshold);\\n\\n        // Simulate a L2 transaction so Safe Tx Service indexer picks up the Safe\\n        emit SafeMultiSigTransaction(\\n            MIGRATION_SINGLETON,\\n            0,\\n            functionData,\\n            Enum.Operation.DelegateCall,\\n            0,\\n            0,\\n            0,\\n            address(0),\\n            payable(address(0)),\\n            \\\"\\\", // We cannot detect signatures\\n            additionalInfo\\n        );\\n        emit ChangedMasterCopy(l2Singleton);\\n    }\\n\\n    /**\\n     * @notice Migrate from Safe 1.3.0/1.4.1 Singleton (L1) to the same version provided L2 singleton\\n     * Safe is required to have nonce 0 so backend can support it after the migration\\n     * @dev This function should only be called via a delegatecall to perform the upgrade.\\n     * Singletons versions will be compared, so it implies that contracts exist\\n     */\\n    function migrateToL2(address l2Singleton) external onlyDelegateCall onlyNonceZero {\\n        address _singleton = singleton;\\n        require(_singleton != l2Singleton, \\\"Safe is already using the singleton\\\");\\n        bytes32 oldSingletonVersion = keccak256(abi.encodePacked(ISafe(_singleton).VERSION()));\\n        bytes32 newSingletonVersion = keccak256(abi.encodePacked(ISafe(l2Singleton).VERSION()));\\n\\n        require(oldSingletonVersion == newSingletonVersion, \\\"L2 singleton must match current version singleton\\\");\\n        // There's no way to make sure if address is a valid singleton, unless we configure the contract for every chain\\n        require(\\n            newSingletonVersion == keccak256(abi.encodePacked(\\\"1.3.0\\\")) || newSingletonVersion == keccak256(abi.encodePacked(\\\"1.4.1\\\")),\\n            \\\"Provided singleton version is not supported\\\"\\n        );\\n\\n        // 0xef2624ae - bytes4(keccak256(\\\"migrateToL2(address)\\\"))\\n        bytes memory functionData = abi.encodeWithSelector(0xef2624ae, l2Singleton);\\n        migrate(l2Singleton, functionData);\\n    }\\n\\n    /**\\n     * @notice Migrate from Safe 1.1.1 Singleton to 1.3.0 or 1.4.1 L2\\n     * Safe is required to have nonce 0 so backend can support it after the migration\\n     * @dev This function should only be called via a delegatecall to perform the upgrade.\\n     * Singletons version will be checked, so it implies that contracts exist.\\n     * A valid and compatible fallbackHandler needs to be provided, only existence will be checked.\\n     */\\n    function migrateFromV111(address l2Singleton, address fallbackHandler) external onlyDelegateCall onlyNonceZero {\\n        require(isContract(fallbackHandler), \\\"fallbackHandler is not a contract\\\");\\n\\n        bytes32 oldSingletonVersion = keccak256(abi.encodePacked(ISafe(singleton).VERSION()));\\n        require(oldSingletonVersion == keccak256(abi.encodePacked(\\\"1.1.1\\\")), \\\"Provided singleton version is not supported\\\");\\n\\n        bytes32 newSingletonVersion = keccak256(abi.encodePacked(ISafe(l2Singleton).VERSION()));\\n        require(\\n            newSingletonVersion == keccak256(abi.encodePacked(\\\"1.3.0\\\")) || newSingletonVersion == keccak256(abi.encodePacked(\\\"1.4.1\\\")),\\n            \\\"Provided singleton version is not supported\\\"\\n        );\\n\\n        ISafe safe = ISafe(address(this));\\n        safe.setFallbackHandler(fallbackHandler);\\n\\n        // Safes < 1.3.0 did not emit SafeSetup, so Safe Tx Service backend needs the event to index the Safe\\n        emit SafeSetup(MIGRATION_SINGLETON, getOwners(), threshold, address(0), fallbackHandler);\\n\\n        // 0xd9a20812 - bytes4(keccak256(\\\"migrateFromV111(address,address)\\\"))\\n        bytes memory functionData = abi.encodeWithSelector(0xd9a20812, l2Singleton, fallbackHandler);\\n        migrate(l2Singleton, functionData);\\n    }\\n\\n    /**\\n     * @notice Checks whether an Ethereum address corresponds to a contract or an externally owned account (EOA).\\n     * @param account The Ethereum address to be checked.\\n     * @return A boolean value indicating whether the address is associated with a contract (true) or an EOA (false).\\n     * @dev This function relies on the `extcodesize` assembly opcode to determine whether an address is a contract.\\n     * It may return incorrect results in some edge cases (see documentation for details).\\n     * Developers should use caution when relying on the results of this function for critical decision-making.\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n\\n        // If the code size is greater than 0, it is a contract; otherwise, it is an EOA.\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @dev This function is copied from `OwnerManager.sol` and takes advantage of the fact that\\n     * migration happens with a `DELEGATECALL` in the context of the migrating account, which allows\\n     * us to read the owners directly from storage and avoid the additional overhead of a `CALL`\\n     * into the account implementation. Note that we can rely on the memory layout of the {owners}\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() internal view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n        address sentinelOwners = address(0x1);\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[sentinelOwners];\\n        while (currentOwner != sentinelOwners) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0x4a69b889fc09f2aabd397c6112b4b7c562871bf4cdf004daee4430c078731a6a\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":5330,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":5334,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":5338,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":5340,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":5342,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":5344,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":5346,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":5350,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":5356,"contract":"contracts/libraries/SafeToL2Migration.sol:SafeToL2Migration","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"ChangedMasterCopy(address)":{"notice":"Event indicating a change of master copy address."}},"kind":"user","methods":{"constructor":{"notice":"Constructor"},"migrateFromV111(address,address)":{"notice":"Migrate from Safe 1.1.1 Singleton to 1.3.0 or 1.4.1 L2 Safe is required to have nonce 0 so backend can support it after the migration"},"migrateToL2(address)":{"notice":"Migrate from Safe 1.3.0/1.4.1 Singleton (L1) to the same version provided L2 singleton Safe is required to have nonce 0 so backend can support it after the migration"}},"notice":"This contract facilitates the migration of a Safe contract from version 1.1.1 to 1.3.0/1.4.1 L2, 1.3.0 to 1.3.0L2 or from 1.4.1 to 1.4.1L2         Other versions are not supported","version":1}}},"contracts/libraries/SafeToL2Setup.sol":{"SafeToL2Setup":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"singleton","type":"address"}],"name":"ChangedMasterCopy","type":"event"},{"inputs":[{"internalType":"address","name":"l2Singleton","type":"address"}],"name":"setupToL2","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"This contract expects the singleton to be the {Safe} by default. Even if there are more {SafeL2} proxies deployed, the average gas cost on L2s is significantly lower, making the current design more economically efficient overall.","events":{"ChangedMasterCopy(address)":{"params":{"singleton":"New master copy address"}}},"kind":"dev","methods":{"setupToL2(address)":{"details":"This function checks that the chain ID is not 1, and if it isn't updates the singleton      to the provided L2 singleton."}},"stateVariables":{"SELF":{"details":"Address of the contract.      This is used to ensure that the contract is only ever `DELEGATECALL`-ed."}},"title":"Safe to L2 Setup Contract","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60a060405234801561001057600080fd5b503073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060805160601c61033461006460003980607652506103346000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fe51f64314610030575b600080fd5b6100726004803603602081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610074565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806102a96034913960400191505060405180910390fd5b600060055414610174576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806102dd6022913960400191505060405180910390fd5b80600061018082610295565b14156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4163636f756e7420646f65736e277420636f6e7461696e20636f64650000000081525060200191505060405180910390fd5b60016101fe6102a0565b1461029157816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b882604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5050565b6000813b9050919050565b60004690509056fe53616665546f4c3253657475702073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c53616665206d7573742068617665206e6f7420657865637574656420616e79207478a264697066735822122023649cd94e3067c8a913b2bbb4a32dc4fea9be2d0f070a4b7403c3e4e8db452464736f6c63430007060033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0x334 PUSH2 0x64 PUSH1 0x0 CODECOPY DUP1 PUSH1 0x76 MSTORE POP PUSH2 0x334 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 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xFE51F643 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x72 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x74 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x119 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x34 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2A9 PUSH1 0x34 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x5 SLOAD EQ PUSH2 0x174 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2DD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 PUSH2 0x180 DUP3 PUSH2 0x295 JUMP JUMPDEST EQ ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4163636F756E7420646F65736E277420636F6E7461696E20636F646500000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH2 0x1FE PUSH2 0x2A0 JUMP JUMPDEST EQ PUSH2 0x291 JUMPI DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODESIZE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 SLOAD PUSH16 0x4C3253657475702073686F756C64206F PUSH15 0x6C792062652063616C6C6564207669 PUSH2 0x2064 PUSH6 0x6C6567617465 PUSH4 0x616C6C53 PUSH2 0x6665 KECCAK256 PUSH14 0x7573742068617665206E6F742065 PUSH25 0x65637574656420616E79207478A26469706673582212202364 SWAP13 0xD9 0x4E ADDRESS PUSH8 0xC8A913B2BBB4A32D 0xC4 INVALID 0xA9 0xBE 0x2D 0xF SMOD EXP 0x4B PUSH21 0x3C3E4E8DB452464736F6C63430007060033000000 ","sourceMap":"613:2400:43:-:0;;;1085:51;;;;;;;;;;1124:4;1109:20;;;;;;;;;;;;613:2400;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5807":[{"length":32,"start":118}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fe51f64314610030575b600080fd5b6100726004803603602081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610074565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806102a96034913960400191505060405180910390fd5b600060055414610174576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806102dd6022913960400191505060405180910390fd5b80600061018082610295565b14156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4163636f756e7420646f65736e277420636f6e7461696e20636f64650000000081525060200191505060405180910390fd5b60016101fe6102a0565b1461029157816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75e41bc35ff1bf14d81d1d2f649c0084a0f974f9289c803ec9898eeec4c8d0b882604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5050565b6000813b9050919050565b60004690509056fe53616665546f4c3253657475702073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6c53616665206d7573742068617665206e6f7420657865637574656420616e79207478a264697066735822122023649cd94e3067c8a913b2bbb4a32dc4fea9be2d0f070a4b7403c3e4e8db452464736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xFE51F643 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x72 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x74 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x119 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x34 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2A9 PUSH1 0x34 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x5 SLOAD EQ PUSH2 0x174 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2DD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 PUSH2 0x180 DUP3 PUSH2 0x295 JUMP JUMPDEST EQ ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4163636F756E7420646F65736E277420636F6E7461696E20636F646500000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH2 0x1FE PUSH2 0x2A0 JUMP JUMPDEST EQ PUSH2 0x291 JUMPI DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x75E41BC35FF1BF14D81D1D2F649C0084A0F974F9289C803EC9898EEEC4C8D0B8 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODESIZE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 SLOAD PUSH16 0x4C3253657475702073686F756C64206F PUSH15 0x6C792062652063616C6C6564207669 PUSH2 0x2064 PUSH6 0x6C6567617465 PUSH4 0x616C6C53 PUSH2 0x6665 KECCAK256 PUSH14 0x7573742068617665206E6F742065 PUSH25 0x65637574656420616E79207478A26469706673582212202364 SWAP13 0xD9 0x4E ADDRESS PUSH8 0xC8A913B2BBB4A32D 0xC4 INVALID 0xA9 0xBE 0x2D 0xF SMOD EXP 0x4B PUSH21 0x3C3E4E8DB452464736F6C63430007060033000000 ","sourceMap":"613:2400:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2062:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1321:4;1304:21;;1312:4;1304:21;;;;1296:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1534:1:::1;1525:5;;:10;1517:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2155:11:::2;1775:1;1754:17;1763:7;1754:8;:17::i;:::-;:22;;1746:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;2195:1:::3;2182:9;:7;:9::i;:::-;:14;2178:117;;2224:11;2212:9;::::0;:23:::3;;;;;;;;;;;;;;;;;;2254:30;2272:11;2254:30;;;;;;;;;;;;;;;;;;;;2178:117;1584:1:::2;2062:239:::0;:::o;2718:293::-;2776:14;2939:7;2927:20;2917:30;;2903:54;;;:::o;2368:265::-;2409:14;2560:9;2550:19;;2536:43;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"164000","executionCost":"infinite","totalCost":"infinite"},"external":{"setupToL2(address)":"infinite"},"internal":{"chainId()":"22","codeSize(address)":"728"}},"methodIdentifiers":{"setupToL2(address)":"fe51f643"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"}],\"name\":\"ChangedMasterCopy\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Singleton\",\"type\":\"address\"}],\"name\":\"setupToL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract expects the singleton to be the {Safe} by default. Even if there are more {SafeL2} proxies deployed, the average gas cost on L2s is significantly lower, making the current design more economically efficient overall.\",\"events\":{\"ChangedMasterCopy(address)\":{\"params\":{\"singleton\":\"New master copy address\"}}},\"kind\":\"dev\",\"methods\":{\"setupToL2(address)\":{\"details\":\"This function checks that the chain ID is not 1, and if it isn't updates the singleton      to the provided L2 singleton.\"}},\"stateVariables\":{\"SELF\":{\"details\":\"Address of the contract.      This is used to ensure that the contract is only ever `DELEGATECALL`-ed.\"}},\"title\":\"Safe to L2 Setup Contract\",\"version\":1},\"userdoc\":{\"events\":{\"ChangedMasterCopy(address)\":{\"notice\":\"Event indicating a change of master copy address.\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Initializes a new {SafeToL2Setup} instance.\"},\"setupToL2(address)\":{\"notice\":\"Setup the Safe with the provided L2 singleton if needed.\"}},\"notice\":\"This contract facilitates the deployment of a Safe to the same address on all networks by         automatically changing the singleton to the L2 version when not on chain ID 1.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SafeToL2Setup.sol\":\"SafeToL2Setup\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeToL2Setup.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport {SafeStorage} from \\\"../libraries/SafeStorage.sol\\\";\\n\\n/**\\n * @title Safe to L2 Setup Contract\\n * @dev This contract expects the singleton to be the {Safe} by default. Even if there are more\\n * {SafeL2} proxies deployed, the average gas cost on L2s is significantly lower, making the\\n * current design more economically efficient overall.\\n * @notice This contract facilitates the deployment of a Safe to the same address on all networks by\\n *         automatically changing the singleton to the L2 version when not on chain ID 1.\\n */\\ncontract SafeToL2Setup is SafeStorage {\\n    /**\\n     * @dev Address of the contract.\\n     *      This is used to ensure that the contract is only ever `DELEGATECALL`-ed.\\n     */\\n    address private immutable SELF;\\n\\n    /**\\n     * @notice Event indicating a change of master copy address.\\n     * @param singleton New master copy address\\n     */\\n    event ChangedMasterCopy(address singleton);\\n\\n    /**\\n     * @notice Initializes a new {SafeToL2Setup} instance.\\n     */\\n    constructor() {\\n        SELF = address(this);\\n    }\\n\\n    /**\\n     * @notice Modifier ensure a function is only called via `DELEGATECALL`. Will revert otherwise.\\n     */\\n    modifier onlyDelegateCall() {\\n        require(address(this) != SELF, \\\"SafeToL2Setup should only be called via delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Modifier to prevent using initialized Safes.\\n     */\\n    modifier onlyNonceZero() {\\n        require(nonce == 0, \\\"Safe must have not executed any tx\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Modifier to ensure that the specified account is a contract.\\n     *\\n     */\\n    modifier onlyContract(address account) {\\n        require(codeSize(account) != 0, \\\"Account doesn't contain code\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @notice Setup the Safe with the provided L2 singleton if needed.\\n     * @dev This function checks that the chain ID is not 1, and if it isn't updates the singleton\\n     *      to the provided L2 singleton.\\n     */\\n    function setupToL2(address l2Singleton) external onlyDelegateCall onlyNonceZero onlyContract(l2Singleton) {\\n        if (chainId() != 1) {\\n            singleton = l2Singleton;\\n            emit ChangedMasterCopy(l2Singleton);\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the current chain ID.\\n     */\\n    function chainId() private view returns (uint256 result) {\\n        /* solhint-disable no-inline-assembly */\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            result := chainid()\\n        }\\n        /* solhint-enable no-inline-assembly */\\n    }\\n\\n    /**\\n     * @notice Returns the code size of the specified account.\\n     */\\n    function codeSize(address account) internal view returns (uint256 result) {\\n        /* solhint-disable no-inline-assembly */\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            result := extcodesize(account)\\n        }\\n        /* solhint-enable no-inline-assembly */\\n    }\\n}\\n\",\"keccak256\":\"0xaba9220fffe22dee39520d8cd81cce0b1d21e3102e67ec18b14900cb20700ef8\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":5330,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":5334,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":5338,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":5340,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":5342,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":5344,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":5346,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":5350,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":5356,"contract":"contracts/libraries/SafeToL2Setup.sol:SafeToL2Setup","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"ChangedMasterCopy(address)":{"notice":"Event indicating a change of master copy address."}},"kind":"user","methods":{"constructor":{"notice":"Initializes a new {SafeToL2Setup} instance."},"setupToL2(address)":{"notice":"Setup the Safe with the provided L2 singleton if needed."}},"notice":"This contract facilitates the deployment of a Safe to the same address on all networks by         automatically changing the singleton to the L2 version when not on chain ID 1.","version":1}}},"contracts/libraries/SignMessageLib.sol":{"SignMessageLib":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"msgHash","type":"bytes32"}],"name":"SignMsg","type":"event"},{"inputs":[{"internalType":"bytes","name":"message","type":"bytes"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"signMessage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{"getMessageHash(bytes)":{"details":"Returns hash of a message that can be signed by owners.","params":{"message":"Message that should be hashed."},"returns":{"_0":"Message hash."}},"signMessage(bytes)":{"details":"Can be verified using EIP-1271 validation method by passing the pre-image of the message hash and empty bytes as the signature.","params":{"_data":"Arbitrary length data that should be marked as signed on the behalf of address(this)."}}},"title":"SignMessageLib - Allows to sign messages on-chain by writing the signed message hashes on-chain.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506103c6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630a1028c41461003b57806385a5affe1461010a575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610183565b6040518082815260200191505060405180910390f35b6101816004803603602081101561012057600080fd5b810190808035906020019064010000000081111561013d57600080fd5b82018360208201111561014f57600080fd5b8035906020019184600183028401116401000000008311171561017157600080fd5b90919293919293905050506102f4565b005b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b3073ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561023157600080fd5b505afa158015610245573d6000803e3d6000fd5b505050506040513d602081101561025b57600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260010183815260200182815260200194505050505060405160208183030381529060405280519060200120915050919050565b600061034383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610183565b905060016007600083815260200190815260200160002081905550807fe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e460405160405180910390a250505056fea2646970667358221220b6edbb5eb57b87c6371f0f7b62449c6a356d2bbc694eefa3b35338ca1d8fbc3564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3C6 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 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA1028C4 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x85A5AFFE EQ PUSH2 0x10A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x183 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x181 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x2F4 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x60B3CBF8B4A223D68D641B3B6DDF9A298E7F33710CF3D3A9D1146B5A6150FBCA PUSH1 0x0 SHL DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF698DA25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 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 0x20 DUP2 LT ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x343 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x183 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x7 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH32 0xE7F4675038F4F6034DFCBBB24C4DC08E4EBF10EB9D257D3D02C0F38D122AC6E4 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xED 0xBB 0x5E 0xB5 PUSH28 0x87C6371F0F7B62449C6A356D2BBC694EEFA3B35338CA1D8FBC356473 PUSH16 0x6C634300070600330000000000000000 ","sourceMap":"282:1236:44:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c80630a1028c41461003b57806385a5affe1461010a575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610183565b6040518082815260200191505060405180910390f35b6101816004803603602081101561012057600080fd5b810190808035906020019064010000000081111561013d57600080fd5b82018360208201111561014f57600080fd5b8035906020019184600183028401116401000000008311171561017157600080fd5b90919293919293905050506102f4565b005b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b3073ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561023157600080fd5b505afa158015610245573d6000803e3d6000fd5b505050506040513d602081101561025b57600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260010183815260200182815260200194505050505060405160208183030381529060405280519060200120915050919050565b600061034383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610183565b905060016007600083815260200190815260200160002081905550807fe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e460405160405180910390a250505056fea2646970667358221220b6edbb5eb57b87c6371f0f7b62449c6a356d2bbc694eefa3b35338ca1d8fbc3564736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA1028C4 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x85A5AFFE EQ PUSH2 0x10A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x183 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x181 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x2F4 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x60B3CBF8B4A223D68D641B3B6DDF9A298E7F33710CF3D3A9D1146B5A6150FBCA PUSH1 0x0 SHL DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x19 PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0xF8 SHL ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF698DA25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 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 0x20 DUP2 LT ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP5 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x1 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x343 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x183 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x7 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH32 0xE7F4675038F4F6034DFCBBB24C4DC08E4EBF10EB9D257D3D02C0F38D122AC6E4 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xED 0xBB 0x5E 0xB5 PUSH28 0x87C6371F0F7B62449C6A356D2BBC694EEFA3B35338CA1D8FBC356473 PUSH16 0x6C634300070600330000000000000000 ","sourceMap":"282:1236:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1200:316;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;852:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1200:316;1267:7;1286:23;420:66;1333:17;;1362:7;1352:18;;;;;;1322:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1312:60;;;;;;1286:86;;1423:4;1416:12;;1437:4;1430:12;;1465:4;1444:44;;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1492:15;1399:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1389:120;;;;;;1382:127;;;1200:316;;;:::o;852:176::-;914:15;932:21;947:5;;932:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:21::i;:::-;914:39;;989:1;963:14;:23;978:7;963:23;;;;;;;;;;;:27;;;;1013:7;1005:16;;;;;;;;;;852:176;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"193200","executionCost":"238","totalCost":"193438"},"external":{"getMessageHash(bytes)":"infinite","signMessage(bytes)":"infinite"}},"methodIdentifiers":{"getMessageHash(bytes)":"0a1028c4","signMessage(bytes)":"85a5affe"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignMsg\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"signMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{\"getMessageHash(bytes)\":{\"details\":\"Returns hash of a message that can be signed by owners.\",\"params\":{\"message\":\"Message that should be hashed.\"},\"returns\":{\"_0\":\"Message hash.\"}},\"signMessage(bytes)\":{\"details\":\"Can be verified using EIP-1271 validation method by passing the pre-image of the message hash and empty bytes as the signature.\",\"params\":{\"_data\":\"Arbitrary length data that should be marked as signed on the behalf of address(this).\"}}},\"title\":\"SignMessageLib - Allows to sign messages on-chain by writing the signed message hashes on-chain.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"signMessage(bytes)\":{\"notice\":\"Marks a message (`_data`) as signed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SignMessageLib.sol\":\"SignMessageLib\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/Safe.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./base/ModuleManager.sol\\\";\\nimport \\\"./base/OwnerManager.sol\\\";\\nimport \\\"./base/FallbackManager.sol\\\";\\nimport \\\"./base/GuardManager.sol\\\";\\nimport \\\"./common/NativeCurrencyPaymentFallback.sol\\\";\\nimport \\\"./common/Singleton.sol\\\";\\nimport \\\"./common/SignatureDecoder.sol\\\";\\nimport \\\"./common/SecuredTokenTransfer.sol\\\";\\nimport \\\"./common/StorageAccessible.sol\\\";\\nimport \\\"./interfaces/ISignatureValidator.sol\\\";\\nimport \\\"./external/SafeMath.sol\\\";\\n\\n/**\\n * @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.\\n * @dev Most important concepts:\\n *      - Threshold: Number of required confirmations for a Safe transaction.\\n *      - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and\\n *        approve transactions. Managed in `OwnerManager`.\\n *      - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.\\n *      - Nonce: Each transaction should have a different nonce to prevent replay attacks.\\n *      - Signature: A valid signature of an owner of the Safe for a transaction hash.\\n *      - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.\\n *      - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.\\n *      - Fallback: Fallback handler is a contract that can provide additional read-only functional for Safe. Managed in `FallbackManager`.\\n *      Note: This version of the implementation contract doesn't emit events for the sake of gas efficiency and therefore requires a tracing node for indexing/\\n *      For the events-based implementation see `SafeL2.sol`.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract Safe is\\n    Singleton,\\n    NativeCurrencyPaymentFallback,\\n    ModuleManager,\\n    OwnerManager,\\n    SignatureDecoder,\\n    SecuredTokenTransfer,\\n    ISignatureValidatorConstants,\\n    FallbackManager,\\n    StorageAccessible,\\n    GuardManager\\n{\\n    using SafeMath for uint256;\\n\\n    string public constant VERSION = \\\"1.4.1\\\";\\n\\n    // keccak256(\\n    //     \\\"EIP712Domain(uint256 chainId,address verifyingContract)\\\"\\n    // );\\n    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\\n\\n    // keccak256(\\n    //     \\\"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\\\"\\n    // );\\n    bytes32 private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8;\\n\\n    event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler);\\n    event ApproveHash(bytes32 indexed approvedHash, address indexed owner);\\n    event SignMsg(bytes32 indexed msgHash);\\n    event ExecutionFailure(bytes32 indexed txHash, uint256 payment);\\n    event ExecutionSuccess(bytes32 indexed txHash, uint256 payment);\\n\\n    uint256 public nonce;\\n    bytes32 private _deprecatedDomainSeparator;\\n    // Mapping to keep track of all message hashes that have been approved by ALL REQUIRED owners\\n    mapping(bytes32 => uint256) public signedMessages;\\n    // Mapping to keep track of all hashes (message or transaction) that have been approved by ANY owners\\n    mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\\n\\n    // This constructor ensures that this contract can only be used as a singleton for Proxy contracts\\n    constructor() {\\n        /**\\n         * By setting the threshold it is not possible to call setup anymore,\\n         * so we create a Safe with 0 owners and threshold 1.\\n         * This is an unusable Safe, perfect for the singleton\\n         */\\n        threshold = 1;\\n    }\\n\\n    /**\\n     * @notice Sets an initial storage of the Safe contract.\\n     * @dev This method can only be called once.\\n     *      If a proxy was created without setting up, anyone can call setup and claim the proxy.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     * @param to Contract address for optional delegate call.\\n     * @param data Data payload for optional delegate call.\\n     * @param fallbackHandler Handler for fallback calls to this contract\\n     * @param paymentToken Token that should be used for the payment (0 is ETH)\\n     * @param payment Value that should be paid\\n     * @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)\\n     */\\n    function setup(\\n        address[] calldata _owners,\\n        uint256 _threshold,\\n        address to,\\n        bytes calldata data,\\n        address fallbackHandler,\\n        address paymentToken,\\n        uint256 payment,\\n        address payable paymentReceiver\\n    ) external {\\n        // setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice\\n        setupOwners(_owners, _threshold);\\n        if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);\\n        // As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules\\n        setupModules(to, data);\\n\\n        if (payment > 0) {\\n            // To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)\\n            // baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment\\n            handlePayment(payment, 0, 1, paymentToken, paymentReceiver);\\n        }\\n        emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);\\n    }\\n\\n    /** @notice Executes a `operation` {0: Call, 1: DelegateCall}} transaction to `to` with `value` (Native Currency)\\n     *          and pays `gasPrice` * `gasLimit` in `gasToken` token to `refundReceiver`.\\n     * @dev The fees are always transferred, even if the user transaction fails.\\n     *      This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      - if the `gasToken` is a contract or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address of Safe transaction.\\n     * @param value Ether value of Safe transaction.\\n     * @param data Data payload of Safe transaction.\\n     * @param operation Operation type of Safe transaction.\\n     * @param safeTxGas Gas that should be used for the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @return success Boolean indicating transaction's success.\\n     */\\n    function execTransaction(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures\\n    ) public payable virtual returns (bool success) {\\n        bytes32 txHash;\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            bytes memory txHashData = encodeTransactionData(\\n                // Transaction info\\n                to,\\n                value,\\n                data,\\n                operation,\\n                safeTxGas,\\n                // Payment info\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                // Signature info\\n                nonce\\n            );\\n            // Increase nonce and execute transaction.\\n            nonce++;\\n            txHash = keccak256(txHashData);\\n            checkSignatures(txHash, txHashData, signatures);\\n        }\\n        address guard = getGuard();\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkTransaction(\\n                    // Transaction info\\n                    to,\\n                    value,\\n                    data,\\n                    operation,\\n                    safeTxGas,\\n                    // Payment info\\n                    baseGas,\\n                    gasPrice,\\n                    gasToken,\\n                    refundReceiver,\\n                    // Signature info\\n                    signatures,\\n                    msg.sender\\n                );\\n            }\\n        }\\n        // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500)\\n        // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150\\n        require(gasleft() >= ((safeTxGas * 64) / 63).max(safeTxGas + 2500) + 500, \\\"GS010\\\");\\n        // Use scope here to limit variable lifetime and prevent `stack too deep` errors\\n        {\\n            uint256 gasUsed = gasleft();\\n            // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas)\\n            // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas\\n            success = execute(to, value, data, operation, gasPrice == 0 ? (gasleft() - 2500) : safeTxGas);\\n            gasUsed = gasUsed.sub(gasleft());\\n            // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful\\n            // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert\\n            require(success || safeTxGas != 0 || gasPrice != 0, \\\"GS013\\\");\\n            // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\\n            uint256 payment = 0;\\n            if (gasPrice > 0) {\\n                payment = handlePayment(gasUsed, baseGas, gasPrice, gasToken, refundReceiver);\\n            }\\n            if (success) emit ExecutionSuccess(txHash, payment);\\n            else emit ExecutionFailure(txHash, payment);\\n        }\\n        {\\n            if (guard != address(0)) {\\n                Guard(guard).checkAfterExecution(txHash, success);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Handles the payment for a Safe transaction.\\n     * @param gasUsed Gas used by the Safe transaction.\\n     * @param baseGas Gas costs that are independent of the transaction execution (e.g. base transaction fee, signature check, payment of the refund).\\n     * @param gasPrice Gas price that should be used for the payment calculation.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @return payment The amount of payment made in the specified token.\\n     */\\n    function handlePayment(\\n        uint256 gasUsed,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver\\n    ) private returns (uint256 payment) {\\n        // solhint-disable-next-line avoid-tx-origin\\n        address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver;\\n        if (gasToken == address(0)) {\\n            // For ETH we will only adjust the gas price to not be higher than the actual used gas price\\n            payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice);\\n            require(receiver.send(payment), \\\"GS011\\\");\\n        } else {\\n            payment = gasUsed.add(baseGas).mul(gasPrice);\\n            require(transferToken(gasToken, receiver, payment), \\\"GS012\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     */\\n    function checkSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures) public view {\\n        // Load threshold to avoid multiple storage loads\\n        uint256 _threshold = threshold;\\n        // Check that a threshold is set\\n        require(_threshold > 0, \\\"GS001\\\");\\n        checkNSignatures(dataHash, data, signatures, _threshold);\\n    }\\n\\n    /**\\n     * @notice Checks whether the signature provided is valid for the provided data and hash. Reverts otherwise.\\n     * @dev Since the EIP-1271 does an external call, be mindful of reentrancy attacks.\\n     * @param dataHash Hash of the data (could be either a message hash or transaction hash)\\n     * @param data That should be signed (this is passed to an external validator contract)\\n     * @param signatures Signature data that should be verified.\\n     *                   Can be packed ECDSA signature ({bytes32 r}{bytes32 s}{uint8 v}), contract signature (EIP-1271) or approved hash.\\n     * @param requiredSignatures Amount of required valid signatures.\\n     */\\n    function checkNSignatures(bytes32 dataHash, bytes memory data, bytes memory signatures, uint256 requiredSignatures) public view {\\n        // Check that the provided signature data is not too short\\n        require(signatures.length >= requiredSignatures.mul(65), \\\"GS020\\\");\\n        // There cannot be an owner with address 0.\\n        address lastOwner = address(0);\\n        address currentOwner;\\n        uint8 v;\\n        bytes32 r;\\n        bytes32 s;\\n        uint256 i;\\n        for (i = 0; i < requiredSignatures; i++) {\\n            (v, r, s) = signatureSplit(signatures, i);\\n            if (v == 0) {\\n                require(keccak256(data) == dataHash, \\\"GS027\\\");\\n                // If v is 0 then it is a contract signature\\n                // When handling contract signatures the address of the contract is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n\\n                // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes\\n                // This check is not completely accurate, since it is possible that more signatures than the threshold are send.\\n                // Here we only check that the pointer is not pointing inside the part that is being processed\\n                require(uint256(s) >= requiredSignatures.mul(65), \\\"GS021\\\");\\n\\n                // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes)\\n                require(uint256(s).add(32) <= signatures.length, \\\"GS022\\\");\\n\\n                // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length\\n                uint256 contractSignatureLen;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    contractSignatureLen := mload(add(add(signatures, s), 0x20))\\n                }\\n                require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, \\\"GS023\\\");\\n\\n                // Check signature\\n                bytes memory contractSignature;\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\\n                    contractSignature := add(add(signatures, s), 0x20)\\n                }\\n                require(ISignatureValidator(currentOwner).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, \\\"GS024\\\");\\n            } else if (v == 1) {\\n                // If v is 1 then it is an approved hash\\n                // When handling approved hashes the address of the approver is encoded into r\\n                currentOwner = address(uint160(uint256(r)));\\n                // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\\n                require(msg.sender == currentOwner || approvedHashes[currentOwner][dataHash] != 0, \\\"GS025\\\");\\n            } else if (v > 30) {\\n                // If v > 30 then default va (27,28) has been adjusted for eth_sign flow\\n                // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover\\n                currentOwner = ecrecover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", dataHash)), v - 4, r, s);\\n            } else {\\n                // Default is the ecrecover flow with the provided data hash\\n                // Use ecrecover with the messageHash for EOA signatures\\n                currentOwner = ecrecover(dataHash, v, r, s);\\n            }\\n            require(currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, \\\"GS026\\\");\\n            lastOwner = currentOwner;\\n        }\\n    }\\n\\n    /**\\n     * @notice Marks hash `hashToApprove` as approved.\\n     * @dev This can be used with a pre-approved hash transaction signature.\\n     *      IMPORTANT: The approved hash stays approved forever. There's no revocation mechanism, so it behaves similarly to ECDSA signatures\\n     * @param hashToApprove The hash to mark as approved for signatures that are verified by this contract.\\n     */\\n    function approveHash(bytes32 hashToApprove) external {\\n        require(owners[msg.sender] != address(0), \\\"GS030\\\");\\n        approvedHashes[msg.sender][hashToApprove] = 1;\\n        emit ApproveHash(hashToApprove, msg.sender);\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for this contract, as defined in the EIP-712 standard.\\n     * @return bytes32 The domain separator hash.\\n     */\\n    function domainSeparator() public view returns (bytes32) {\\n        return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this));\\n    }\\n\\n    /**\\n     * @notice Returns the pre-image of the transaction hash (see getTransactionHash).\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Gas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for that are independent of the transaction execution(e.g. base transaction fee, signature check, payment of the refund)\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash bytes.\\n     */\\n    function encodeTransactionData(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes memory) {\\n        bytes32 safeTxHash = keccak256(\\n            abi.encode(\\n                SAFE_TX_TYPEHASH,\\n                to,\\n                value,\\n                keccak256(data),\\n                operation,\\n                safeTxGas,\\n                baseGas,\\n                gasPrice,\\n                gasToken,\\n                refundReceiver,\\n                _nonce\\n            )\\n        );\\n        return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash);\\n    }\\n\\n    /**\\n     * @notice Returns transaction hash to be signed by owners.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @param safeTxGas Fas that should be used for the safe transaction.\\n     * @param baseGas Gas costs for data used to trigger the safe transaction.\\n     * @param gasPrice Maximum gas price that should be used for this transaction.\\n     * @param gasToken Token address (or 0 if ETH) that is used for the payment.\\n     * @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\\n     * @param _nonce Transaction nonce.\\n     * @return Transaction hash.\\n     */\\n    function getTransactionHash(\\n        address to,\\n        uint256 value,\\n        bytes calldata data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address refundReceiver,\\n        uint256 _nonce\\n    ) public view returns (bytes32) {\\n        return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce));\\n    }\\n}\\n\",\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/Executor.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\n\\n/**\\n * @title Executor - A contract that can execute transactions\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Executor {\\n    /**\\n     * @notice Executes either a delegatecall or a call with provided parameters.\\n     * @dev This method doesn't perform any sanity check of the transaction, such as:\\n     *      - if the contract at `to` address has code or not\\n     *      It is the responsibility of the caller to perform such checks.\\n     * @param to Destination address.\\n     * @param value Ether value.\\n     * @param data Data payload.\\n     * @param operation Operation type.\\n     * @return success boolean flag indicating if the call succeeded.\\n     */\\n    function execute(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 txGas\\n    ) internal returns (bool success) {\\n        if (operation == Enum.Operation.DelegateCall) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        } else {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/FallbackManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title Fallback Manager - A contract managing fallback calls made to this contract\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract FallbackManager is SelfAuthorized {\\n    event ChangedFallbackHandler(address indexed handler);\\n\\n    // keccak256(\\\"fallback_manager.handler.address\\\")\\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\\n\\n    /**\\n     *  @notice Internal function to set the fallback handler.\\n     *  @param handler contract to handle fallback calls.\\n     */\\n    function internalSetFallbackHandler(address handler) internal {\\n        /*\\n            If a fallback handler is set to self, then the following attack vector is opened:\\n            Imagine we have a function like this:\\n            function withdraw() internal authorized {\\n                withdrawalAddress.call.value(address(this).balance)(\\\"\\\");\\n            }\\n\\n            If the fallback method is triggered, the fallback handler appends the msg.sender address to the calldata and calls the fallback handler.\\n            A potential attacker could call a Safe with the 3 bytes signature of a withdraw function. Since 3 bytes do not create a valid signature,\\n            the call would end in a fallback handler. Since it appends the msg.sender address to the calldata, the attacker could craft an address \\n            where the first 3 bytes of the previous calldata + the first byte of the address make up a valid function signature. The subsequent call would result in unsanctioned access to Safe's internal protected methods.\\n            For some reason, solidity matches the first 4 bytes of the calldata to a function signature, regardless if more data follow these 4 bytes.\\n        */\\n        require(handler != address(this), \\\"GS400\\\");\\n\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, handler)\\n        }\\n    }\\n\\n    /**\\n     * @notice Set Fallback Handler to `handler` for the Safe.\\n     * @dev Only fallback calls without value and with data will be forwarded.\\n     *      This can only be done via a Safe transaction.\\n     *      Cannot be set to the Safe itself.\\n     * @param handler contract to handle fallback calls.\\n     */\\n    function setFallbackHandler(address handler) public authorized {\\n        internalSetFallbackHandler(handler);\\n        emit ChangedFallbackHandler(handler);\\n    }\\n\\n    // @notice Forwards all calls to the fallback handler if set. Returns 0 if no handler is set.\\n    // @dev Appends the non-padded caller address to the calldata to be optionally used in the handler\\n    //      The handler can make us of `HandlerContext.sol` to extract the address.\\n    //      This is done because in the next call frame the `msg.sender` will be FallbackManager's address\\n    //      and having the original caller address may enable additional verification scenarios.\\n    // solhint-disable-next-line payable-fallback,no-complex-fallback\\n    fallback() external {\\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let handler := sload(slot)\\n            if iszero(handler) {\\n                return(0, 0)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            // The msg.sender address is shifted to the left by 12 bytes to remove the padding\\n            // Then the address without padding is stored right after the calldata\\n            mstore(calldatasize(), shl(96, caller()))\\n            // Add 20 bytes for the address appended add the end\\n            let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if iszero(success) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/GuardManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"../interfaces/IERC165.sol\\\";\\n\\ninterface Guard is IERC165 {\\n    function checkTransaction(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation,\\n        uint256 safeTxGas,\\n        uint256 baseGas,\\n        uint256 gasPrice,\\n        address gasToken,\\n        address payable refundReceiver,\\n        bytes memory signatures,\\n        address msgSender\\n    ) external;\\n\\n    function checkAfterExecution(bytes32 txHash, bool success) external;\\n}\\n\\nabstract contract BaseGuard is Guard {\\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\\n        return\\n            interfaceId == type(Guard).interfaceId || // 0xe6d7a83a\\n            interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7\\n    }\\n}\\n\\n/**\\n * @title Guard Manager - A contract managing transaction guards which perform pre and post-checks on Safe transactions.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract GuardManager is SelfAuthorized {\\n    event ChangedGuard(address indexed guard);\\n\\n    // keccak256(\\\"guard_manager.guard.address\\\")\\n    bytes32 internal constant GUARD_STORAGE_SLOT = 0x4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8;\\n\\n    /**\\n     * @dev Set a guard that checks transactions before execution\\n     *      This can only be done via a Safe transaction.\\n     *      \\u26a0\\ufe0f IMPORTANT: Since a guard has full power to block Safe transaction execution,\\n     *        a broken guard can cause a denial of service for the Safe. Make sure to carefully\\n     *        audit the guard code and design recovery mechanisms.\\n     * @notice Set Transaction Guard `guard` for the Safe. Make sure you trust the guard.\\n     * @param guard The address of the guard to be used or the 0 address to disable the guard\\n     */\\n    function setGuard(address guard) external authorized {\\n        if (guard != address(0)) {\\n            require(Guard(guard).supportsInterface(type(Guard).interfaceId), \\\"GS300\\\");\\n        }\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, guard)\\n        }\\n        emit ChangedGuard(guard);\\n    }\\n\\n    /**\\n     * @dev Internal method to retrieve the current guard\\n     *      We do not have a public method because we're short on bytecode size limit,\\n     *      to retrieve the guard address, one can use `getStorageAt` from `StorageAccessible` contract\\n     *      with the slot `GUARD_STORAGE_SLOT`\\n     * @return guard The address of the guard\\n     */\\n    function getGuard() internal view returns (address guard) {\\n        bytes32 slot = GUARD_STORAGE_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            guard := sload(slot)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/ModuleManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/Enum.sol\\\";\\nimport \\\"../common/SelfAuthorized.sol\\\";\\nimport \\\"./Executor.sol\\\";\\n\\n/**\\n * @title Module Manager - A contract managing Safe modules\\n * @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.\\n           \\u26a0\\ufe0f WARNING: Modules are a security risk since they can execute arbitrary transactions, \\n           so only trusted and audited modules should be added to a Safe. A malicious module can\\n           completely takeover a Safe.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract ModuleManager is SelfAuthorized, Executor {\\n    event EnabledModule(address indexed module);\\n    event DisabledModule(address indexed module);\\n    event ExecutionFromModuleSuccess(address indexed module);\\n    event ExecutionFromModuleFailure(address indexed module);\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    mapping(address => address) internal modules;\\n\\n    /**\\n     * @notice Setup function sets the initial storage of the contract.\\n     *         Optionally executes a delegate call to another contract to setup the modules.\\n     * @param to Optional destination address of call to execute.\\n     * @param data Optional data of call to execute.\\n     */\\n    function setupModules(address to, bytes memory data) internal {\\n        require(modules[SENTINEL_MODULES] == address(0), \\\"GS100\\\");\\n        modules[SENTINEL_MODULES] = SENTINEL_MODULES;\\n        if (to != address(0)) {\\n            require(isContract(to), \\\"GS002\\\");\\n            // Setup has to complete successfully or transaction fails.\\n            require(execute(to, 0, data, Enum.Operation.DelegateCall, type(uint256).max), \\\"GS000\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Enables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param module Module to be whitelisted.\\n     */\\n    function enableModule(address module) public authorized {\\n        // Module address cannot be null or sentinel.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        // Module cannot be added twice.\\n        require(modules[module] == address(0), \\\"GS102\\\");\\n        modules[module] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = module;\\n        emit EnabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Disables the module `module` for the Safe.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevModule Previous module in the modules linked list.\\n     * @param module Module to be removed.\\n     */\\n    function disableModule(address prevModule, address module) public authorized {\\n        // Validate module address and check that it corresponds to module index.\\n        require(module != address(0) && module != SENTINEL_MODULES, \\\"GS101\\\");\\n        require(modules[prevModule] == module, \\\"GS103\\\");\\n        modules[prevModule] = modules[module];\\n        modules[module] = address(0);\\n        emit DisabledModule(module);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token)\\n     * @dev Function is virtual to allow overriding for L2 singleton to emit an event for indexing.\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     */\\n    function execTransactionFromModule(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public virtual returns (bool success) {\\n        // Only whitelisted modules are allowed.\\n        require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), \\\"GS104\\\");\\n        // Execute transaction without further confirmations.\\n        success = execute(to, value, data, operation, type(uint256).max);\\n        if (success) emit ExecutionFromModuleSuccess(msg.sender);\\n        else emit ExecutionFromModuleFailure(msg.sender);\\n    }\\n\\n    /**\\n     * @notice Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\\n     * @param to Destination address of module transaction.\\n     * @param value Ether value of module transaction.\\n     * @param data Data payload of module transaction.\\n     * @param operation Operation type of module transaction.\\n     * @return success Boolean flag indicating if the call succeeded.\\n     * @return returnData Data returned by the call.\\n     */\\n    function execTransactionFromModuleReturnData(\\n        address to,\\n        uint256 value,\\n        bytes memory data,\\n        Enum.Operation operation\\n    ) public returns (bool success, bytes memory returnData) {\\n        success = execTransactionFromModule(to, value, data, operation);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // Load free memory location\\n            let ptr := mload(0x40)\\n            // We allocate memory for the return data by setting the free memory location to\\n            // current free memory location + data size + 32 bytes for data size value\\n            mstore(0x40, add(ptr, add(returndatasize(), 0x20)))\\n            // Store the size\\n            mstore(ptr, returndatasize())\\n            // Store the data\\n            returndatacopy(add(ptr, 0x20), 0, returndatasize())\\n            // Point the return data to the correct memory location\\n            returnData := ptr\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns if an module is enabled\\n     * @return True if the module is enabled\\n     */\\n    function isModuleEnabled(address module) public view returns (bool) {\\n        return SENTINEL_MODULES != module && modules[module] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns an array of modules.\\n     *         If all entries fit into a single page, the next pointer will be 0x1.\\n     *         If another page is present, next will be the last element of the returned array.\\n     * @param start Start of the page. Has to be a module or start pointer (0x1 address)\\n     * @param pageSize Maximum number of modules that should be returned. Has to be > 0\\n     * @return array Array of modules.\\n     * @return next Start of the next page.\\n     */\\n    function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) {\\n        require(start == SENTINEL_MODULES || isModuleEnabled(start), \\\"GS105\\\");\\n        require(pageSize > 0, \\\"GS106\\\");\\n        // Init array with max page size\\n        array = new address[](pageSize);\\n\\n        // Populate return array\\n        uint256 moduleCount = 0;\\n        next = modules[start];\\n        while (next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize) {\\n            array[moduleCount] = next;\\n            next = modules[next];\\n            moduleCount++;\\n        }\\n\\n        /**\\n          Because of the argument validation, we can assume that the loop will always iterate over the valid module list values\\n          and the `next` variable will either be an enabled module or a sentinel address (signalling the end). \\n          \\n          If we haven't reached the end inside the loop, we need to set the next pointer to the last element of the modules array\\n          because the `next` variable (which is a module by itself) acting as a pointer to the start of the next page is neither \\n          included to the current page, nor will it be included in the next one if you pass it as a start.\\n        */\\n        if (next != SENTINEL_MODULES) {\\n            next = array[moduleCount - 1];\\n        }\\n        // Set correct size of returned array\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            mstore(array, moduleCount)\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n}\\n\",\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\"},\"contracts/base/OwnerManager.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"../common/SelfAuthorized.sol\\\";\\n\\n/**\\n * @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.\\n * @dev Uses a linked list to store the owners because the code generate by the solidity compiler\\n *      is more efficient than using a dynamic array.\\n * @author Stefan George - @Georgi87\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract OwnerManager is SelfAuthorized {\\n    event AddedOwner(address indexed owner);\\n    event RemovedOwner(address indexed owner);\\n    event ChangedThreshold(uint256 threshold);\\n\\n    address internal constant SENTINEL_OWNERS = address(0x1);\\n\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    /**\\n     * @notice Sets the initial storage of the contract.\\n     * @param _owners List of Safe owners.\\n     * @param _threshold Number of required confirmations for a Safe transaction.\\n     */\\n    function setupOwners(address[] memory _owners, uint256 _threshold) internal {\\n        // Threshold can only be 0 at initialization.\\n        // Check ensures that setup function can only be called once.\\n        require(threshold == 0, \\\"GS200\\\");\\n        // Validate that threshold is smaller than number of added owners.\\n        require(_threshold <= _owners.length, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        // Initializing Safe owners.\\n        address currentOwner = SENTINEL_OWNERS;\\n        for (uint256 i = 0; i < _owners.length; i++) {\\n            // Owner address cannot be null.\\n            address owner = _owners[i];\\n            require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this) && currentOwner != owner, \\\"GS203\\\");\\n            // No duplicate owners allowed.\\n            require(owners[owner] == address(0), \\\"GS204\\\");\\n            owners[currentOwner] = owner;\\n            currentOwner = owner;\\n        }\\n        owners[currentOwner] = SENTINEL_OWNERS;\\n        ownerCount = _owners.length;\\n        threshold = _threshold;\\n    }\\n\\n    /**\\n     * @notice Adds the owner `owner` to the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param owner New owner address.\\n     * @param _threshold New threshold.\\n     */\\n    function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS && owner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[owner] == address(0), \\\"GS204\\\");\\n        owners[owner] = owners[SENTINEL_OWNERS];\\n        owners[SENTINEL_OWNERS] = owner;\\n        ownerCount++;\\n        emit AddedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Removes the owner `owner` from the Safe and updates the threshold to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be removed in the linked list\\n     * @param owner Owner address to be removed.\\n     * @param _threshold New threshold.\\n     */\\n    function removeOwner(address prevOwner, address owner, uint256 _threshold) public authorized {\\n        // Only allow to remove an owner, if threshold can still be reached.\\n        require(ownerCount - 1 >= _threshold, \\\"GS201\\\");\\n        // Validate owner address and check that it corresponds to owner index.\\n        require(owner != address(0) && owner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == owner, \\\"GS205\\\");\\n        owners[prevOwner] = owners[owner];\\n        owners[owner] = address(0);\\n        ownerCount--;\\n        emit RemovedOwner(owner);\\n        // Change threshold if threshold was changed.\\n        if (threshold != _threshold) changeThreshold(_threshold);\\n    }\\n\\n    /**\\n     * @notice Replaces the owner `oldOwner` in the Safe with `newOwner`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param prevOwner Owner that pointed to the owner to be replaced in the linked list\\n     * @param oldOwner Owner address to be replaced.\\n     * @param newOwner New owner address.\\n     */\\n    function swapOwner(address prevOwner, address oldOwner, address newOwner) public authorized {\\n        // Owner address cannot be null, the sentinel or the Safe itself.\\n        require(newOwner != address(0) && newOwner != SENTINEL_OWNERS && newOwner != address(this), \\\"GS203\\\");\\n        // No duplicate owners allowed.\\n        require(owners[newOwner] == address(0), \\\"GS204\\\");\\n        // Validate oldOwner address and check that it corresponds to owner index.\\n        require(oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, \\\"GS203\\\");\\n        require(owners[prevOwner] == oldOwner, \\\"GS205\\\");\\n        owners[newOwner] = owners[oldOwner];\\n        owners[prevOwner] = newOwner;\\n        owners[oldOwner] = address(0);\\n        emit RemovedOwner(oldOwner);\\n        emit AddedOwner(newOwner);\\n    }\\n\\n    /**\\n     * @notice Changes the threshold of the Safe to `_threshold`.\\n     * @dev This can only be done via a Safe transaction.\\n     * @param _threshold New threshold.\\n     */\\n    function changeThreshold(uint256 _threshold) public authorized {\\n        // Validate that threshold is smaller than number of owners.\\n        require(_threshold <= ownerCount, \\\"GS201\\\");\\n        // There has to be at least one Safe owner.\\n        require(_threshold >= 1, \\\"GS202\\\");\\n        threshold = _threshold;\\n        emit ChangedThreshold(threshold);\\n    }\\n\\n    /**\\n     * @notice Returns the number of required confirmations for a Safe transaction aka the threshold.\\n     * @return Threshold number.\\n     */\\n    function getThreshold() public view returns (uint256) {\\n        return threshold;\\n    }\\n\\n    /**\\n     * @notice Returns if `owner` is an owner of the Safe.\\n     * @return Boolean if owner is an owner of the Safe.\\n     */\\n    function isOwner(address owner) public view returns (bool) {\\n        return owner != SENTINEL_OWNERS && owners[owner] != address(0);\\n    }\\n\\n    /**\\n     * @notice Returns a list of Safe owners.\\n     * @return Array of Safe owners.\\n     */\\n    function getOwners() public view returns (address[] memory) {\\n        address[] memory array = new address[](ownerCount);\\n\\n        // populate return array\\n        uint256 index = 0;\\n        address currentOwner = owners[SENTINEL_OWNERS];\\n        while (currentOwner != SENTINEL_OWNERS) {\\n            array[index] = currentOwner;\\n            currentOwner = owners[currentOwner];\\n            index++;\\n        }\\n        return array;\\n    }\\n}\\n\",\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Enum.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Enum - Collection of enums used in Safe contracts.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Enum {\\n    enum Operation {\\n        Call,\\n        DelegateCall\\n    }\\n}\\n\",\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/NativeCurrencyPaymentFallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract NativeCurrencyPaymentFallback {\\n    event SafeReceived(address indexed sender, uint256 value);\\n\\n    /**\\n     * @notice Receive function accepts native currency transactions.\\n     * @dev Emits an event with sender and received value.\\n     */\\n    receive() external payable {\\n        emit SafeReceived(msg.sender, msg.value);\\n    }\\n}\\n\",\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SecuredTokenTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SecuredTokenTransfer - Secure token transfer.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SecuredTokenTransfer {\\n    /**\\n     * @notice Transfers a token and returns a boolean if it was a success\\n     * @dev It checks the return data of the transfer call and returns true if the transfer was successful.\\n     *      It doesn't check if the `token` address is a contract or not.\\n     * @param token Token that should be transferred\\n     * @param receiver Receiver to whom the token should be transferred\\n     * @param amount The amount of tokens that should be transferred\\n     * @return transferred Returns true if the transfer was successful\\n     */\\n    function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {\\n        // 0xa9059cbb - keccack(\\\"transfer(address,uint256)\\\")\\n        bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            // We write the return value to scratch space.\\n            // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory\\n            let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n            switch returndatasize()\\n            case 0 {\\n                transferred := success\\n            }\\n            case 0x20 {\\n                transferred := iszero(or(iszero(success), iszero(mload(0))))\\n            }\\n            default {\\n                transferred := 0\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SelfAuthorized.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SelfAuthorized - Authorizes current contract to perform actions to itself.\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SelfAuthorized {\\n    function requireSelfCall() private view {\\n        require(msg.sender == address(this), \\\"GS031\\\");\\n    }\\n\\n    modifier authorized() {\\n        // Modifiers are copied around during compilation. This is a function call as it minimized the bytecode size\\n        requireSelfCall();\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/SignatureDecoder.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SignatureDecoder - Decodes signatures encoded as bytes\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract SignatureDecoder {\\n    /**\\n     * @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.\\n     * @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures\\n     *      The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}\\n     *      Compact means uint8 is not padded to 32 bytes.\\n     * @param pos Which signature to read.\\n     *            A prior bounds check of this parameter should be performed, to avoid out of bounds access.\\n     * @param signatures Concatenated {r, s, v} signatures.\\n     * @return v Recovery ID or Safe signature type.\\n     * @return r Output value r of the signature.\\n     * @return s Output value s of the signature.\\n     */\\n    function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let signaturePos := mul(0x41, pos)\\n            r := mload(add(signatures, add(signaturePos, 0x20)))\\n            s := mload(add(signatures, add(signaturePos, 0x40)))\\n            /**\\n             * Here we are loading the last 32 bytes, including 31 bytes\\n             * of 's'. There is no 'mload8' to do this.\\n             * 'byte' is not working due to the Solidity parser, so lets\\n             * use the second best option, 'and'\\n             */\\n            v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/Singleton.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Singleton - Base for singleton contracts (should always be the first super contract)\\n *        This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract Singleton {\\n    // singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.\\n    // It should also always be ensured the address is stored alone (uses a full word)\\n    address private singleton;\\n}\\n\",\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\"},\"contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title StorageAccessible - A generic base contract that allows callers to access all internal storage.\\n * @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\n *         It removes a method from the original contract not needed for the Safe contracts.\\n * @author Gnosis Developers\\n */\\nabstract contract StorageAccessible {\\n    /**\\n     * @notice Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegatecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\"},\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by `interfaceId`.\\n     * See the corresponding EIP section\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ISignatureValidator.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract ISignatureValidatorConstants {\\n    // bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\")\\n    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;\\n}\\n\\nabstract contract ISignatureValidator is ISignatureValidatorConstants {\\n    /**\\n     * @notice Legacy EIP1271 method to validate a signature.\\n     * @param _data Arbitrary length data signed on the behalf of address(this).\\n     * @param _signature Signature byte array associated with _data.\\n     *\\n     * MUST return the bytes4 magic value 0x20c13b0b when function passes.\\n     * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n     * MUST allow external calls\\n     */\\n    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);\\n}\\n\",\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"},\"contracts/libraries/SignMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./SafeStorage.sol\\\";\\nimport \\\"../Safe.sol\\\";\\n\\n/**\\n * @title SignMessageLib - Allows to sign messages on-chain by writing the signed message hashes on-chain.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SignMessageLib is SafeStorage {\\n    // keccak256(\\\"SafeMessage(bytes message)\\\");\\n    bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;\\n\\n    event SignMsg(bytes32 indexed msgHash);\\n\\n    /**\\n     * @notice Marks a message (`_data`) as signed.\\n     * @dev Can be verified using EIP-1271 validation method by passing the pre-image of the message hash and empty bytes as the signature.\\n     * @param _data Arbitrary length data that should be marked as signed on the behalf of address(this).\\n     */\\n    function signMessage(bytes calldata _data) external {\\n        bytes32 msgHash = getMessageHash(_data);\\n        signedMessages[msgHash] = 1;\\n        emit SignMsg(msgHash);\\n    }\\n\\n    /**\\n     * @dev Returns hash of a message that can be signed by owners.\\n     * @param message Message that should be hashed.\\n     * @return Message hash.\\n     */\\n    function getMessageHash(bytes memory message) public view returns (bytes32) {\\n        bytes32 safeMessageHash = keccak256(abi.encode(SAFE_MSG_TYPEHASH, keccak256(message)));\\n        return keccak256(abi.encodePacked(bytes1(0x19), bytes1(0x01), Safe(payable(address(this))).domainSeparator(), safeMessageHash));\\n    }\\n}\\n\",\"keccak256\":\"0x012c0c71e1bd8a1f82c0668151d5ff9dae07ab37098cd4eafd2e5099764891c3\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":5330,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":5334,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":5338,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":5340,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":5342,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":5344,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":5346,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":5350,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":5356,"contract":"contracts/libraries/SignMessageLib.sol:SignMessageLib","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"signMessage(bytes)":{"notice":"Marks a message (`_data`) as signed."}},"version":1}}},"contracts/proxies/IProxyCreationCallback.sol":{"IProxyCreationCallback":{"abi":[{"inputs":[{"internalType":"contract SafeProxy","name":"proxy","type":"address"},{"internalType":"address","name":"_singleton","type":"address"},{"internalType":"bytes","name":"initializer","type":"bytes"},{"internalType":"uint256","name":"saltNonce","type":"uint256"}],"name":"proxyCreated","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"An interface for a contract that implements a callback function to be executed after the creation of a proxy instance.","kind":"dev","methods":{"proxyCreated(address,address,bytes,uint256)":{"details":"Function to be called after the creation of a SafeProxy instance.","params":{"_singleton":"The address of the singleton contract used to create the proxy.","initializer":"The initializer function call data.","proxy":"The newly created SafeProxy instance.","saltNonce":"The nonce used to generate the salt for the proxy deployment."}}},"title":"IProxyCreationCallback","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"proxyCreated(address,address,bytes,uint256)":"1e52b518"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract SafeProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"saltNonce\",\"type\":\"uint256\"}],\"name\":\"proxyCreated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"An interface for a contract that implements a callback function to be executed after the creation of a proxy instance.\",\"kind\":\"dev\",\"methods\":{\"proxyCreated(address,address,bytes,uint256)\":{\"details\":\"Function to be called after the creation of a SafeProxy instance.\",\"params\":{\"_singleton\":\"The address of the singleton contract used to create the proxy.\",\"initializer\":\"The initializer function call data.\",\"proxy\":\"The newly created SafeProxy instance.\",\"saltNonce\":\"The nonce used to generate the salt for the proxy deployment.\"}}},\"title\":\"IProxyCreationCallback\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/proxies/IProxyCreationCallback.sol\":\"IProxyCreationCallback\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/proxies/IProxyCreationCallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"./SafeProxy.sol\\\";\\n\\n/**\\n * @title IProxyCreationCallback\\n * @dev An interface for a contract that implements a callback function to be executed after the creation of a proxy instance.\\n */\\ninterface IProxyCreationCallback {\\n    /**\\n     * @dev Function to be called after the creation of a SafeProxy instance.\\n     * @param proxy The newly created SafeProxy instance.\\n     * @param _singleton The address of the singleton contract used to create the proxy.\\n     * @param initializer The initializer function call data.\\n     * @param saltNonce The nonce used to generate the salt for the proxy deployment.\\n     */\\n    function proxyCreated(SafeProxy proxy, address _singleton, bytes calldata initializer, uint256 saltNonce) external;\\n}\\n\",\"keccak256\":\"0xf5410c842c1bbff96a2047b31f5437a9dc5183d004ab1fc9f952220f11379602\",\"license\":\"LGPL-3.0-only\"},\"contracts/proxies/SafeProxy.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title IProxy - Helper interface to access the singleton address of the Proxy on-chain.\\n * @author Richard Meissner - @rmeissner\\n */\\ninterface IProxy {\\n    function masterCopy() external view returns (address);\\n}\\n\\n/**\\n * @title SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\\n * @author Stefan George - <stefan@gnosis.io>\\n * @author Richard Meissner - <richard@gnosis.io>\\n */\\ncontract SafeProxy {\\n    // Singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.\\n    // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`\\n    address internal singleton;\\n\\n    /**\\n     * @notice Constructor function sets address of singleton contract.\\n     * @param _singleton Singleton address.\\n     */\\n    constructor(address _singleton) {\\n        require(_singleton != address(0), \\\"Invalid singleton address provided\\\");\\n        singleton = _singleton;\\n    }\\n\\n    /// @dev Fallback function forwards all transactions and returns all received return data.\\n    fallback() external payable {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let _singleton := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\\n            // 0xa619486e == keccak(\\\"masterCopy()\\\"). The value is right padded to 32-bytes with 0s\\n            if eq(calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000) {\\n                mstore(0, _singleton)\\n                return(0, 0x20)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            let success := delegatecall(gas(), _singleton, 0, calldatasize(), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if eq(success, 0) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x5dccbe86285c1d4c4b2fed0ae8007620c3186d22411f43feecfbf8a028e5c7e2\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/proxies/SafeProxy.sol":{"IProxy":{"abi":[{"inputs":[],"name":"masterCopy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Richard Meissner - @rmeissner","kind":"dev","methods":{},"title":"IProxy - Helper interface to access the singleton address of the Proxy on-chain.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"masterCopy()":"a619486e"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"masterCopy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Richard Meissner - @rmeissner\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IProxy - Helper interface to access the singleton address of the Proxy on-chain.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/proxies/SafeProxy.sol\":\"IProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/proxies/SafeProxy.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title IProxy - Helper interface to access the singleton address of the Proxy on-chain.\\n * @author Richard Meissner - @rmeissner\\n */\\ninterface IProxy {\\n    function masterCopy() external view returns (address);\\n}\\n\\n/**\\n * @title SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\\n * @author Stefan George - <stefan@gnosis.io>\\n * @author Richard Meissner - <richard@gnosis.io>\\n */\\ncontract SafeProxy {\\n    // Singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.\\n    // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`\\n    address internal singleton;\\n\\n    /**\\n     * @notice Constructor function sets address of singleton contract.\\n     * @param _singleton Singleton address.\\n     */\\n    constructor(address _singleton) {\\n        require(_singleton != address(0), \\\"Invalid singleton address provided\\\");\\n        singleton = _singleton;\\n    }\\n\\n    /// @dev Fallback function forwards all transactions and returns all received return data.\\n    fallback() external payable {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let _singleton := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\\n            // 0xa619486e == keccak(\\\"masterCopy()\\\"). The value is right padded to 32-bytes with 0s\\n            if eq(calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000) {\\n                mstore(0, _singleton)\\n                return(0, 0x20)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            let success := delegatecall(gas(), _singleton, 0, calldatasize(), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if eq(success, 0) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x5dccbe86285c1d4c4b2fed0ae8007620c3186d22411f43feecfbf8a028e5c7e2\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"SafeProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_singleton","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"}],"devdoc":{"author":"Stefan George - <stefan@gnosis.io>Richard Meissner - <richard@gnosis.io>","kind":"dev","methods":{"constructor":{"params":{"_singleton":"Singleton address."}}},"title":"SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506040516101e63803806101e68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806101c46022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060ab806101196000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea264697066735822122003d1488ee65e08fa41e58e888a9865554c535f2c77126a82cb4c0f917f31441364736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1E6 CODESIZE SUB DUP1 PUSH2 0x1E6 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1C4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP PUSH1 0xAB DUP1 PUSH2 0x119 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH32 0xA619486E00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD EQ ISZERO PUSH1 0x50 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 DUP2 EQ ISZERO PUSH1 0x70 JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SUB 0xD1 0x48 DUP15 0xE6 0x5E ADDMOD STATICCALL COINBASE 0xE5 DUP15 DUP9 DUP11 SWAP9 PUSH6 0x554C535F2C77 SLT PUSH11 0x82CB4C0F917F3144136473 PUSH16 0x6C63430007060033496E76616C696420 PUSH20 0x696E676C65746F6E20616464726573732070726F PUSH23 0x6964656400000000000000000000000000000000000000 ","sourceMap":"520:1508:46:-:0;;;965:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1037:1;1015:24;;:10;:24;;;;1007:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1100:10;1088:9;;:22;;;;;;;;;;;;;;;;;;965:152;520:1508;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea264697066735822122003d1488ee65e08fa41e58e888a9865554c535f2c77126a82cb4c0f917f31441364736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH32 0xA619486E00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD EQ ISZERO PUSH1 0x50 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 DUP2 EQ ISZERO PUSH1 0x70 JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SUB 0xD1 0x48 DUP15 0xE6 0x5E ADDMOD STATICCALL COINBASE 0xE5 DUP15 DUP9 DUP11 SWAP9 PUSH6 0x554C535F2C77 SLT PUSH11 0x82CB4C0F917F3144136473 PUSH16 0x6C634300070600330000000000000000 ","sourceMap":"520:1508:46:-:0;;;1367:42;1363:1;1357:8;1353:57;1545:66;1541:1;1528:15;1525:87;1522:2;;;1641:10;1638:1;1631:21;1679:4;1676:1;1669:15;1522:2;1730:14;1727:1;1724;1711:34;1827:1;1824;1808:14;1805:1;1793:10;1786:5;1773:56;1863:16;1860:1;1857;1842:38;1908:1;1899:7;1896:14;1893:2;;;1939:16;1936:1;1929:27;1893:2;1993:16;1990:1;1983:27"},"gasEstimates":{"creation":{"codeDepositCost":"34200","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"author\":\"Stefan George - <stefan@gnosis.io>Richard Meissner - <richard@gnosis.io>\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_singleton\":\"Singleton address.\"}}},\"title\":\"SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor function sets address of singleton contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/proxies/SafeProxy.sol\":\"SafeProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/proxies/SafeProxy.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title IProxy - Helper interface to access the singleton address of the Proxy on-chain.\\n * @author Richard Meissner - @rmeissner\\n */\\ninterface IProxy {\\n    function masterCopy() external view returns (address);\\n}\\n\\n/**\\n * @title SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\\n * @author Stefan George - <stefan@gnosis.io>\\n * @author Richard Meissner - <richard@gnosis.io>\\n */\\ncontract SafeProxy {\\n    // Singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.\\n    // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`\\n    address internal singleton;\\n\\n    /**\\n     * @notice Constructor function sets address of singleton contract.\\n     * @param _singleton Singleton address.\\n     */\\n    constructor(address _singleton) {\\n        require(_singleton != address(0), \\\"Invalid singleton address provided\\\");\\n        singleton = _singleton;\\n    }\\n\\n    /// @dev Fallback function forwards all transactions and returns all received return data.\\n    fallback() external payable {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let _singleton := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\\n            // 0xa619486e == keccak(\\\"masterCopy()\\\"). The value is right padded to 32-bytes with 0s\\n            if eq(calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000) {\\n                mstore(0, _singleton)\\n                return(0, 0x20)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            let success := delegatecall(gas(), _singleton, 0, calldatasize(), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if eq(success, 0) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x5dccbe86285c1d4c4b2fed0ae8007620c3186d22411f43feecfbf8a028e5c7e2\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":6028,"contract":"contracts/proxies/SafeProxy.sol:SafeProxy","label":"singleton","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Constructor function sets address of singleton contract."}},"version":1}}},"contracts/proxies/SafeProxyFactory.sol":{"SafeProxyFactory":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract SafeProxy","name":"proxy","type":"address"},{"indexed":false,"internalType":"address","name":"singleton","type":"address"}],"name":"ProxyCreation","type":"event"},{"inputs":[{"internalType":"address","name":"_singleton","type":"address"},{"internalType":"bytes","name":"initializer","type":"bytes"},{"internalType":"uint256","name":"saltNonce","type":"uint256"}],"name":"createChainSpecificProxyWithNonce","outputs":[{"internalType":"contract SafeProxy","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_singleton","type":"address"},{"internalType":"bytes","name":"initializer","type":"bytes"},{"internalType":"uint256","name":"saltNonce","type":"uint256"},{"internalType":"contract IProxyCreationCallback","name":"callback","type":"address"}],"name":"createProxyWithCallback","outputs":[{"internalType":"contract SafeProxy","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_singleton","type":"address"},{"internalType":"bytes","name":"initializer","type":"bytes"},{"internalType":"uint256","name":"saltNonce","type":"uint256"}],"name":"createProxyWithNonce","outputs":[{"internalType":"contract SafeProxy","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyCreationCode","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"}],"devdoc":{"author":"Stefan George - @Georgi87","kind":"dev","methods":{"createChainSpecificProxyWithNonce(address,bytes,uint256)":{"details":"Allows to create a new proxy contract that should exist only on 1 network (e.g. specific governance or admin accounts)      by including the chain id in the create2 salt. Such proxies cannot be created on other networks by replaying the transaction.","params":{"_singleton":"Address of singleton contract. Must be deployed at the time of execution.","initializer":"Payload for a message call to be sent to a new proxy contract.","saltNonce":"Nonce that will be used to generate the salt to calculate the address of the new proxy contract."}},"createProxyWithCallback(address,bytes,uint256,address)":{"params":{"_singleton":"Address of singleton contract. Must be deployed at the time of execution.","callback":"Callback that will be invoked after the new proxy contract has been successfully deployed and initialized.","initializer":"Payload for a message call to be sent to a new proxy contract.","saltNonce":"Nonce that will be used to generate the salt to calculate the address of the new proxy contract."}},"createProxyWithNonce(address,bytes,uint256)":{"params":{"_singleton":"Address of singleton contract. Must be deployed at the time of execution.","initializer":"Payload for a message call to be sent to a new proxy contract.","saltNonce":"Nonce that will be used to generate the salt to calculate the address of the new proxy contract."}},"getChainId()":{"returns":{"_0":"The ID of the current chain as a uint256."}},"proxyCreationCode()":{"details":"Allows to retrieve the creation code used for the Proxy deployment. With this it is easily possible to calculate predicted address."}},"title":"Proxy Factory - Allows to create a new proxy contract and execute a message call to the new proxy within one transaction.","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610bee806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80631688f0b91461005c5780633408e4701461016b57806353e5d93514610189578063d18af54d1461020c578063ec9e80bb1461033b575b600080fd5b61013f6004803603606081101561007257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100af57600080fd5b8201836020820111156100c157600080fd5b803590602001918460018302840111640100000000831117156100e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061044a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101736104fe565b6040518082815260200191505060405180910390f35b61019161050b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d15780820151818401526020810190506101b6565b50505050905090810190601f1680156101fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61030f6004803603608081101561022257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561025f57600080fd5b82018360208201111561027157600080fd5b8035906020019184600183028401116401000000008311171561029357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610536565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61041e6004803603606081101561035157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561038e57600080fd5b8201836020820111156103a057600080fd5b803590602001918460018302840111640100000000831117156103c257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506106e5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008083805190602001208360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506104908585836107a8565b91508173ffffffffffffffffffffffffffffffffffffffff167f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e23586604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2509392505050565b6000804690508091505090565b60606040518060200161051d906109c5565b6020820181038252601f19601f82011660405250905090565b6000808383604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060001c905061059186868361044a565b9150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146106dc578273ffffffffffffffffffffffffffffffffffffffff16631e52b518838888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610674578082015181840152602081019050610659565b50505050905090810190601f1680156106a15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050505b50949350505050565b6000808380519060200120836106f96104fe565b60405160200180848152602001838152602001828152602001935050505060405160208183030381529060405280519060200120905061073a8585836107a8565b91508173ffffffffffffffffffffffffffffffffffffffff167f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e23586604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2509392505050565b60006107b3846109b2565b610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53696e676c65746f6e20636f6e7472616374206e6f74206465706c6f7965640081525060200191505060405180910390fd5b600060405180602001610837906109c5565b6020820181038252601f19601f820116604052508573ffffffffffffffffffffffffffffffffffffffff166040516020018083805190602001908083835b602083106108985780518252602082019150602081019050602083039250610875565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001925050506040516020818303038152906040529050828151826020016000f59150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f437265617465322063616c6c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b6000845111156109aa5760008060008651602088016000875af114156109a957600080fd5b5b509392505050565b600080823b905060008111915050919050565b6101e6806109d38339019056fe608060405234801561001057600080fd5b506040516101e63803806101e68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806101c46022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060ab806101196000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea264697066735822122003d1488ee65e08fa41e58e888a9865554c535f2c77126a82cb4c0f917f31441364736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564a26469706673582212200fd975ca8e62d9bf08aa3d09c74b9bdc9d7acba7621835be4187989ddd0e54b164736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBEE 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 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1688F0B9 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x53E5D935 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0xD18AF54D EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0xEC9E80BB EQ PUSH2 0x33B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x44A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x4FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x191 PUSH2 0x50B JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x1D1 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1B6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1FE 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 0x30F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x25F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x536 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x41E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x6E5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP 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 0x490 DUP6 DUP6 DUP4 PUSH2 0x7A8 JUMP JUMPDEST SWAP2 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4F51FAF6C4561FF95F067657E43439F0F856D97C04D9EC9070A6199AD418E235 DUP7 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CHAINID SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x51D SWAP1 PUSH2 0x9C5 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x0 SHR SWAP1 POP PUSH2 0x591 DUP7 DUP7 DUP4 PUSH2 0x44A JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6DC JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1E52B518 DUP4 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 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 0x674 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x659 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6A1 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 SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH2 0x6F9 PUSH2 0x4FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP 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 0x73A DUP6 DUP6 DUP4 PUSH2 0x7A8 JUMP JUMPDEST SWAP2 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4F51FAF6C4561FF95F067657E43439F0F856D97C04D9EC9070A6199AD418E235 DUP7 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7B3 DUP5 PUSH2 0x9B2 JUMP JUMPDEST PUSH2 0x825 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x53696E676C65746F6E20636F6E7472616374206E6F74206465706C6F79656400 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x837 SWAP1 PUSH2 0x9C5 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x898 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x875 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP DUP3 DUP2 MLOAD DUP3 PUSH1 0x20 ADD PUSH1 0x0 CREATE2 SWAP2 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x984 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x437265617465322063616C6C206661696C656400000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 MLOAD GT ISZERO PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 MLOAD PUSH1 0x20 DUP9 ADD PUSH1 0x0 DUP8 GAS CALL EQ ISZERO PUSH2 0x9A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1E6 DUP1 PUSH2 0x9D3 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1E6 CODESIZE SUB DUP1 PUSH2 0x1E6 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1C4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP PUSH1 0xAB DUP1 PUSH2 0x119 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH32 0xA619486E00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD EQ ISZERO PUSH1 0x50 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 DUP2 EQ ISZERO PUSH1 0x70 JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SUB 0xD1 0x48 DUP15 0xE6 0x5E ADDMOD STATICCALL COINBASE 0xE5 DUP15 DUP9 DUP11 SWAP9 PUSH6 0x554C535F2C77 SLT PUSH11 0x82CB4C0F917F3144136473 PUSH16 0x6C63430007060033496E76616C696420 PUSH20 0x696E676C65746F6E20616464726573732070726F PUSH23 0x69646564A26469706673582212200FD975CA8E62D9BF08 0xAA RETURNDATASIZE MULMOD 0xC7 0x4B SWAP12 0xDC SWAP14 PUSH27 0xCBA7621835BE4187989DDD0E54B164736F6C634300070600330000 ","sourceMap":"318:6095:47:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100575760003560e01c80631688f0b91461005c5780633408e4701461016b57806353e5d93514610189578063d18af54d1461020c578063ec9e80bb1461033b575b600080fd5b61013f6004803603606081101561007257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100af57600080fd5b8201836020820111156100c157600080fd5b803590602001918460018302840111640100000000831117156100e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061044a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101736104fe565b6040518082815260200191505060405180910390f35b61019161050b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d15780820151818401526020810190506101b6565b50505050905090810190601f1680156101fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61030f6004803603608081101561022257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561025f57600080fd5b82018360208201111561027157600080fd5b8035906020019184600183028401116401000000008311171561029357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610536565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61041e6004803603606081101561035157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561038e57600080fd5b8201836020820111156103a057600080fd5b803590602001918460018302840111640100000000831117156103c257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506106e5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008083805190602001208360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506104908585836107a8565b91508173ffffffffffffffffffffffffffffffffffffffff167f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e23586604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2509392505050565b6000804690508091505090565b60606040518060200161051d906109c5565b6020820181038252601f19601f82011660405250905090565b6000808383604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060001c905061059186868361044a565b9150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146106dc578273ffffffffffffffffffffffffffffffffffffffff16631e52b518838888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610674578082015181840152602081019050610659565b50505050905090810190601f1680156106a15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050505b50949350505050565b6000808380519060200120836106f96104fe565b60405160200180848152602001838152602001828152602001935050505060405160208183030381529060405280519060200120905061073a8585836107a8565b91508173ffffffffffffffffffffffffffffffffffffffff167f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e23586604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2509392505050565b60006107b3846109b2565b610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53696e676c65746f6e20636f6e7472616374206e6f74206465706c6f7965640081525060200191505060405180910390fd5b600060405180602001610837906109c5565b6020820181038252601f19601f820116604052508573ffffffffffffffffffffffffffffffffffffffff166040516020018083805190602001908083835b602083106108985780518252602082019150602081019050602083039250610875565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001925050506040516020818303038152906040529050828151826020016000f59150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f437265617465322063616c6c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b6000845111156109aa5760008060008651602088016000875af114156109a957600080fd5b5b509392505050565b600080823b905060008111915050919050565b6101e6806109d38339019056fe608060405234801561001057600080fd5b506040516101e63803806101e68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806101c46022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060ab806101196000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea264697066735822122003d1488ee65e08fa41e58e888a9865554c535f2c77126a82cb4c0f917f31441364736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564a26469706673582212200fd975ca8e62d9bf08aa3d09c74b9bdc9d7acba7621835be4187989ddd0e54b164736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1688F0B9 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x53E5D935 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0xD18AF54D EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0xEC9E80BB EQ PUSH2 0x33B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x44A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x4FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x191 PUSH2 0x50B JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x1D1 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1B6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1FE 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 0x30F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x25F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x536 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x41E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x6E5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP 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 0x490 DUP6 DUP6 DUP4 PUSH2 0x7A8 JUMP JUMPDEST SWAP2 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4F51FAF6C4561FF95F067657E43439F0F856D97C04D9EC9070A6199AD418E235 DUP7 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CHAINID SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x51D SWAP1 PUSH2 0x9C5 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x0 SHR SWAP1 POP PUSH2 0x591 DUP7 DUP7 DUP4 PUSH2 0x44A JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6DC JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1E52B518 DUP4 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 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 0x674 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x659 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6A1 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 SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH2 0x6F9 PUSH2 0x4FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP 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 0x73A DUP6 DUP6 DUP4 PUSH2 0x7A8 JUMP JUMPDEST SWAP2 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x4F51FAF6C4561FF95F067657E43439F0F856D97C04D9EC9070A6199AD418E235 DUP7 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7B3 DUP5 PUSH2 0x9B2 JUMP JUMPDEST PUSH2 0x825 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x53696E676C65746F6E20636F6E7472616374206E6F74206465706C6F79656400 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x837 SWAP1 PUSH2 0x9C5 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x898 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x875 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP DUP3 DUP2 MLOAD DUP3 PUSH1 0x20 ADD PUSH1 0x0 CREATE2 SWAP2 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x984 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x437265617465322063616C6C206661696C656400000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 MLOAD GT ISZERO PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 MLOAD PUSH1 0x20 DUP9 ADD PUSH1 0x0 DUP8 GAS CALL EQ ISZERO PUSH2 0x9A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1E6 DUP1 PUSH2 0x9D3 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1E6 CODESIZE SUB DUP1 PUSH2 0x1E6 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1C4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP PUSH1 0xAB DUP1 PUSH2 0x119 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH32 0xA619486E00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD EQ ISZERO PUSH1 0x50 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 RETURN JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 DUP2 EQ ISZERO PUSH1 0x70 JUMPI RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE PUSH1 0x0 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SUB 0xD1 0x48 DUP15 0xE6 0x5E ADDMOD STATICCALL COINBASE 0xE5 DUP15 DUP9 DUP11 SWAP9 PUSH6 0x554C535F2C77 SLT PUSH11 0x82CB4C0F917F3144136473 PUSH16 0x6C63430007060033496E76616C696420 PUSH20 0x696E676C65746F6E20616464726573732070726F PUSH23 0x69646564A26469706673582212200FD975CA8E62D9BF08 0xAA RETURNDATASIZE MULMOD 0xC7 0x4B SWAP12 0xDC SWAP14 PUSH27 0xCBA7621835BE4187989DDD0E54B164736F6C634300070600330000 ","sourceMap":"318:6095:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2515:471;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6200:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;565:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4936:505;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3742:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2515:471;2626:15;2795:12;2847:11;2837:22;;;;;;2861:9;2820:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:62;;;;;;2795:77;;2890:42;2902:10;2914:11;2927:4;2890:11;:42::i;:::-;2882:50;;2961:5;2947:32;;;2968:10;2947:32;;;;;;;;;;;;;;;;;;;;2515:471;;;;;;:::o;6200:211::-;6243:7;6262:10;6367:9;6361:15;;6402:2;6395:9;;;6200:211;:::o;565:116::-;615:12;646:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;639:35;;565:116;:::o;4936:505::-;5121:15;5148:29;5215:9;5226:8;5198:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5188:48;;;;;;5180:57;;5148:89;;5255:68;5276:10;5288:11;5301:21;5255:20;:68::i;:::-;5247:76;;5366:1;5337:31;;5345:8;5337:31;;;5333:101;;5370:8;:21;;;5392:5;5399:10;5411:11;5424:9;5370:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5333:101;4936:505;;;;;;;:::o;3742:528::-;3896:15;4065:12;4117:11;4107:22;;;;;;4131:9;4142:12;:10;:12::i;:::-;4090:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4080:76;;;;;;4065:91;;4174:42;4186:10;4198:11;4211:4;4174:11;:42::i;:::-;4166:50;;4245:5;4231:32;;;4252:10;4231:32;;;;;;;;;;;;;;;;;;;;3742:528;;;;;;:::o;1185:858::-;1284:15;1319:22;1330:10;1319;:22::i;:::-;1311:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1388:27;1435:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1481:10;1465:28;;1418:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1388:106;;1655:4;1638:14;1632:21;1615:14;1609:4;1605:25;1600:3;1592:68;1583:77;;1713:1;1687:28;;1695:5;1687:28;;;;1679:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1775:1;1754:11;:18;:22;1750:287;;;1958:1;1954;1951;1937:11;1931:18;1924:4;1911:11;1907:22;1904:1;1897:5;1890;1885:71;1882:78;1879:2;;;1993:1;1990;1983:12;1879:2;1861:166;1185:858;;;;;;:::o;5793:246::-;5853:4;5869:12;5990:7;5978:20;5970:28;;6031:1;6024:4;:8;6017:15;;;5793:246;;;:::o;-1:-1:-1:-;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"610800","executionCost":"645","totalCost":"611445"},"external":{"createChainSpecificProxyWithNonce(address,bytes,uint256)":"infinite","createProxyWithCallback(address,bytes,uint256,address)":"infinite","createProxyWithNonce(address,bytes,uint256)":"infinite","getChainId()":"225","proxyCreationCode()":"infinite"},"internal":{"deployProxy(address,bytes memory,bytes32)":"infinite","isContract(address)":"747"}},"methodIdentifiers":{"createChainSpecificProxyWithNonce(address,bytes,uint256)":"ec9e80bb","createProxyWithCallback(address,bytes,uint256,address)":"d18af54d","createProxyWithNonce(address,bytes,uint256)":"1688f0b9","getChainId()":"3408e470","proxyCreationCode()":"53e5d935"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract SafeProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"}],\"name\":\"ProxyCreation\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"saltNonce\",\"type\":\"uint256\"}],\"name\":\"createChainSpecificProxyWithNonce\",\"outputs\":[{\"internalType\":\"contract SafeProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"saltNonce\",\"type\":\"uint256\"},{\"internalType\":\"contract IProxyCreationCallback\",\"name\":\"callback\",\"type\":\"address\"}],\"name\":\"createProxyWithCallback\",\"outputs\":[{\"internalType\":\"contract SafeProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"saltNonce\",\"type\":\"uint256\"}],\"name\":\"createProxyWithNonce\",\"outputs\":[{\"internalType\":\"contract SafeProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Stefan George - @Georgi87\",\"kind\":\"dev\",\"methods\":{\"createChainSpecificProxyWithNonce(address,bytes,uint256)\":{\"details\":\"Allows to create a new proxy contract that should exist only on 1 network (e.g. specific governance or admin accounts)      by including the chain id in the create2 salt. Such proxies cannot be created on other networks by replaying the transaction.\",\"params\":{\"_singleton\":\"Address of singleton contract. Must be deployed at the time of execution.\",\"initializer\":\"Payload for a message call to be sent to a new proxy contract.\",\"saltNonce\":\"Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\"}},\"createProxyWithCallback(address,bytes,uint256,address)\":{\"params\":{\"_singleton\":\"Address of singleton contract. Must be deployed at the time of execution.\",\"callback\":\"Callback that will be invoked after the new proxy contract has been successfully deployed and initialized.\",\"initializer\":\"Payload for a message call to be sent to a new proxy contract.\",\"saltNonce\":\"Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\"}},\"createProxyWithNonce(address,bytes,uint256)\":{\"params\":{\"_singleton\":\"Address of singleton contract. Must be deployed at the time of execution.\",\"initializer\":\"Payload for a message call to be sent to a new proxy contract.\",\"saltNonce\":\"Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\"}},\"getChainId()\":{\"returns\":{\"_0\":\"The ID of the current chain as a uint256.\"}},\"proxyCreationCode()\":{\"details\":\"Allows to retrieve the creation code used for the Proxy deployment. With this it is easily possible to calculate predicted address.\"}},\"title\":\"Proxy Factory - Allows to create a new proxy contract and execute a message call to the new proxy within one transaction.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createChainSpecificProxyWithNonce(address,bytes,uint256)\":{\"notice\":\"Deploys a new chain-specific proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\"},\"createProxyWithCallback(address,bytes,uint256,address)\":{\"notice\":\"Deploy a new proxy with `_singleton` singleton and `saltNonce` salt.         Optionally executes an initializer call to a new proxy and calls a specified callback address `callback`.\"},\"createProxyWithNonce(address,bytes,uint256)\":{\"notice\":\"Deploys a new proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\"},\"getChainId()\":{\"notice\":\"Returns the ID of the chain the contract is currently deployed on.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/proxies/SafeProxyFactory.sol\":\"SafeProxyFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/proxies/IProxyCreationCallback.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\nimport \\\"./SafeProxy.sol\\\";\\n\\n/**\\n * @title IProxyCreationCallback\\n * @dev An interface for a contract that implements a callback function to be executed after the creation of a proxy instance.\\n */\\ninterface IProxyCreationCallback {\\n    /**\\n     * @dev Function to be called after the creation of a SafeProxy instance.\\n     * @param proxy The newly created SafeProxy instance.\\n     * @param _singleton The address of the singleton contract used to create the proxy.\\n     * @param initializer The initializer function call data.\\n     * @param saltNonce The nonce used to generate the salt for the proxy deployment.\\n     */\\n    function proxyCreated(SafeProxy proxy, address _singleton, bytes calldata initializer, uint256 saltNonce) external;\\n}\\n\",\"keccak256\":\"0xf5410c842c1bbff96a2047b31f5437a9dc5183d004ab1fc9f952220f11379602\",\"license\":\"LGPL-3.0-only\"},\"contracts/proxies/SafeProxy.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title IProxy - Helper interface to access the singleton address of the Proxy on-chain.\\n * @author Richard Meissner - @rmeissner\\n */\\ninterface IProxy {\\n    function masterCopy() external view returns (address);\\n}\\n\\n/**\\n * @title SafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.\\n * @author Stefan George - <stefan@gnosis.io>\\n * @author Richard Meissner - <richard@gnosis.io>\\n */\\ncontract SafeProxy {\\n    // Singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.\\n    // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`\\n    address internal singleton;\\n\\n    /**\\n     * @notice Constructor function sets address of singleton contract.\\n     * @param _singleton Singleton address.\\n     */\\n    constructor(address _singleton) {\\n        require(_singleton != address(0), \\\"Invalid singleton address provided\\\");\\n        singleton = _singleton;\\n    }\\n\\n    /// @dev Fallback function forwards all transactions and returns all received return data.\\n    fallback() external payable {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let _singleton := and(sload(0), 0xffffffffffffffffffffffffffffffffffffffff)\\n            // 0xa619486e == keccak(\\\"masterCopy()\\\"). The value is right padded to 32-bytes with 0s\\n            if eq(calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000) {\\n                mstore(0, _singleton)\\n                return(0, 0x20)\\n            }\\n            calldatacopy(0, 0, calldatasize())\\n            let success := delegatecall(gas(), _singleton, 0, calldatasize(), 0, 0)\\n            returndatacopy(0, 0, returndatasize())\\n            if eq(success, 0) {\\n                revert(0, returndatasize())\\n            }\\n            return(0, returndatasize())\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x5dccbe86285c1d4c4b2fed0ae8007620c3186d22411f43feecfbf8a028e5c7e2\",\"license\":\"LGPL-3.0-only\"},\"contracts/proxies/SafeProxyFactory.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"./SafeProxy.sol\\\";\\nimport \\\"./IProxyCreationCallback.sol\\\";\\n\\n/**\\n * @title Proxy Factory - Allows to create a new proxy contract and execute a message call to the new proxy within one transaction.\\n * @author Stefan George - @Georgi87\\n */\\ncontract SafeProxyFactory {\\n    event ProxyCreation(SafeProxy indexed proxy, address singleton);\\n\\n    /// @dev Allows to retrieve the creation code used for the Proxy deployment. With this it is easily possible to calculate predicted address.\\n    function proxyCreationCode() public pure returns (bytes memory) {\\n        return type(SafeProxy).creationCode;\\n    }\\n\\n    /**\\n     * @notice Internal method to create a new proxy contract using CREATE2. Optionally executes an initializer call to a new proxy.\\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\\n     * @param initializer (Optional) Payload for a message call to be sent to a new proxy contract.\\n     * @param salt Create2 salt to use for calculating the address of the new proxy contract.\\n     * @return proxy Address of the new proxy contract.\\n     */\\n    function deployProxy(address _singleton, bytes memory initializer, bytes32 salt) internal returns (SafeProxy proxy) {\\n        require(isContract(_singleton), \\\"Singleton contract not deployed\\\");\\n\\n        bytes memory deploymentData = abi.encodePacked(type(SafeProxy).creationCode, uint256(uint160(_singleton)));\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            proxy := create2(0x0, add(0x20, deploymentData), mload(deploymentData), salt)\\n        }\\n        require(address(proxy) != address(0), \\\"Create2 call failed\\\");\\n\\n        if (initializer.length > 0) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                if eq(call(gas(), proxy, 0, add(initializer, 0x20), mload(initializer), 0, 0), 0) {\\n                    revert(0, 0)\\n                }\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Deploys a new proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\\n     * @param initializer Payload for a message call to be sent to a new proxy contract.\\n     * @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\\n     */\\n    function createProxyWithNonce(address _singleton, bytes memory initializer, uint256 saltNonce) public returns (SafeProxy proxy) {\\n        // If the initializer changes the proxy address should change too. Hashing the initializer data is cheaper than just concatinating it\\n        bytes32 salt = keccak256(abi.encodePacked(keccak256(initializer), saltNonce));\\n        proxy = deployProxy(_singleton, initializer, salt);\\n        emit ProxyCreation(proxy, _singleton);\\n    }\\n\\n    /**\\n     * @notice Deploys a new chain-specific proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy.\\n     * @dev Allows to create a new proxy contract that should exist only on 1 network (e.g. specific governance or admin accounts)\\n     *      by including the chain id in the create2 salt. Such proxies cannot be created on other networks by replaying the transaction.\\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\\n     * @param initializer Payload for a message call to be sent to a new proxy contract.\\n     * @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\\n     */\\n    function createChainSpecificProxyWithNonce(\\n        address _singleton,\\n        bytes memory initializer,\\n        uint256 saltNonce\\n    ) public returns (SafeProxy proxy) {\\n        // If the initializer changes the proxy address should change too. Hashing the initializer data is cheaper than just concatinating it\\n        bytes32 salt = keccak256(abi.encodePacked(keccak256(initializer), saltNonce, getChainId()));\\n        proxy = deployProxy(_singleton, initializer, salt);\\n        emit ProxyCreation(proxy, _singleton);\\n    }\\n\\n    /**\\n     * @notice Deploy a new proxy with `_singleton` singleton and `saltNonce` salt.\\n     *         Optionally executes an initializer call to a new proxy and calls a specified callback address `callback`.\\n     * @param _singleton Address of singleton contract. Must be deployed at the time of execution.\\n     * @param initializer Payload for a message call to be sent to a new proxy contract.\\n     * @param saltNonce Nonce that will be used to generate the salt to calculate the address of the new proxy contract.\\n     * @param callback Callback that will be invoked after the new proxy contract has been successfully deployed and initialized.\\n     */\\n    function createProxyWithCallback(\\n        address _singleton,\\n        bytes memory initializer,\\n        uint256 saltNonce,\\n        IProxyCreationCallback callback\\n    ) public returns (SafeProxy proxy) {\\n        uint256 saltNonceWithCallback = uint256(keccak256(abi.encodePacked(saltNonce, callback)));\\n        proxy = createProxyWithNonce(_singleton, initializer, saltNonceWithCallback);\\n        if (address(callback) != address(0)) callback.proxyCreated(proxy, _singleton, initializer, saltNonce);\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     * @return True if `account` is a contract\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @notice Returns the ID of the chain the contract is currently deployed on.\\n     * @return The ID of the current chain as a uint256.\\n     */\\n    function getChainId() public view returns (uint256) {\\n        uint256 id;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            id := chainid()\\n        }\\n        return id;\\n    }\\n}\\n\",\"keccak256\":\"0xdc68ce6d07d02723fcdde9f115c976d78bc599667b4f9d08e6cda50f51949533\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"createChainSpecificProxyWithNonce(address,bytes,uint256)":{"notice":"Deploys a new chain-specific proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy."},"createProxyWithCallback(address,bytes,uint256,address)":{"notice":"Deploy a new proxy with `_singleton` singleton and `saltNonce` salt.         Optionally executes an initializer call to a new proxy and calls a specified callback address `callback`."},"createProxyWithNonce(address,bytes,uint256)":{"notice":"Deploys a new proxy with `_singleton` singleton and `saltNonce` salt. Optionally executes an initializer call to a new proxy."},"getChainId()":{"notice":"Returns the ID of the chain the contract is currently deployed on."}},"version":1}}},"contracts/test/4337/Test4337ModuleAndHandler.sol":{"ISafe":{"abi":[{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint8","name":"operation","type":"uint8"}],"name":"execTransactionFromModule","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"execTransactionFromModule(address,uint256,bytes,uint8)":"468721a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/4337/Test4337ModuleAndHandler.sol\":\"ISafe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"},\"contracts/test/4337/Test4337ModuleAndHandler.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\npragma abicoder v2;\\n\\nimport \\\"../../libraries/SafeStorage.sol\\\";\\n\\nstruct UserOperation {\\n    address sender;\\n    uint256 nonce;\\n    bytes initCode;\\n    bytes callData;\\n    uint256 callGasLimit;\\n    uint256 verificationGasLimit;\\n    uint256 preVerificationGas;\\n    uint256 maxFeePerGas;\\n    uint256 maxPriorityFeePerGas;\\n    bytes paymasterAndData;\\n    bytes signature;\\n}\\n\\ninterface ISafe {\\n    function execTransactionFromModule(address to, uint256 value, bytes memory data, uint8 operation) external returns (bool success);\\n}\\n\\n/// @dev A Dummy 4337 Module/Handler for testing purposes\\n///      \\u26a0\\ufe0f \\u26a0\\ufe0f \\u26a0\\ufe0f DO NOT USE IN PRODUCTION \\u26a0\\ufe0f \\u26a0\\ufe0f \\u26a0\\ufe0f\\n///      The module does not perform ANY validation, it just executes validateUserOp and execTransaction\\n///      to perform the opcode level compliance by the bundler.\\ncontract Test4337ModuleAndHandler is SafeStorage {\\n    address public immutable myAddress;\\n    address public immutable entryPoint;\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    constructor(address entryPointAddress) {\\n        entryPoint = entryPointAddress;\\n        myAddress = address(this);\\n    }\\n\\n    function validateUserOp(UserOperation calldata userOp, bytes32, uint256 missingAccountFunds) external returns (uint256 validationData) {\\n        address payable safeAddress = payable(userOp.sender);\\n        ISafe senderSafe = ISafe(safeAddress);\\n\\n        if (missingAccountFunds != 0) {\\n            senderSafe.execTransactionFromModule(entryPoint, missingAccountFunds, \\\"\\\", 0);\\n        }\\n\\n        return 0;\\n    }\\n\\n    function execTransaction(address to, uint256 value, bytes calldata data) external payable {\\n        address payable safeAddress = payable(msg.sender);\\n        ISafe safe = ISafe(safeAddress);\\n        require(safe.execTransactionFromModule(to, value, data, 0), \\\"tx failed\\\");\\n    }\\n\\n    function enableMyself() public {\\n        require(myAddress != address(this), \\\"You need to DELEGATECALL, sir\\\");\\n\\n        // Module cannot be added twice.\\n        require(modules[myAddress] == address(0), \\\"GS102\\\");\\n        modules[myAddress] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = myAddress;\\n    }\\n}\\n\",\"keccak256\":\"0x40af22c4928f4e77e370f098cadac1aa9d654bb067e0c909733082b4e7d76575\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"Test4337ModuleAndHandler":{"abi":[{"inputs":[{"internalType":"address","name":"entryPointAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"enableMyself","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"entryPoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"execTransaction","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"myAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"callGasLimit","type":"uint256"},{"internalType":"uint256","name":"verificationGasLimit","type":"uint256"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"uint256","name":"maxFeePerGas","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerGas","type":"uint256"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct UserOperation","name":"userOp","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"A Dummy 4337 Module/Handler for testing purposes      ⚠️ ⚠️ ⚠️ DO NOT USE IN PRODUCTION ⚠️ ⚠️ ⚠️      The module does not perform ANY validation, it just executes validateUserOp and execTransaction      to perform the opcode level compliance by the bundler.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:805:53","statements":[{"body":{"nodeType":"YulBlock","src":"70:80:53","statements":[{"nodeType":"YulAssignment","src":"80:22:53","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:53"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"89:5:53"},"nodeType":"YulFunctionCall","src":"89:13:53"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"80:5:53"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:53"}],"functionName":{"name":"validator_revert_t_address","nodeType":"YulIdentifier","src":"111:26:53"},"nodeType":"YulFunctionCall","src":"111:33:53"},"nodeType":"YulExpressionStatement","src":"111:33:53"}]},"name":"abi_decode_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"48:6:53","type":""},{"name":"end","nodeType":"YulTypedName","src":"56:3:53","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:53","type":""}],"src":"7:143:53"},{"body":{"nodeType":"YulBlock","src":"233:207:53","statements":[{"body":{"nodeType":"YulBlock","src":"279:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"288:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"291:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"281:6:53"},"nodeType":"YulFunctionCall","src":"281:12:53"},"nodeType":"YulExpressionStatement","src":"281:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"254:7:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"263:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"250:3:53"},"nodeType":"YulFunctionCall","src":"250:23:53"},{"kind":"number","nodeType":"YulLiteral","src":"275:2:53","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"246:3:53"},"nodeType":"YulFunctionCall","src":"246:32:53"},"nodeType":"YulIf","src":"243:2:53"},{"nodeType":"YulBlock","src":"305:128:53","statements":[{"nodeType":"YulVariableDeclaration","src":"320:15:53","value":{"kind":"number","nodeType":"YulLiteral","src":"334:1:53","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"324:6:53","type":""}]},{"nodeType":"YulAssignment","src":"349:74:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"395:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"406:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"391:3:53"},"nodeType":"YulFunctionCall","src":"391:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"415:7:53"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nodeType":"YulIdentifier","src":"359:31:53"},"nodeType":"YulFunctionCall","src":"359:64:53"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"349:6:53"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"203:9:53","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"214:7:53","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"226:6:53","type":""}],"src":"156:284:53"},{"body":{"nodeType":"YulBlock","src":"491:51:53","statements":[{"nodeType":"YulAssignment","src":"501:35:53","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"530:5:53"}],"functionName":{"name":"cleanup_t_uint160","nodeType":"YulIdentifier","src":"512:17:53"},"nodeType":"YulFunctionCall","src":"512:24:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"501:7:53"}]}]},"name":"cleanup_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"473:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"483:7:53","type":""}],"src":"446:96:53"},{"body":{"nodeType":"YulBlock","src":"593:81:53","statements":[{"nodeType":"YulAssignment","src":"603:65:53","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"618:5:53"},{"kind":"number","nodeType":"YulLiteral","src":"625:42:53","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"614:3:53"},"nodeType":"YulFunctionCall","src":"614:54:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"603:7:53"}]}]},"name":"cleanup_t_uint160","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"575:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"585:7:53","type":""}],"src":"548:126:53"},{"body":{"nodeType":"YulBlock","src":"723:79:53","statements":[{"body":{"nodeType":"YulBlock","src":"780:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"789:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"792:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"782:6:53"},"nodeType":"YulFunctionCall","src":"782:12:53"},"nodeType":"YulExpressionStatement","src":"782:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"746:5:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"771:5:53"}],"functionName":{"name":"cleanup_t_address","nodeType":"YulIdentifier","src":"753:17:53"},"nodeType":"YulFunctionCall","src":"753:24:53"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"743:2:53"},"nodeType":"YulFunctionCall","src":"743:35:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"736:6:53"},"nodeType":"YulFunctionCall","src":"736:43:53"},"nodeType":"YulIf","src":"733:2:53"}]},"name":"validator_revert_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"716:5:53","type":""}],"src":"680:122:53"}]},"contents":"{\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n}\n","id":53,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c060405234801561001057600080fd5b50604051610d37380380610d37833981810160405281019061003291906100bb565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250503073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505061012d565b6000815190506100b581610116565b92915050565b6000602082840312156100cd57600080fd5b60006100db848285016100a6565b91505092915050565b60006100ef826100f6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b61011f816100e4565b811461012a57600080fd5b50565b60805160601c60a05160601c610bc861016f6000398061017c5280610620525080610117528061023652806102ca5280610401528061049a5250610bc86000f3fe60806040526004361061004a5760003560e01c806326b85ee11461004f5780633a871cdd1461007a578063a798b2b1146100b7578063ab4ed83e146100ce578063b0d691fe146100ea575b600080fd5b34801561005b57600080fd5b50610064610115565b6040516100719190610955565b60405180910390f35b34801561008657600080fd5b506100a1600480360381019061009c91906107ba565b610139565b6040516100ae9190610a68565b60405180910390f35b3480156100c357600080fd5b506100cc61021d565b005b6100e860048036038101906100e39190610725565b610539565b005b3480156100f657600080fd5b506100ff61061e565b60405161010c9190610955565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008084600001602081019061014f91906106fc565b9050600081905060008414610210578073ffffffffffffffffffffffffffffffffffffffff1663468721a77f00000000000000000000000000000000000000000000000000000000000000008660006040518463ffffffff1660e01b81526004016101bc939291906109be565b602060405180830381600087803b1580156101d657600080fd5b505af11580156101ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020e9190610791565b505b6000925050509392505050565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614156102ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a390610a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190610a28565b60405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600033905060008190508073ffffffffffffffffffffffffffffffffffffffff1663468721a78787878760006040518663ffffffff1660e01b8152600401610585959493929190610970565b602060405180830381600087803b15801561059f57600080fd5b505af11580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610791565b610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610a08565b60405180910390fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008135905061065181610b36565b92915050565b60008151905061066681610b4d565b92915050565b60008135905061067b81610b64565b92915050565b60008083601f84011261069357600080fd5b8235905067ffffffffffffffff8111156106ac57600080fd5b6020830191508360018202830111156106c457600080fd5b9250929050565b600061016082840312156106de57600080fd5b81905092915050565b6000813590506106f681610b7b565b92915050565b60006020828403121561070e57600080fd5b600061071c84828501610642565b91505092915050565b6000806000806060858703121561073b57600080fd5b600061074987828801610642565b945050602061075a878288016106e7565b935050604085013567ffffffffffffffff81111561077757600080fd5b61078387828801610681565b925092505092959194509250565b6000602082840312156107a357600080fd5b60006107b184828501610657565b91505092915050565b6000806000606084860312156107cf57600080fd5b600084013567ffffffffffffffff8111156107e957600080fd5b6107f5868287016106cb565b93505060206108068682870161066c565b9250506040610817868287016106e7565b9150509250925092565b61082a81610aa5565b82525050565b600061083c8385610a83565b9350610849838584610b16565b61085283610b25565b840190509392505050565b61086681610b04565b82525050565b6000610879600983610a94565b91507f7478206661696c656400000000000000000000000000000000000000000000006000830152602082019050919050565b60006108b9600583610a94565b91507f47533130320000000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006108f9600083610a83565b9150600082019050919050565b6000610913601d83610a94565b91507f596f75206e65656420746f2044454c454741544543414c4c2c207369720000006000830152602082019050919050565b61094f81610aed565b82525050565b600060208201905061096a6000830184610821565b92915050565b60006080820190506109856000830188610821565b6109926020830187610946565b81810360408301526109a5818587610830565b90506109b4606083018461085d565b9695505050505050565b60006080820190506109d36000830186610821565b6109e06020830185610946565b81810360408301526109f1816108ec565b9050610a00606083018461085d565b949350505050565b60006020820190508181036000830152610a218161086c565b9050919050565b60006020820190508181036000830152610a41816108ac565b9050919050565b60006020820190508181036000830152610a6181610906565b9050919050565b6000602082019050610a7d6000830184610946565b92915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610ab082610acd565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000610b0f82610af7565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b610b3f81610aa5565b8114610b4a57600080fd5b50565b610b5681610ab7565b8114610b6157600080fd5b50565b610b6d81610ac3565b8114610b7857600080fd5b50565b610b8481610aed565b8114610b8f57600080fd5b5056fea2646970667358221220ac2a03bd49b01f4c1ffaafbc205ba28a857d5c9e03acd2ae04ab1133567ad9ad64736f6c63430007060033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xD37 CODESIZE SUB DUP1 PUSH2 0xD37 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0xBB JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 SHL DUP2 MSTORE POP POP POP PUSH2 0x12D JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xB5 DUP2 PUSH2 0x116 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xDB DUP5 DUP3 DUP6 ADD PUSH2 0xA6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEF DUP3 PUSH2 0xF6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11F DUP2 PUSH2 0xE4 JUMP JUMPDEST DUP2 EQ PUSH2 0x12A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0xBC8 PUSH2 0x16F PUSH1 0x0 CODECOPY DUP1 PUSH2 0x17C MSTORE DUP1 PUSH2 0x620 MSTORE POP DUP1 PUSH2 0x117 MSTORE DUP1 PUSH2 0x236 MSTORE DUP1 PUSH2 0x2CA MSTORE DUP1 PUSH2 0x401 MSTORE DUP1 PUSH2 0x49A MSTORE POP PUSH2 0xBC8 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26B85EE1 EQ PUSH2 0x4F JUMPI DUP1 PUSH4 0x3A871CDD EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xA798B2B1 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0xAB4ED83E EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0xB0D691FE EQ PUSH2 0xEA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0x115 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x955 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x9C SWAP2 SWAP1 PUSH2 0x7BA JUMP JUMPDEST PUSH2 0x139 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0xA68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCC PUSH2 0x21D JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0x725 JUMP JUMPDEST PUSH2 0x539 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x61E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x955 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14F SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x0 DUP5 EQ PUSH2 0x210 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x468721A7 PUSH32 0x0 DUP7 PUSH1 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1BC SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9BE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1EA 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 0x20E SWAP2 SWAP1 PUSH2 0x791 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2AC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A3 SWAP1 PUSH2 0xA48 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x39A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x391 SWAP1 PUSH2 0xA28 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x468721A7 DUP8 DUP8 DUP8 DUP8 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x585 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x970 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x59F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5B3 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 0x5D7 SWAP2 SWAP1 PUSH2 0x791 JUMP JUMPDEST PUSH2 0x616 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x60D SWAP1 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x651 DUP2 PUSH2 0xB36 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x666 DUP2 PUSH2 0xB4D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x67B DUP2 PUSH2 0xB64 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x6F6 DUP2 PUSH2 0xB7B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x71C DUP5 DUP3 DUP6 ADD PUSH2 0x642 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x749 DUP8 DUP3 DUP9 ADD PUSH2 0x642 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x75A DUP8 DUP3 DUP9 ADD PUSH2 0x6E7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x777 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x783 DUP8 DUP3 DUP9 ADD PUSH2 0x681 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7B1 DUP5 DUP3 DUP6 ADD PUSH2 0x657 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F5 DUP7 DUP3 DUP8 ADD PUSH2 0x6CB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x806 DUP7 DUP3 DUP8 ADD PUSH2 0x66C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x817 DUP7 DUP3 DUP8 ADD PUSH2 0x6E7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x82A DUP2 PUSH2 0xAA5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x83C DUP4 DUP6 PUSH2 0xA83 JUMP JUMPDEST SWAP4 POP PUSH2 0x849 DUP4 DUP6 DUP5 PUSH2 0xB16 JUMP JUMPDEST PUSH2 0x852 DUP4 PUSH2 0xB25 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x866 DUP2 PUSH2 0xB04 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x879 PUSH1 0x9 DUP4 PUSH2 0xA94 JUMP JUMPDEST SWAP2 POP PUSH32 0x7478206661696C65640000000000000000000000000000000000000000000000 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 PUSH1 0x5 DUP4 PUSH2 0xA94 JUMP JUMPDEST SWAP2 POP PUSH32 0x4753313032000000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F9 PUSH1 0x0 DUP4 PUSH2 0xA83 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x913 PUSH1 0x1D DUP4 PUSH2 0xA94 JUMP JUMPDEST SWAP2 POP PUSH32 0x596F75206E65656420746F2044454C454741544543414C4C2C20736972000000 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0xAED JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x96A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x821 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x985 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x821 JUMP JUMPDEST PUSH2 0x992 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x946 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x9A5 DUP2 DUP6 DUP8 PUSH2 0x830 JUMP JUMPDEST SWAP1 POP PUSH2 0x9B4 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x85D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x9D3 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x821 JUMP JUMPDEST PUSH2 0x9E0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x946 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x9F1 DUP2 PUSH2 0x8EC JUMP JUMPDEST SWAP1 POP PUSH2 0xA00 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x85D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA21 DUP2 PUSH2 0x86C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA41 DUP2 PUSH2 0x8AC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA61 DUP2 PUSH2 0x906 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA7D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x946 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB0 DUP3 PUSH2 0xACD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0F DUP3 PUSH2 0xAF7 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xB3F DUP2 PUSH2 0xAA5 JUMP JUMPDEST DUP2 EQ PUSH2 0xB4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xB56 DUP2 PUSH2 0xAB7 JUMP JUMPDEST DUP2 EQ PUSH2 0xB61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xB6D DUP2 PUSH2 0xAC3 JUMP JUMPDEST DUP2 EQ PUSH2 0xB78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xB84 DUP2 PUSH2 0xAED JUMP JUMPDEST DUP2 EQ PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC 0x2A SUB 0xBD 0x49 0xB0 0x1F 0x4C 0x1F STATICCALL 0xAF 0xBC KECCAK256 JUMPDEST LOG2 DUP11 DUP6 PUSH30 0x5C9E03ACD2AE04AB1133567AD9AD64736F6C634300070600330000000000 ","sourceMap":"903:1353:48:-:0;;;1104:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1166:17;1153:30;;;;;;;;;;;;1213:4;1193:25;;;;;;;;;;;;1104:121;903:1353;;7:143:53;;95:6;89:13;80:22;;111:33;138:5;111:33;:::i;:::-;70:80;;;;:::o;156:284::-;;275:2;263:9;254:7;250:23;246:32;243:2;;;291:1;288;281:12;243:2;334:1;359:64;415:7;406:6;395:9;391:22;359:64;:::i;:::-;349:74;;305:128;233:207;;;;:::o;446:96::-;;512:24;530:5;512:24;:::i;:::-;501:35;;491:51;;;:::o;548:126::-;;625:42;618:5;614:54;603:65;;593:81;;;:::o;680:122::-;753:24;771:5;753:24;:::i;:::-;746:5;743:35;733:2;;792:1;789;782:12;733:2;723:79;:::o;903:1353:48:-;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10070:53","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:53","statements":[{"nodeType":"YulAssignment","src":"69:29:53","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:53"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:53"},"nodeType":"YulFunctionCall","src":"78:20:53"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:53"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:53"}],"functionName":{"name":"validator_revert_t_address","nodeType":"YulIdentifier","src":"107:26:53"},"nodeType":"YulFunctionCall","src":"107:33:53"},"nodeType":"YulExpressionStatement","src":"107:33:53"}]},"name":"abi_decode_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:53","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:53","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:53","type":""}],"src":"7:139:53"},{"body":{"nodeType":"YulBlock","src":"212:77:53","statements":[{"nodeType":"YulAssignment","src":"222:22:53","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"237:6:53"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"231:5:53"},"nodeType":"YulFunctionCall","src":"231:13:53"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"222:5:53"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"277:5:53"}],"functionName":{"name":"validator_revert_t_bool","nodeType":"YulIdentifier","src":"253:23:53"},"nodeType":"YulFunctionCall","src":"253:30:53"},"nodeType":"YulExpressionStatement","src":"253:30:53"}]},"name":"abi_decode_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"190:6:53","type":""},{"name":"end","nodeType":"YulTypedName","src":"198:3:53","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"206:5:53","type":""}],"src":"152:137:53"},{"body":{"nodeType":"YulBlock","src":"347:87:53","statements":[{"nodeType":"YulAssignment","src":"357:29:53","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"379:6:53"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"366:12:53"},"nodeType":"YulFunctionCall","src":"366:20:53"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"357:5:53"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"422:5:53"}],"functionName":{"name":"validator_revert_t_bytes32","nodeType":"YulIdentifier","src":"395:26:53"},"nodeType":"YulFunctionCall","src":"395:33:53"},"nodeType":"YulExpressionStatement","src":"395:33:53"}]},"name":"abi_decode_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"325:6:53","type":""},{"name":"end","nodeType":"YulTypedName","src":"333:3:53","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"341:5:53","type":""}],"src":"295:139:53"},{"body":{"nodeType":"YulBlock","src":"527:277:53","statements":[{"body":{"nodeType":"YulBlock","src":"576:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"585:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"588:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"578:6:53"},"nodeType":"YulFunctionCall","src":"578:12:53"},"nodeType":"YulExpressionStatement","src":"578:12:53"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"555:6:53"},{"kind":"number","nodeType":"YulLiteral","src":"563:4:53","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:53"},"nodeType":"YulFunctionCall","src":"551:17:53"},{"name":"end","nodeType":"YulIdentifier","src":"570:3:53"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"547:3:53"},"nodeType":"YulFunctionCall","src":"547:27:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"540:6:53"},"nodeType":"YulFunctionCall","src":"540:35:53"},"nodeType":"YulIf","src":"537:2:53"},{"nodeType":"YulAssignment","src":"601:30:53","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"624:6:53"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"611:12:53"},"nodeType":"YulFunctionCall","src":"611:20:53"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"601:6:53"}]},{"body":{"nodeType":"YulBlock","src":"674:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"683:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"686:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"676:6:53"},"nodeType":"YulFunctionCall","src":"676:12:53"},"nodeType":"YulExpressionStatement","src":"676:12:53"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"646:6:53"},{"kind":"number","nodeType":"YulLiteral","src":"654:18:53","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"643:2:53"},"nodeType":"YulFunctionCall","src":"643:30:53"},"nodeType":"YulIf","src":"640:2:53"},{"nodeType":"YulAssignment","src":"699:29:53","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"715:6:53"},{"kind":"number","nodeType":"YulLiteral","src":"723:4:53","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"711:3:53"},"nodeType":"YulFunctionCall","src":"711:17:53"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"699:8:53"}]},{"body":{"nodeType":"YulBlock","src":"782:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"791:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"794:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"784:6:53"},"nodeType":"YulFunctionCall","src":"784:12:53"},"nodeType":"YulExpressionStatement","src":"784:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"747:8:53"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"761:6:53"},{"kind":"number","nodeType":"YulLiteral","src":"769:4:53","type":"","value":"0x01"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"757:3:53"},"nodeType":"YulFunctionCall","src":"757:17:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"743:3:53"},"nodeType":"YulFunctionCall","src":"743:32:53"},{"name":"end","nodeType":"YulIdentifier","src":"777:3:53"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"740:2:53"},"nodeType":"YulFunctionCall","src":"740:41:53"},"nodeType":"YulIf","src":"737:2:53"}]},"name":"abi_decode_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"494:6:53","type":""},{"name":"end","nodeType":"YulTypedName","src":"502:3:53","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"510:8:53","type":""},{"name":"length","nodeType":"YulTypedName","src":"520:6:53","type":""}],"src":"453:351:53"},{"body":{"nodeType":"YulBlock","src":"923:86:53","statements":[{"body":{"nodeType":"YulBlock","src":"963:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"972:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"965:6:53"},"nodeType":"YulFunctionCall","src":"965:12:53"},"nodeType":"YulExpressionStatement","src":"965:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"944:3:53"},{"name":"offset","nodeType":"YulIdentifier","src":"949:6:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"940:3:53"},"nodeType":"YulFunctionCall","src":"940:16:53"},{"kind":"number","nodeType":"YulLiteral","src":"958:3:53","type":"","value":"352"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"936:3:53"},"nodeType":"YulFunctionCall","src":"936:26:53"},"nodeType":"YulIf","src":"933:2:53"},{"nodeType":"YulAssignment","src":"988:15:53","value":{"name":"offset","nodeType":"YulIdentifier","src":"997:6:53"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"988:5:53"}]}]},"name":"abi_decode_t_struct$_UserOperation_$6328_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"901:6:53","type":""},{"name":"end","nodeType":"YulTypedName","src":"909:3:53","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"917:5:53","type":""}],"src":"838:171:53"},{"body":{"nodeType":"YulBlock","src":"1067:87:53","statements":[{"nodeType":"YulAssignment","src":"1077:29:53","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1099:6:53"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1086:12:53"},"nodeType":"YulFunctionCall","src":"1086:20:53"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1077:5:53"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1142:5:53"}],"functionName":{"name":"validator_revert_t_uint256","nodeType":"YulIdentifier","src":"1115:26:53"},"nodeType":"YulFunctionCall","src":"1115:33:53"},"nodeType":"YulExpressionStatement","src":"1115:33:53"}]},"name":"abi_decode_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1045:6:53","type":""},{"name":"end","nodeType":"YulTypedName","src":"1053:3:53","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1061:5:53","type":""}],"src":"1015:139:53"},{"body":{"nodeType":"YulBlock","src":"1226:196:53","statements":[{"body":{"nodeType":"YulBlock","src":"1272:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1281:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1284:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1274:6:53"},"nodeType":"YulFunctionCall","src":"1274:12:53"},"nodeType":"YulExpressionStatement","src":"1274:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1247:7:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"1256:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1243:3:53"},"nodeType":"YulFunctionCall","src":"1243:23:53"},{"kind":"number","nodeType":"YulLiteral","src":"1268:2:53","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1239:3:53"},"nodeType":"YulFunctionCall","src":"1239:32:53"},"nodeType":"YulIf","src":"1236:2:53"},{"nodeType":"YulBlock","src":"1298:117:53","statements":[{"nodeType":"YulVariableDeclaration","src":"1313:15:53","value":{"kind":"number","nodeType":"YulLiteral","src":"1327:1:53","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1317:6:53","type":""}]},{"nodeType":"YulAssignment","src":"1342:63:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1377:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"1388:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1373:3:53"},"nodeType":"YulFunctionCall","src":"1373:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1397:7:53"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"1352:20:53"},"nodeType":"YulFunctionCall","src":"1352:53:53"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1342:6:53"}]}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1196:9:53","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1207:7:53","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1219:6:53","type":""}],"src":"1160:262:53"},{"body":{"nodeType":"YulBlock","src":"1547:564:53","statements":[{"body":{"nodeType":"YulBlock","src":"1593:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1602:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1605:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1595:6:53"},"nodeType":"YulFunctionCall","src":"1595:12:53"},"nodeType":"YulExpressionStatement","src":"1595:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1568:7:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"1577:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1564:3:53"},"nodeType":"YulFunctionCall","src":"1564:23:53"},{"kind":"number","nodeType":"YulLiteral","src":"1589:2:53","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1560:3:53"},"nodeType":"YulFunctionCall","src":"1560:32:53"},"nodeType":"YulIf","src":"1557:2:53"},{"nodeType":"YulBlock","src":"1619:117:53","statements":[{"nodeType":"YulVariableDeclaration","src":"1634:15:53","value":{"kind":"number","nodeType":"YulLiteral","src":"1648:1:53","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1638:6:53","type":""}]},{"nodeType":"YulAssignment","src":"1663:63:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1698:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"1709:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1694:3:53"},"nodeType":"YulFunctionCall","src":"1694:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1718:7:53"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"1673:20:53"},"nodeType":"YulFunctionCall","src":"1673:53:53"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1663:6:53"}]}]},{"nodeType":"YulBlock","src":"1746:118:53","statements":[{"nodeType":"YulVariableDeclaration","src":"1761:16:53","value":{"kind":"number","nodeType":"YulLiteral","src":"1775:2:53","type":"","value":"32"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1765:6:53","type":""}]},{"nodeType":"YulAssignment","src":"1791:63:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1826:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"1837:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1822:3:53"},"nodeType":"YulFunctionCall","src":"1822:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1846:7:53"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"1801:20:53"},"nodeType":"YulFunctionCall","src":"1801:53:53"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1791:6:53"}]}]},{"nodeType":"YulBlock","src":"1874:230:53","statements":[{"nodeType":"YulVariableDeclaration","src":"1889:46:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1920:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"1931:2:53","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1916:3:53"},"nodeType":"YulFunctionCall","src":"1916:18:53"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1903:12:53"},"nodeType":"YulFunctionCall","src":"1903:32:53"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1893:6:53","type":""}]},{"body":{"nodeType":"YulBlock","src":"1982:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1991:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1994:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1984:6:53"},"nodeType":"YulFunctionCall","src":"1984:12:53"},"nodeType":"YulExpressionStatement","src":"1984:12:53"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1954:6:53"},{"kind":"number","nodeType":"YulLiteral","src":"1962:18:53","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1951:2:53"},"nodeType":"YulFunctionCall","src":"1951:30:53"},"nodeType":"YulIf","src":"1948:2:53"},{"nodeType":"YulAssignment","src":"2012:82:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2066:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"2077:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2062:3:53"},"nodeType":"YulFunctionCall","src":"2062:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2086:7:53"}],"functionName":{"name":"abi_decode_t_bytes_calldata_ptr","nodeType":"YulIdentifier","src":"2030:31:53"},"nodeType":"YulFunctionCall","src":"2030:64:53"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2012:6:53"},{"name":"value3","nodeType":"YulIdentifier","src":"2020:6:53"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1493:9:53","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1504:7:53","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1516:6:53","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1524:6:53","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1532:6:53","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1540:6:53","type":""}],"src":"1428:683:53"},{"body":{"nodeType":"YulBlock","src":"2191:204:53","statements":[{"body":{"nodeType":"YulBlock","src":"2237:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2246:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2249:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2239:6:53"},"nodeType":"YulFunctionCall","src":"2239:12:53"},"nodeType":"YulExpressionStatement","src":"2239:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2212:7:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"2221:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2208:3:53"},"nodeType":"YulFunctionCall","src":"2208:23:53"},{"kind":"number","nodeType":"YulLiteral","src":"2233:2:53","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2204:3:53"},"nodeType":"YulFunctionCall","src":"2204:32:53"},"nodeType":"YulIf","src":"2201:2:53"},{"nodeType":"YulBlock","src":"2263:125:53","statements":[{"nodeType":"YulVariableDeclaration","src":"2278:15:53","value":{"kind":"number","nodeType":"YulLiteral","src":"2292:1:53","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2282:6:53","type":""}]},{"nodeType":"YulAssignment","src":"2307:71:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2350:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"2361:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2346:3:53"},"nodeType":"YulFunctionCall","src":"2346:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2370:7:53"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nodeType":"YulIdentifier","src":"2317:28:53"},"nodeType":"YulFunctionCall","src":"2317:61:53"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2307:6:53"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2161:9:53","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2172:7:53","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2184:6:53","type":""}],"src":"2117:278:53"},{"body":{"nodeType":"YulBlock","src":"2534:578:53","statements":[{"body":{"nodeType":"YulBlock","src":"2580:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2589:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2592:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2582:6:53"},"nodeType":"YulFunctionCall","src":"2582:12:53"},"nodeType":"YulExpressionStatement","src":"2582:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2555:7:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"2564:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2551:3:53"},"nodeType":"YulFunctionCall","src":"2551:23:53"},{"kind":"number","nodeType":"YulLiteral","src":"2576:2:53","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2547:3:53"},"nodeType":"YulFunctionCall","src":"2547:32:53"},"nodeType":"YulIf","src":"2544:2:53"},{"nodeType":"YulBlock","src":"2606:243:53","statements":[{"nodeType":"YulVariableDeclaration","src":"2621:45:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2652:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"2663:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2648:3:53"},"nodeType":"YulFunctionCall","src":"2648:17:53"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2635:12:53"},"nodeType":"YulFunctionCall","src":"2635:31:53"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2625:6:53","type":""}]},{"body":{"nodeType":"YulBlock","src":"2713:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2722:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2725:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2715:6:53"},"nodeType":"YulFunctionCall","src":"2715:12:53"},"nodeType":"YulExpressionStatement","src":"2715:12:53"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2685:6:53"},{"kind":"number","nodeType":"YulLiteral","src":"2693:18:53","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2682:2:53"},"nodeType":"YulFunctionCall","src":"2682:30:53"},"nodeType":"YulIf","src":"2679:2:53"},{"nodeType":"YulAssignment","src":"2743:96:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2811:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"2822:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2807:3:53"},"nodeType":"YulFunctionCall","src":"2807:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2831:7:53"}],"functionName":{"name":"abi_decode_t_struct$_UserOperation_$6328_calldata_ptr","nodeType":"YulIdentifier","src":"2753:53:53"},"nodeType":"YulFunctionCall","src":"2753:86:53"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2743:6:53"}]}]},{"nodeType":"YulBlock","src":"2859:118:53","statements":[{"nodeType":"YulVariableDeclaration","src":"2874:16:53","value":{"kind":"number","nodeType":"YulLiteral","src":"2888:2:53","type":"","value":"32"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2878:6:53","type":""}]},{"nodeType":"YulAssignment","src":"2904:63:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2939:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"2950:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2935:3:53"},"nodeType":"YulFunctionCall","src":"2935:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2959:7:53"}],"functionName":{"name":"abi_decode_t_bytes32","nodeType":"YulIdentifier","src":"2914:20:53"},"nodeType":"YulFunctionCall","src":"2914:53:53"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2904:6:53"}]}]},{"nodeType":"YulBlock","src":"2987:118:53","statements":[{"nodeType":"YulVariableDeclaration","src":"3002:16:53","value":{"kind":"number","nodeType":"YulLiteral","src":"3016:2:53","type":"","value":"64"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3006:6:53","type":""}]},{"nodeType":"YulAssignment","src":"3032:63:53","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3067:9:53"},{"name":"offset","nodeType":"YulIdentifier","src":"3078:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3063:3:53"},"nodeType":"YulFunctionCall","src":"3063:22:53"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3087:7:53"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"3042:20:53"},"nodeType":"YulFunctionCall","src":"3042:53:53"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3032:6:53"}]}]}]},"name":"abi_decode_tuple_t_struct$_UserOperation_$6328_calldata_ptrt_bytes32t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2488:9:53","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2499:7:53","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2511:6:53","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2519:6:53","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2527:6:53","type":""}],"src":"2401:711:53"},{"body":{"nodeType":"YulBlock","src":"3183:53:53","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3200:3:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3223:5:53"}],"functionName":{"name":"cleanup_t_address","nodeType":"YulIdentifier","src":"3205:17:53"},"nodeType":"YulFunctionCall","src":"3205:24:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3193:6:53"},"nodeType":"YulFunctionCall","src":"3193:37:53"},"nodeType":"YulExpressionStatement","src":"3193:37:53"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3171:5:53","type":""},{"name":"pos","nodeType":"YulTypedName","src":"3178:3:53","type":""}],"src":"3118:118:53"},{"body":{"nodeType":"YulBlock","src":"3364:201:53","statements":[{"nodeType":"YulAssignment","src":"3374:77:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3439:3:53"},{"name":"length","nodeType":"YulIdentifier","src":"3444:6:53"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"3381:57:53"},"nodeType":"YulFunctionCall","src":"3381:70:53"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3374:3:53"}]},{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"3485:5:53"},{"name":"pos","nodeType":"YulIdentifier","src":"3492:3:53"},{"name":"length","nodeType":"YulIdentifier","src":"3497:6:53"}],"functionName":{"name":"copy_calldata_to_memory","nodeType":"YulIdentifier","src":"3461:23:53"},"nodeType":"YulFunctionCall","src":"3461:43:53"},"nodeType":"YulExpressionStatement","src":"3461:43:53"},{"nodeType":"YulAssignment","src":"3513:46:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3524:3:53"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3551:6:53"}],"functionName":{"name":"round_up_to_mul_of_32","nodeType":"YulIdentifier","src":"3529:21:53"},"nodeType":"YulFunctionCall","src":"3529:29:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3520:3:53"},"nodeType":"YulFunctionCall","src":"3520:39:53"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3513:3:53"}]}]},"name":"abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"3337:5:53","type":""},{"name":"length","nodeType":"YulTypedName","src":"3344:6:53","type":""},{"name":"pos","nodeType":"YulTypedName","src":"3352:3:53","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3360:3:53","type":""}],"src":"3264:301:53"},{"body":{"nodeType":"YulBlock","src":"3642:72:53","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3659:3:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3701:5:53"}],"functionName":{"name":"convert_t_rational_0_by_1_to_t_uint8","nodeType":"YulIdentifier","src":"3664:36:53"},"nodeType":"YulFunctionCall","src":"3664:43:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3652:6:53"},"nodeType":"YulFunctionCall","src":"3652:56:53"},"nodeType":"YulExpressionStatement","src":"3652:56:53"}]},"name":"abi_encode_t_rational_0_by_1_to_t_uint8_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3630:5:53","type":""},{"name":"pos","nodeType":"YulTypedName","src":"3637:3:53","type":""}],"src":"3571:143:53"},{"body":{"nodeType":"YulBlock","src":"3866:160:53","statements":[{"nodeType":"YulAssignment","src":"3876:73:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3942:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"3947:1:53","type":"","value":"9"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"3883:58:53"},"nodeType":"YulFunctionCall","src":"3883:66:53"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3876:3:53"}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3970:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"3975:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3966:3:53"},"nodeType":"YulFunctionCall","src":"3966:11:53"},{"kind":"string","nodeType":"YulLiteral","src":"3979:11:53","type":"","value":"tx failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3959:6:53"},"nodeType":"YulFunctionCall","src":"3959:32:53"},"nodeType":"YulExpressionStatement","src":"3959:32:53"},{"nodeType":"YulAssignment","src":"4001:19:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4012:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4017:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4008:3:53"},"nodeType":"YulFunctionCall","src":"4008:12:53"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4001:3:53"}]}]},"name":"abi_encode_t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3854:3:53","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3862:3:53","type":""}],"src":"3720:306:53"},{"body":{"nodeType":"YulBlock","src":"4178:156:53","statements":[{"nodeType":"YulAssignment","src":"4188:73:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4254:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4259:1:53","type":"","value":"5"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"4195:58:53"},"nodeType":"YulFunctionCall","src":"4195:66:53"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"4188:3:53"}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4282:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4287:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4278:3:53"},"nodeType":"YulFunctionCall","src":"4278:11:53"},{"kind":"string","nodeType":"YulLiteral","src":"4291:7:53","type":"","value":"GS102"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4271:6:53"},"nodeType":"YulFunctionCall","src":"4271:28:53"},"nodeType":"YulExpressionStatement","src":"4271:28:53"},{"nodeType":"YulAssignment","src":"4309:19:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4320:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4325:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4316:3:53"},"nodeType":"YulFunctionCall","src":"4316:12:53"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4309:3:53"}]}]},"name":"abi_encode_t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4166:3:53","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4174:3:53","type":""}],"src":"4032:302:53"},{"body":{"nodeType":"YulBlock","src":"4485:116:53","statements":[{"nodeType":"YulAssignment","src":"4495:72:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4560:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4565:1:53","type":"","value":"0"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"4502:57:53"},"nodeType":"YulFunctionCall","src":"4502:65:53"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"4495:3:53"}]},{"nodeType":"YulAssignment","src":"4577:18:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4588:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4593:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4584:3:53"},"nodeType":"YulFunctionCall","src":"4584:11:53"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4577:3:53"}]}]},"name":"abi_encode_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_to_t_bytes_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4473:3:53","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4481:3:53","type":""}],"src":"4340:261:53"},{"body":{"nodeType":"YulBlock","src":"4753:181:53","statements":[{"nodeType":"YulAssignment","src":"4763:74:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4829:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4834:2:53","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"4770:58:53"},"nodeType":"YulFunctionCall","src":"4770:67:53"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"4763:3:53"}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4858:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4863:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4854:3:53"},"nodeType":"YulFunctionCall","src":"4854:11:53"},{"kind":"string","nodeType":"YulLiteral","src":"4867:31:53","type":"","value":"You need to DELEGATECALL, sir"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4847:6:53"},"nodeType":"YulFunctionCall","src":"4847:52:53"},"nodeType":"YulExpressionStatement","src":"4847:52:53"},{"nodeType":"YulAssignment","src":"4909:19:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4920:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"4925:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4916:3:53"},"nodeType":"YulFunctionCall","src":"4916:12:53"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4909:3:53"}]}]},"name":"abi_encode_t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4741:3:53","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4749:3:53","type":""}],"src":"4607:327:53"},{"body":{"nodeType":"YulBlock","src":"5005:53:53","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5022:3:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5045:5:53"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"5027:17:53"},"nodeType":"YulFunctionCall","src":"5027:24:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5015:6:53"},"nodeType":"YulFunctionCall","src":"5015:37:53"},"nodeType":"YulExpressionStatement","src":"5015:37:53"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4993:5:53","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5000:3:53","type":""}],"src":"4940:118:53"},{"body":{"nodeType":"YulBlock","src":"5162:124:53","statements":[{"nodeType":"YulAssignment","src":"5172:26:53","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5184:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"5195:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5180:3:53"},"nodeType":"YulFunctionCall","src":"5180:18:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5172:4:53"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5252:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5265:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"5276:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5261:3:53"},"nodeType":"YulFunctionCall","src":"5261:17:53"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulIdentifier","src":"5208:43:53"},"nodeType":"YulFunctionCall","src":"5208:71:53"},"nodeType":"YulExpressionStatement","src":"5208:71:53"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5134:9:53","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5146:6:53","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5157:4:53","type":""}],"src":"5064:222:53"},{"body":{"nodeType":"YulBlock","src":"5508:456:53","statements":[{"nodeType":"YulAssignment","src":"5518:27:53","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5530:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"5541:3:53","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5526:3:53"},"nodeType":"YulFunctionCall","src":"5526:19:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5518:4:53"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5599:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5612:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"5623:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5608:3:53"},"nodeType":"YulFunctionCall","src":"5608:17:53"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulIdentifier","src":"5555:43:53"},"nodeType":"YulFunctionCall","src":"5555:71:53"},"nodeType":"YulExpressionStatement","src":"5555:71:53"},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5680:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5693:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"5704:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5689:3:53"},"nodeType":"YulFunctionCall","src":"5689:18:53"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"5636:43:53"},"nodeType":"YulFunctionCall","src":"5636:72:53"},"nodeType":"YulExpressionStatement","src":"5636:72:53"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5729:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"5740:2:53","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5725:3:53"},"nodeType":"YulFunctionCall","src":"5725:18:53"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"5749:4:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"5755:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5745:3:53"},"nodeType":"YulFunctionCall","src":"5745:20:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5718:6:53"},"nodeType":"YulFunctionCall","src":"5718:48:53"},"nodeType":"YulExpressionStatement","src":"5718:48:53"},{"nodeType":"YulAssignment","src":"5775:94:53","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"5847:6:53"},{"name":"value3","nodeType":"YulIdentifier","src":"5855:6:53"},{"name":"tail","nodeType":"YulIdentifier","src":"5864:4:53"}],"functionName":{"name":"abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"5783:63:53"},"nodeType":"YulFunctionCall","src":"5783:86:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5775:4:53"}]},{"expression":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"5929:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5942:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"5953:2:53","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5938:3:53"},"nodeType":"YulFunctionCall","src":"5938:18:53"}],"functionName":{"name":"abi_encode_t_rational_0_by_1_to_t_uint8_fromStack","nodeType":"YulIdentifier","src":"5879:49:53"},"nodeType":"YulFunctionCall","src":"5879:78:53"},"nodeType":"YulExpressionStatement","src":"5879:78:53"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr_t_rational_0_by_1__to_t_address_t_uint256_t_bytes_memory_ptr_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5448:9:53","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5460:6:53","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5468:6:53","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5476:6:53","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5484:6:53","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5492:6:53","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5503:4:53","type":""}],"src":"5292:672:53"},{"body":{"nodeType":"YulBlock","src":"6230:500:53","statements":[{"nodeType":"YulAssignment","src":"6240:27:53","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6252:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"6263:3:53","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6248:3:53"},"nodeType":"YulFunctionCall","src":"6248:19:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6240:4:53"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6321:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6334:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"6345:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6330:3:53"},"nodeType":"YulFunctionCall","src":"6330:17:53"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulIdentifier","src":"6277:43:53"},"nodeType":"YulFunctionCall","src":"6277:71:53"},"nodeType":"YulExpressionStatement","src":"6277:71:53"},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6402:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6415:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"6426:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6411:3:53"},"nodeType":"YulFunctionCall","src":"6411:18:53"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"6358:43:53"},"nodeType":"YulFunctionCall","src":"6358:72:53"},"nodeType":"YulExpressionStatement","src":"6358:72:53"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6451:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"6462:2:53","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6447:3:53"},"nodeType":"YulFunctionCall","src":"6447:18:53"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"6471:4:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"6477:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6467:3:53"},"nodeType":"YulFunctionCall","src":"6467:20:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6440:6:53"},"nodeType":"YulFunctionCall","src":"6440:48:53"},"nodeType":"YulExpressionStatement","src":"6440:48:53"},{"nodeType":"YulAssignment","src":"6497:138:53","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"6630:4:53"}],"functionName":{"name":"abi_encode_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_to_t_bytes_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"6505:123:53"},"nodeType":"YulFunctionCall","src":"6505:130:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6497:4:53"}]},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6695:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6708:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"6719:2:53","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6704:3:53"},"nodeType":"YulFunctionCall","src":"6704:18:53"}],"functionName":{"name":"abi_encode_t_rational_0_by_1_to_t_uint8_fromStack","nodeType":"YulIdentifier","src":"6645:49:53"},"nodeType":"YulFunctionCall","src":"6645:78:53"},"nodeType":"YulExpressionStatement","src":"6645:78:53"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_rational_0_by_1__to_t_address_t_uint256_t_bytes_memory_ptr_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6186:9:53","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6198:6:53","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6206:6:53","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6214:6:53","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6225:4:53","type":""}],"src":"5970:760:53"},{"body":{"nodeType":"YulBlock","src":"6907:248:53","statements":[{"nodeType":"YulAssignment","src":"6917:26:53","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6929:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"6940:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6925:3:53"},"nodeType":"YulFunctionCall","src":"6925:18:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6917:4:53"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6964:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"6975:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6960:3:53"},"nodeType":"YulFunctionCall","src":"6960:17:53"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"6983:4:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"6989:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6979:3:53"},"nodeType":"YulFunctionCall","src":"6979:20:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6953:6:53"},"nodeType":"YulFunctionCall","src":"6953:47:53"},"nodeType":"YulExpressionStatement","src":"6953:47:53"},{"nodeType":"YulAssignment","src":"7009:139:53","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7143:4:53"}],"functionName":{"name":"abi_encode_t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"7017:124:53"},"nodeType":"YulFunctionCall","src":"7017:131:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7009:4:53"}]}]},"name":"abi_encode_tuple_t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6887:9:53","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6902:4:53","type":""}],"src":"6736:419:53"},{"body":{"nodeType":"YulBlock","src":"7332:248:53","statements":[{"nodeType":"YulAssignment","src":"7342:26:53","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7354:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"7365:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7350:3:53"},"nodeType":"YulFunctionCall","src":"7350:18:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7342:4:53"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7389:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"7400:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7385:3:53"},"nodeType":"YulFunctionCall","src":"7385:17:53"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7408:4:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"7414:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7404:3:53"},"nodeType":"YulFunctionCall","src":"7404:20:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7378:6:53"},"nodeType":"YulFunctionCall","src":"7378:47:53"},"nodeType":"YulExpressionStatement","src":"7378:47:53"},{"nodeType":"YulAssignment","src":"7434:139:53","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7568:4:53"}],"functionName":{"name":"abi_encode_t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"7442:124:53"},"nodeType":"YulFunctionCall","src":"7442:131:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7434:4:53"}]}]},"name":"abi_encode_tuple_t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7312:9:53","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7327:4:53","type":""}],"src":"7161:419:53"},{"body":{"nodeType":"YulBlock","src":"7757:248:53","statements":[{"nodeType":"YulAssignment","src":"7767:26:53","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7779:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"7790:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7775:3:53"},"nodeType":"YulFunctionCall","src":"7775:18:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7767:4:53"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7814:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"7825:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7810:3:53"},"nodeType":"YulFunctionCall","src":"7810:17:53"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7833:4:53"},{"name":"headStart","nodeType":"YulIdentifier","src":"7839:9:53"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7829:3:53"},"nodeType":"YulFunctionCall","src":"7829:20:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7803:6:53"},"nodeType":"YulFunctionCall","src":"7803:47:53"},"nodeType":"YulExpressionStatement","src":"7803:47:53"},{"nodeType":"YulAssignment","src":"7859:139:53","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7993:4:53"}],"functionName":{"name":"abi_encode_t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"7867:124:53"},"nodeType":"YulFunctionCall","src":"7867:131:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7859:4:53"}]}]},"name":"abi_encode_tuple_t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7737:9:53","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7752:4:53","type":""}],"src":"7586:419:53"},{"body":{"nodeType":"YulBlock","src":"8109:124:53","statements":[{"nodeType":"YulAssignment","src":"8119:26:53","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8131:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"8142:2:53","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8127:3:53"},"nodeType":"YulFunctionCall","src":"8127:18:53"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8119:4:53"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8199:6:53"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8212:9:53"},{"kind":"number","nodeType":"YulLiteral","src":"8223:1:53","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8208:3:53"},"nodeType":"YulFunctionCall","src":"8208:17:53"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"8155:43:53"},"nodeType":"YulFunctionCall","src":"8155:71:53"},"nodeType":"YulExpressionStatement","src":"8155:71:53"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8081:9:53","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8093:6:53","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8104:4:53","type":""}],"src":"8011:222:53"},{"body":{"nodeType":"YulBlock","src":"8334:73:53","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8351:3:53"},{"name":"length","nodeType":"YulIdentifier","src":"8356:6:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8344:6:53"},"nodeType":"YulFunctionCall","src":"8344:19:53"},"nodeType":"YulExpressionStatement","src":"8344:19:53"},{"nodeType":"YulAssignment","src":"8372:29:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8391:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"8396:4:53","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8387:3:53"},"nodeType":"YulFunctionCall","src":"8387:14:53"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"8372:11:53"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8306:3:53","type":""},{"name":"length","nodeType":"YulTypedName","src":"8311:6:53","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"8322:11:53","type":""}],"src":"8239:168:53"},{"body":{"nodeType":"YulBlock","src":"8509:73:53","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8526:3:53"},{"name":"length","nodeType":"YulIdentifier","src":"8531:6:53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8519:6:53"},"nodeType":"YulFunctionCall","src":"8519:19:53"},"nodeType":"YulExpressionStatement","src":"8519:19:53"},{"nodeType":"YulAssignment","src":"8547:29:53","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8566:3:53"},{"kind":"number","nodeType":"YulLiteral","src":"8571:4:53","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8562:3:53"},"nodeType":"YulFunctionCall","src":"8562:14:53"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"8547:11:53"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8481:3:53","type":""},{"name":"length","nodeType":"YulTypedName","src":"8486:6:53","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"8497:11:53","type":""}],"src":"8413:169:53"},{"body":{"nodeType":"YulBlock","src":"8633:51:53","statements":[{"nodeType":"YulAssignment","src":"8643:35:53","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8672:5:53"}],"functionName":{"name":"cleanup_t_uint160","nodeType":"YulIdentifier","src":"8654:17:53"},"nodeType":"YulFunctionCall","src":"8654:24:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"8643:7:53"}]}]},"name":"cleanup_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8615:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"8625:7:53","type":""}],"src":"8588:96:53"},{"body":{"nodeType":"YulBlock","src":"8732:48:53","statements":[{"nodeType":"YulAssignment","src":"8742:32:53","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8767:5:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8760:6:53"},"nodeType":"YulFunctionCall","src":"8760:13:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8753:6:53"},"nodeType":"YulFunctionCall","src":"8753:21:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"8742:7:53"}]}]},"name":"cleanup_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8714:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"8724:7:53","type":""}],"src":"8690:90:53"},{"body":{"nodeType":"YulBlock","src":"8831:32:53","statements":[{"nodeType":"YulAssignment","src":"8841:16:53","value":{"name":"value","nodeType":"YulIdentifier","src":"8852:5:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"8841:7:53"}]}]},"name":"cleanup_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8813:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"8823:7:53","type":""}],"src":"8786:77:53"},{"body":{"nodeType":"YulBlock","src":"8914:81:53","statements":[{"nodeType":"YulAssignment","src":"8924:65:53","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8939:5:53"},{"kind":"number","nodeType":"YulLiteral","src":"8946:42:53","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8935:3:53"},"nodeType":"YulFunctionCall","src":"8935:54:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"8924:7:53"}]}]},"name":"cleanup_t_uint160","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8896:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"8906:7:53","type":""}],"src":"8869:126:53"},{"body":{"nodeType":"YulBlock","src":"9046:32:53","statements":[{"nodeType":"YulAssignment","src":"9056:16:53","value":{"name":"value","nodeType":"YulIdentifier","src":"9067:5:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"9056:7:53"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9028:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"9038:7:53","type":""}],"src":"9001:77:53"},{"body":{"nodeType":"YulBlock","src":"9127:43:53","statements":[{"nodeType":"YulAssignment","src":"9137:27:53","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9152:5:53"},{"kind":"number","nodeType":"YulLiteral","src":"9159:4:53","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9148:3:53"},"nodeType":"YulFunctionCall","src":"9148:16:53"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"9137:7:53"}]}]},"name":"cleanup_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9109:5:53","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"9119:7:53","type":""}],"src":"9084:86:53"},{"body":{"nodeType":"YulBlock","src":"9242:51:53","statements":[{"nodeType":"YulAssignment","src":"9252:35:53","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9281:5:53"}],"functionName":{"name":"cleanup_t_uint8","nodeType":"YulIdentifier","src":"9265:15:53"},"nodeType":"YulFunctionCall","src":"9265:22:53"},"variableNames":[{"name":"converted","nodeType":"YulIdentifier","src":"9252:9:53"}]}]},"name":"convert_t_rational_0_by_1_to_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9222:5:53","type":""}],"returnVariables":[{"name":"converted","nodeType":"YulTypedName","src":"9232:9:53","type":""}],"src":"9176:117:53"},{"body":{"nodeType":"YulBlock","src":"9350:103:53","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9373:3:53"},{"name":"src","nodeType":"YulIdentifier","src":"9378:3:53"},{"name":"length","nodeType":"YulIdentifier","src":"9383:6:53"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9360:12:53"},"nodeType":"YulFunctionCall","src":"9360:30:53"},"nodeType":"YulExpressionStatement","src":"9360:30:53"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9431:3:53"},{"name":"length","nodeType":"YulIdentifier","src":"9436:6:53"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9427:3:53"},"nodeType":"YulFunctionCall","src":"9427:16:53"},{"kind":"number","nodeType":"YulLiteral","src":"9445:1:53","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9420:6:53"},"nodeType":"YulFunctionCall","src":"9420:27:53"},"nodeType":"YulExpressionStatement","src":"9420:27:53"}]},"name":"copy_calldata_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"9332:3:53","type":""},{"name":"dst","nodeType":"YulTypedName","src":"9337:3:53","type":""},{"name":"length","nodeType":"YulTypedName","src":"9342:6:53","type":""}],"src":"9299:154:53"},{"body":{"nodeType":"YulBlock","src":"9507:54:53","statements":[{"nodeType":"YulAssignment","src":"9517:38:53","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9535:5:53"},{"kind":"number","nodeType":"YulLiteral","src":"9542:2:53","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9531:3:53"},"nodeType":"YulFunctionCall","src":"9531:14:53"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9551:2:53","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9547:3:53"},"nodeType":"YulFunctionCall","src":"9547:7:53"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9527:3:53"},"nodeType":"YulFunctionCall","src":"9527:28:53"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"9517:6:53"}]}]},"name":"round_up_to_mul_of_32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9490:5:53","type":""}],"returnVariables":[{"name":"result","nodeType":"YulTypedName","src":"9500:6:53","type":""}],"src":"9459:102:53"},{"body":{"nodeType":"YulBlock","src":"9610:79:53","statements":[{"body":{"nodeType":"YulBlock","src":"9667:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9676:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9679:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9669:6:53"},"nodeType":"YulFunctionCall","src":"9669:12:53"},"nodeType":"YulExpressionStatement","src":"9669:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9633:5:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9658:5:53"}],"functionName":{"name":"cleanup_t_address","nodeType":"YulIdentifier","src":"9640:17:53"},"nodeType":"YulFunctionCall","src":"9640:24:53"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9630:2:53"},"nodeType":"YulFunctionCall","src":"9630:35:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9623:6:53"},"nodeType":"YulFunctionCall","src":"9623:43:53"},"nodeType":"YulIf","src":"9620:2:53"}]},"name":"validator_revert_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9603:5:53","type":""}],"src":"9567:122:53"},{"body":{"nodeType":"YulBlock","src":"9735:76:53","statements":[{"body":{"nodeType":"YulBlock","src":"9789:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9798:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9801:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9791:6:53"},"nodeType":"YulFunctionCall","src":"9791:12:53"},"nodeType":"YulExpressionStatement","src":"9791:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9758:5:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9780:5:53"}],"functionName":{"name":"cleanup_t_bool","nodeType":"YulIdentifier","src":"9765:14:53"},"nodeType":"YulFunctionCall","src":"9765:21:53"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9755:2:53"},"nodeType":"YulFunctionCall","src":"9755:32:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9748:6:53"},"nodeType":"YulFunctionCall","src":"9748:40:53"},"nodeType":"YulIf","src":"9745:2:53"}]},"name":"validator_revert_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9728:5:53","type":""}],"src":"9695:116:53"},{"body":{"nodeType":"YulBlock","src":"9860:79:53","statements":[{"body":{"nodeType":"YulBlock","src":"9917:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9926:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9929:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9919:6:53"},"nodeType":"YulFunctionCall","src":"9919:12:53"},"nodeType":"YulExpressionStatement","src":"9919:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9883:5:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9908:5:53"}],"functionName":{"name":"cleanup_t_bytes32","nodeType":"YulIdentifier","src":"9890:17:53"},"nodeType":"YulFunctionCall","src":"9890:24:53"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9880:2:53"},"nodeType":"YulFunctionCall","src":"9880:35:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9873:6:53"},"nodeType":"YulFunctionCall","src":"9873:43:53"},"nodeType":"YulIf","src":"9870:2:53"}]},"name":"validator_revert_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9853:5:53","type":""}],"src":"9817:122:53"},{"body":{"nodeType":"YulBlock","src":"9988:79:53","statements":[{"body":{"nodeType":"YulBlock","src":"10045:16:53","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10054:1:53","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10057:1:53","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10047:6:53"},"nodeType":"YulFunctionCall","src":"10047:12:53"},"nodeType":"YulExpressionStatement","src":"10047:12:53"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10011:5:53"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10036:5:53"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"10018:17:53"},"nodeType":"YulFunctionCall","src":"10018:24:53"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"10008:2:53"},"nodeType":"YulFunctionCall","src":"10008:35:53"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10001:6:53"},"nodeType":"YulFunctionCall","src":"10001:43:53"},"nodeType":"YulIf","src":"9998:2:53"}]},"name":"validator_revert_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9981:5:53","type":""}],"src":"9945:122:53"}]},"contents":"{\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_t_bytes32(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_bytes32(value)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x01)), end) { revert(0, 0) }\n    }\n\n    // struct UserOperation\n    function abi_decode_t_struct$_UserOperation_$6328_calldata_ptr(offset, end) -> value {\n        if slt(sub(end, offset), 352) { revert(0, 0) }\n        value := offset\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n            value2, value3 := abi_decode_t_bytes_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_struct$_UserOperation_$6328_calldata_ptrt_bytes32t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n            value0 := abi_decode_t_struct$_UserOperation_$6328_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_bytes32(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    // bytes -> bytes\n    function abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack(start, length, pos) -> end {\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n\n        copy_calldata_to_memory(start, pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_t_rational_0_by_1_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_0_by_1_to_t_uint8(value))\n    }\n\n    function abi_encode_t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 9)\n\n        mstore(add(pos, 0), \"tx failed\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 5)\n\n        mstore(add(pos, 0), \"GS102\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_to_t_bytes_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, 0)\n\n        end := add(pos, 0)\n    }\n\n    function abi_encode_t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n\n        mstore(add(pos, 0), \"You need to DELEGATECALL, sir\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr_t_rational_0_by_1__to_t_address_t_uint256_t_bytes_memory_ptr_t_uint8__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack(value2, value3,  tail)\n\n        abi_encode_t_rational_0_by_1_to_t_uint8_fromStack(value4,  add(headStart, 96))\n\n    }\n\n    function abi_encode_tuple_t_address_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_rational_0_by_1__to_t_address_t_uint256_t_bytes_memory_ptr_t_uint8__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_to_t_bytes_memory_ptr_fromStack( tail)\n\n        abi_encode_t_rational_0_by_1_to_t_uint8_fromStack(value2,  add(headStart, 96))\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7c05a956646a564f0a6d3eaa0a2277c6b7125ab174100307087ca8bd8beaa3b2_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_bfe16ebc2bd5d2fdfe588255b31e648718f9ede037848519acb772cd4f042f12_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e2fa31dbf16ae7af4bfe5d23361d66b80314efda77c030592b85cc5428605467_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function cleanup_t_bytes32(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function convert_t_rational_0_by_1_to_t_uint8(value) -> converted {\n        converted := cleanup_t_uint8(value)\n    }\n\n    function copy_calldata_to_memory(src, dst, length) {\n        calldatacopy(dst, src, length)\n        // clear end\n        mstore(add(dst, length), 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_bytes32(value) {\n        if iszero(eq(value, cleanup_t_bytes32(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n}\n","id":53,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"6347":[{"length":32,"start":279},{"length":32,"start":566},{"length":32,"start":714},{"length":32,"start":1025},{"length":32,"start":1178}],"6349":[{"length":32,"start":380},{"length":32,"start":1568}]},"linkReferences":{},"object":"60806040526004361061004a5760003560e01c806326b85ee11461004f5780633a871cdd1461007a578063a798b2b1146100b7578063ab4ed83e146100ce578063b0d691fe146100ea575b600080fd5b34801561005b57600080fd5b50610064610115565b6040516100719190610955565b60405180910390f35b34801561008657600080fd5b506100a1600480360381019061009c91906107ba565b610139565b6040516100ae9190610a68565b60405180910390f35b3480156100c357600080fd5b506100cc61021d565b005b6100e860048036038101906100e39190610725565b610539565b005b3480156100f657600080fd5b506100ff61061e565b60405161010c9190610955565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60008084600001602081019061014f91906106fc565b9050600081905060008414610210578073ffffffffffffffffffffffffffffffffffffffff1663468721a77f00000000000000000000000000000000000000000000000000000000000000008660006040518463ffffffff1660e01b81526004016101bc939291906109be565b602060405180830381600087803b1580156101d657600080fd5b505af11580156101ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020e9190610791565b505b6000925050509392505050565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614156102ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a390610a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190610a28565b60405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600033905060008190508073ffffffffffffffffffffffffffffffffffffffff1663468721a78787878760006040518663ffffffff1660e01b8152600401610585959493929190610970565b602060405180830381600087803b15801561059f57600080fd5b505af11580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610791565b610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610a08565b60405180910390fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008135905061065181610b36565b92915050565b60008151905061066681610b4d565b92915050565b60008135905061067b81610b64565b92915050565b60008083601f84011261069357600080fd5b8235905067ffffffffffffffff8111156106ac57600080fd5b6020830191508360018202830111156106c457600080fd5b9250929050565b600061016082840312156106de57600080fd5b81905092915050565b6000813590506106f681610b7b565b92915050565b60006020828403121561070e57600080fd5b600061071c84828501610642565b91505092915050565b6000806000806060858703121561073b57600080fd5b600061074987828801610642565b945050602061075a878288016106e7565b935050604085013567ffffffffffffffff81111561077757600080fd5b61078387828801610681565b925092505092959194509250565b6000602082840312156107a357600080fd5b60006107b184828501610657565b91505092915050565b6000806000606084860312156107cf57600080fd5b600084013567ffffffffffffffff8111156107e957600080fd5b6107f5868287016106cb565b93505060206108068682870161066c565b9250506040610817868287016106e7565b9150509250925092565b61082a81610aa5565b82525050565b600061083c8385610a83565b9350610849838584610b16565b61085283610b25565b840190509392505050565b61086681610b04565b82525050565b6000610879600983610a94565b91507f7478206661696c656400000000000000000000000000000000000000000000006000830152602082019050919050565b60006108b9600583610a94565b91507f47533130320000000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006108f9600083610a83565b9150600082019050919050565b6000610913601d83610a94565b91507f596f75206e65656420746f2044454c454741544543414c4c2c207369720000006000830152602082019050919050565b61094f81610aed565b82525050565b600060208201905061096a6000830184610821565b92915050565b60006080820190506109856000830188610821565b6109926020830187610946565b81810360408301526109a5818587610830565b90506109b4606083018461085d565b9695505050505050565b60006080820190506109d36000830186610821565b6109e06020830185610946565b81810360408301526109f1816108ec565b9050610a00606083018461085d565b949350505050565b60006020820190508181036000830152610a218161086c565b9050919050565b60006020820190508181036000830152610a41816108ac565b9050919050565b60006020820190508181036000830152610a6181610906565b9050919050565b6000602082019050610a7d6000830184610946565b92915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610ab082610acd565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000610b0f82610af7565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b610b3f81610aa5565b8114610b4a57600080fd5b50565b610b5681610ab7565b8114610b6157600080fd5b50565b610b6d81610ac3565b8114610b7857600080fd5b50565b610b8481610aed565b8114610b8f57600080fd5b5056fea2646970667358221220ac2a03bd49b01f4c1ffaafbc205ba28a857d5c9e03acd2ae04ab1133567ad9ad64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26B85EE1 EQ PUSH2 0x4F JUMPI DUP1 PUSH4 0x3A871CDD EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xA798B2B1 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0xAB4ED83E EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0xB0D691FE EQ PUSH2 0xEA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0x115 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x955 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x9C SWAP2 SWAP1 PUSH2 0x7BA JUMP JUMPDEST PUSH2 0x139 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0xA68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCC PUSH2 0x21D JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0x725 JUMP JUMPDEST PUSH2 0x539 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x61E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x955 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14F SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x0 DUP5 EQ PUSH2 0x210 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x468721A7 PUSH32 0x0 DUP7 PUSH1 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1BC SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9BE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1EA 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 0x20E SWAP2 SWAP1 PUSH2 0x791 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2AC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A3 SWAP1 PUSH2 0xA48 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x39A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x391 SWAP1 PUSH2 0xA28 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x468721A7 DUP8 DUP8 DUP8 DUP8 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x585 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x970 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x59F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5B3 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 0x5D7 SWAP2 SWAP1 PUSH2 0x791 JUMP JUMPDEST PUSH2 0x616 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x60D SWAP1 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x651 DUP2 PUSH2 0xB36 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x666 DUP2 PUSH2 0xB4D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x67B DUP2 PUSH2 0xB64 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x6F6 DUP2 PUSH2 0xB7B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x71C DUP5 DUP3 DUP6 ADD PUSH2 0x642 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x749 DUP8 DUP3 DUP9 ADD PUSH2 0x642 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x75A DUP8 DUP3 DUP9 ADD PUSH2 0x6E7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x777 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x783 DUP8 DUP3 DUP9 ADD PUSH2 0x681 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7B1 DUP5 DUP3 DUP6 ADD PUSH2 0x657 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F5 DUP7 DUP3 DUP8 ADD PUSH2 0x6CB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x806 DUP7 DUP3 DUP8 ADD PUSH2 0x66C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x817 DUP7 DUP3 DUP8 ADD PUSH2 0x6E7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x82A DUP2 PUSH2 0xAA5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x83C DUP4 DUP6 PUSH2 0xA83 JUMP JUMPDEST SWAP4 POP PUSH2 0x849 DUP4 DUP6 DUP5 PUSH2 0xB16 JUMP JUMPDEST PUSH2 0x852 DUP4 PUSH2 0xB25 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x866 DUP2 PUSH2 0xB04 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x879 PUSH1 0x9 DUP4 PUSH2 0xA94 JUMP JUMPDEST SWAP2 POP PUSH32 0x7478206661696C65640000000000000000000000000000000000000000000000 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 PUSH1 0x5 DUP4 PUSH2 0xA94 JUMP JUMPDEST SWAP2 POP PUSH32 0x4753313032000000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F9 PUSH1 0x0 DUP4 PUSH2 0xA83 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x913 PUSH1 0x1D DUP4 PUSH2 0xA94 JUMP JUMPDEST SWAP2 POP PUSH32 0x596F75206E65656420746F2044454C454741544543414C4C2C20736972000000 PUSH1 0x0 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0xAED JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x96A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x821 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x985 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x821 JUMP JUMPDEST PUSH2 0x992 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x946 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x9A5 DUP2 DUP6 DUP8 PUSH2 0x830 JUMP JUMPDEST SWAP1 POP PUSH2 0x9B4 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x85D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x9D3 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x821 JUMP JUMPDEST PUSH2 0x9E0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x946 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x9F1 DUP2 PUSH2 0x8EC JUMP JUMPDEST SWAP1 POP PUSH2 0xA00 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x85D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA21 DUP2 PUSH2 0x86C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA41 DUP2 PUSH2 0x8AC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xA61 DUP2 PUSH2 0x906 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA7D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x946 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB0 DUP3 PUSH2 0xACD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0F DUP3 PUSH2 0xAF7 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xB3F DUP2 PUSH2 0xAA5 JUMP JUMPDEST DUP2 EQ PUSH2 0xB4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xB56 DUP2 PUSH2 0xAB7 JUMP JUMPDEST DUP2 EQ PUSH2 0xB61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xB6D DUP2 PUSH2 0xAC3 JUMP JUMPDEST DUP2 EQ PUSH2 0xB78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xB84 DUP2 PUSH2 0xAED JUMP JUMPDEST DUP2 EQ PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC 0x2A SUB 0xBD 0x49 0xB0 0x1F 0x4C 0x1F STATICCALL 0xAF 0xBC KECCAK256 JUMPDEST LOG2 DUP11 DUP6 PUSH30 0x5C9E03ACD2AE04AB1133567AD9AD64736F6C634300070600330000000000 ","sourceMap":"903:1353:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;958:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1231:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1933:321;;;;;;;;;;;;;:::i;:::-;;1648:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;998:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;958:34;;;:::o;1231:411::-;1342:22;1376:27;1414:6;:13;;;;;;;;;;:::i;:::-;1376:52;;1438:16;1463:11;1438:37;;1513:1;1490:19;:24;1486:131;;1530:10;:36;;;1567:10;1579:19;1604:1;1530:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1486:131;1634:1;1627:8;;;;1231:411;;;;;:::o;1933:321::-;2003:4;1982:26;;:9;:26;;;;1974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2132:1;2102:32;;:7;:18;2110:9;2102:18;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;2094:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2175:7;:25;1093:3;2175:25;;;;;;;;;;;;;;;;;;;;;;;;;2154:7;:18;2162:9;2154:18;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;2238:9;2210:7;:25;1093:3;2210:25;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;1933:321::o;1648:279::-;1748:27;1786:10;1748:49;;1807:10;1826:11;1807:31;;1856:4;:30;;;1887:2;1891:5;1898:4;;1904:1;1856:50;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1848:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;1648:279;;;;;;:::o;998:35::-;;;:::o;7:139:53:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;453:351::-;;;570:3;563:4;555:6;551:17;547:27;537:2;;588:1;585;578:12;537:2;624:6;611:20;601:30;;654:18;646:6;643:30;640:2;;;686:1;683;676:12;640:2;723:4;715:6;711:17;699:29;;777:3;769:4;761:6;757:17;747:8;743:32;740:41;737:2;;;794:1;791;784:12;737:2;527:277;;;;;:::o;838:171::-;;958:3;949:6;944:3;940:16;936:26;933:2;;;975:1;972;965:12;933:2;997:6;988:15;;923:86;;;;:::o;1015:139::-;;1099:6;1086:20;1077:29;;1115:33;1142:5;1115:33;:::i;:::-;1067:87;;;;:::o;1160:262::-;;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1226:196;;;;:::o;1428:683::-;;;;;1589:2;1577:9;1568:7;1564:23;1560:32;1557:2;;;1605:1;1602;1595:12;1557:2;1648:1;1673:53;1718:7;1709:6;1698:9;1694:22;1673:53;:::i;:::-;1663:63;;1619:117;1775:2;1801:53;1846:7;1837:6;1826:9;1822:22;1801:53;:::i;:::-;1791:63;;1746:118;1931:2;1920:9;1916:18;1903:32;1962:18;1954:6;1951:30;1948:2;;;1994:1;1991;1984:12;1948:2;2030:64;2086:7;2077:6;2066:9;2062:22;2030:64;:::i;:::-;2012:82;;;;1874:230;1547:564;;;;;;;:::o;2117:278::-;;2233:2;2221:9;2212:7;2208:23;2204:32;2201:2;;;2249:1;2246;2239:12;2201:2;2292:1;2317:61;2370:7;2361:6;2350:9;2346:22;2317:61;:::i;:::-;2307:71;;2263:125;2191:204;;;;:::o;2401:711::-;;;;2576:2;2564:9;2555:7;2551:23;2547:32;2544:2;;;2592:1;2589;2582:12;2544:2;2663:1;2652:9;2648:17;2635:31;2693:18;2685:6;2682:30;2679:2;;;2725:1;2722;2715:12;2679:2;2753:86;2831:7;2822:6;2811:9;2807:22;2753:86;:::i;:::-;2743:96;;2606:243;2888:2;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2859:118;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;2534:578;;;;;:::o;3118:118::-;3205:24;3223:5;3205:24;:::i;:::-;3200:3;3193:37;3183:53;;:::o;3264:301::-;;3381:70;3444:6;3439:3;3381:70;:::i;:::-;3374:77;;3461:43;3497:6;3492:3;3485:5;3461:43;:::i;:::-;3529:29;3551:6;3529:29;:::i;:::-;3524:3;3520:39;3513:46;;3364:201;;;;;:::o;3571:143::-;3664:43;3701:5;3664:43;:::i;:::-;3659:3;3652:56;3642:72;;:::o;3720:306::-;;3883:66;3947:1;3942:3;3883:66;:::i;:::-;3876:73;;3979:11;3975:1;3970:3;3966:11;3959:32;4017:2;4012:3;4008:12;4001:19;;3866:160;;;:::o;4032:302::-;;4195:66;4259:1;4254:3;4195:66;:::i;:::-;4188:73;;4291:7;4287:1;4282:3;4278:11;4271:28;4325:2;4320:3;4316:12;4309:19;;4178:156;;;:::o;4340:261::-;;4502:65;4565:1;4560:3;4502:65;:::i;:::-;4495:72;;4593:1;4588:3;4584:11;4577:18;;4485:116;;;:::o;4607:327::-;;4770:67;4834:2;4829:3;4770:67;:::i;:::-;4763:74;;4867:31;4863:1;4858:3;4854:11;4847:52;4925:2;4920:3;4916:12;4909:19;;4753:181;;;:::o;4940:118::-;5027:24;5045:5;5027:24;:::i;:::-;5022:3;5015:37;5005:53;;:::o;5064:222::-;;5195:2;5184:9;5180:18;5172:26;;5208:71;5276:1;5265:9;5261:17;5252:6;5208:71;:::i;:::-;5162:124;;;;:::o;5292:672::-;;5541:3;5530:9;5526:19;5518:27;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5636:72;5704:2;5693:9;5689:18;5680:6;5636:72;:::i;:::-;5755:9;5749:4;5745:20;5740:2;5729:9;5725:18;5718:48;5783:86;5864:4;5855:6;5847;5783:86;:::i;:::-;5775:94;;5879:78;5953:2;5942:9;5938:18;5929:6;5879:78;:::i;:::-;5508:456;;;;;;;;:::o;5970:760::-;;6263:3;6252:9;6248:19;6240:27;;6277:71;6345:1;6334:9;6330:17;6321:6;6277:71;:::i;:::-;6358:72;6426:2;6415:9;6411:18;6402:6;6358:72;:::i;:::-;6477:9;6471:4;6467:20;6462:2;6451:9;6447:18;6440:48;6505:130;6630:4;6505:130;:::i;:::-;6497:138;;6645:78;6719:2;6708:9;6704:18;6695:6;6645:78;:::i;:::-;6230:500;;;;;;:::o;6736:419::-;;6940:2;6929:9;6925:18;6917:26;;6989:9;6983:4;6979:20;6975:1;6964:9;6960:17;6953:47;7017:131;7143:4;7017:131;:::i;:::-;7009:139;;6907:248;;;:::o;7161:419::-;;7365:2;7354:9;7350:18;7342:26;;7414:9;7408:4;7404:20;7400:1;7389:9;7385:17;7378:47;7442:131;7568:4;7442:131;:::i;:::-;7434:139;;7332:248;;;:::o;7586:419::-;;7790:2;7779:9;7775:18;7767:26;;7839:9;7833:4;7829:20;7825:1;7814:9;7810:17;7803:47;7867:131;7993:4;7867:131;:::i;:::-;7859:139;;7757:248;;;:::o;8011:222::-;;8142:2;8131:9;8127:18;8119:26;;8155:71;8223:1;8212:9;8208:17;8199:6;8155:71;:::i;:::-;8109:124;;;;:::o;8239:168::-;;8356:6;8351:3;8344:19;8396:4;8391:3;8387:14;8372:29;;8334:73;;;;:::o;8413:169::-;;8531:6;8526:3;8519:19;8571:4;8566:3;8562:14;8547:29;;8509:73;;;;:::o;8588:96::-;;8654:24;8672:5;8654:24;:::i;:::-;8643:35;;8633:51;;;:::o;8690:90::-;;8767:5;8760:13;8753:21;8742:32;;8732:48;;;:::o;8786:77::-;;8852:5;8841:16;;8831:32;;;:::o;8869:126::-;;8946:42;8939:5;8935:54;8924:65;;8914:81;;;:::o;9001:77::-;;9067:5;9056:16;;9046:32;;;:::o;9084:86::-;;9159:4;9152:5;9148:16;9137:27;;9127:43;;;:::o;9176:117::-;;9265:22;9281:5;9265:22;:::i;:::-;9252:35;;9242:51;;;:::o;9299:154::-;9383:6;9378:3;9373;9360:30;9445:1;9436:6;9431:3;9427:16;9420:27;9350:103;;;:::o;9459:102::-;;9551:2;9547:7;9542:2;9535:5;9531:14;9527:28;9517:38;;9507:54;;;:::o;9567:122::-;9640:24;9658:5;9640:24;:::i;:::-;9633:5;9630:35;9620:2;;9679:1;9676;9669:12;9620:2;9610:79;:::o;9695:116::-;9765:21;9780:5;9765:21;:::i;:::-;9758:5;9755:32;9745:2;;9801:1;9798;9791:12;9745:2;9735:76;:::o;9817:122::-;9890:24;9908:5;9890:24;:::i;:::-;9883:5;9880:35;9870:2;;9929:1;9926;9919:12;9870:2;9860:79;:::o;9945:122::-;10018:24;10036:5;10018:24;:::i;:::-;10011:5;10008:35;9998:2;;10057:1;10054;10047:12;9998:2;9988:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"603200","executionCost":"infinite","totalCost":"infinite"},"external":{"enableMyself()":"infinite","entryPoint()":"infinite","execTransaction(address,uint256,bytes)":"infinite","myAddress()":"infinite","validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)":"infinite"}},"methodIdentifiers":{"enableMyself()":"a798b2b1","entryPoint()":"b0d691fe","execTransaction(address,uint256,bytes)":"ab4ed83e","myAddress()":"26b85ee1","validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)":"3a871cdd"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"entryPointAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"enableMyself\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entryPoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"myAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A Dummy 4337 Module/Handler for testing purposes      \\u26a0\\ufe0f \\u26a0\\ufe0f \\u26a0\\ufe0f DO NOT USE IN PRODUCTION \\u26a0\\ufe0f \\u26a0\\ufe0f \\u26a0\\ufe0f      The module does not perform ANY validation, it just executes validateUserOp and execTransaction      to perform the opcode level compliance by the bundler.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/4337/Test4337ModuleAndHandler.sol\":\"Test4337ModuleAndHandler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/SafeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.\\n * @dev Should be always the first base contract of a library that is used with a Safe.\\n * @author Richard Meissner - @rmeissner\\n */\\ncontract SafeStorage {\\n    // From /common/Singleton.sol\\n    address internal singleton;\\n    // From /common/ModuleManager.sol\\n    mapping(address => address) internal modules;\\n    // From /common/OwnerManager.sol\\n    mapping(address => address) internal owners;\\n    uint256 internal ownerCount;\\n    uint256 internal threshold;\\n\\n    // From /Safe.sol\\n    uint256 internal nonce;\\n    bytes32 internal _deprecatedDomainSeparator;\\n    mapping(bytes32 => uint256) internal signedMessages;\\n    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;\\n}\\n\",\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\"},\"contracts/test/4337/Test4337ModuleAndHandler.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\npragma abicoder v2;\\n\\nimport \\\"../../libraries/SafeStorage.sol\\\";\\n\\nstruct UserOperation {\\n    address sender;\\n    uint256 nonce;\\n    bytes initCode;\\n    bytes callData;\\n    uint256 callGasLimit;\\n    uint256 verificationGasLimit;\\n    uint256 preVerificationGas;\\n    uint256 maxFeePerGas;\\n    uint256 maxPriorityFeePerGas;\\n    bytes paymasterAndData;\\n    bytes signature;\\n}\\n\\ninterface ISafe {\\n    function execTransactionFromModule(address to, uint256 value, bytes memory data, uint8 operation) external returns (bool success);\\n}\\n\\n/// @dev A Dummy 4337 Module/Handler for testing purposes\\n///      \\u26a0\\ufe0f \\u26a0\\ufe0f \\u26a0\\ufe0f DO NOT USE IN PRODUCTION \\u26a0\\ufe0f \\u26a0\\ufe0f \\u26a0\\ufe0f\\n///      The module does not perform ANY validation, it just executes validateUserOp and execTransaction\\n///      to perform the opcode level compliance by the bundler.\\ncontract Test4337ModuleAndHandler is SafeStorage {\\n    address public immutable myAddress;\\n    address public immutable entryPoint;\\n\\n    address internal constant SENTINEL_MODULES = address(0x1);\\n\\n    constructor(address entryPointAddress) {\\n        entryPoint = entryPointAddress;\\n        myAddress = address(this);\\n    }\\n\\n    function validateUserOp(UserOperation calldata userOp, bytes32, uint256 missingAccountFunds) external returns (uint256 validationData) {\\n        address payable safeAddress = payable(userOp.sender);\\n        ISafe senderSafe = ISafe(safeAddress);\\n\\n        if (missingAccountFunds != 0) {\\n            senderSafe.execTransactionFromModule(entryPoint, missingAccountFunds, \\\"\\\", 0);\\n        }\\n\\n        return 0;\\n    }\\n\\n    function execTransaction(address to, uint256 value, bytes calldata data) external payable {\\n        address payable safeAddress = payable(msg.sender);\\n        ISafe safe = ISafe(safeAddress);\\n        require(safe.execTransactionFromModule(to, value, data, 0), \\\"tx failed\\\");\\n    }\\n\\n    function enableMyself() public {\\n        require(myAddress != address(this), \\\"You need to DELEGATECALL, sir\\\");\\n\\n        // Module cannot be added twice.\\n        require(modules[myAddress] == address(0), \\\"GS102\\\");\\n        modules[myAddress] = modules[SENTINEL_MODULES];\\n        modules[SENTINEL_MODULES] = myAddress;\\n    }\\n}\\n\",\"keccak256\":\"0x40af22c4928f4e77e370f098cadac1aa9d654bb067e0c909733082b4e7d76575\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":5330,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"singleton","offset":0,"slot":"0","type":"t_address"},{"astId":5334,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"modules","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":5338,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"owners","offset":0,"slot":"2","type":"t_mapping(t_address,t_address)"},{"astId":5340,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"ownerCount","offset":0,"slot":"3","type":"t_uint256"},{"astId":5342,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"threshold","offset":0,"slot":"4","type":"t_uint256"},{"astId":5344,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"nonce","offset":0,"slot":"5","type":"t_uint256"},{"astId":5346,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"_deprecatedDomainSeparator","offset":0,"slot":"6","type":"t_bytes32"},{"astId":5350,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"signedMessages","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":5356,"contract":"contracts/test/4337/Test4337ModuleAndHandler.sol:Test4337ModuleAndHandler","label":"approvedHashes","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/test/ERC1155Token.sol":{"ERC1155Token":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"balanceOf(address,uint256)":{"details":"Get the specified address' balance for token with specified ID.","params":{"id":"ID of the token","owner":"The address of the token holder"},"returns":{"_0":"The owner's balance of the token type requested"}},"mint(address,uint256,uint256,bytes)":{"details":"Test function to mint an amount of a token with the given ID","params":{"data":"Data forwarded to `onERC1155Received` if `to` is a contract receiver","id":"ID of the token to be minted","to":"The address that will own the minted token","value":"Amount of the token to be minted"}},"safeTransferFrom(address,address,uint256,uint256,bytes)":{"params":{"data":"Data forwarded to `onERC1155Received` if `to` is a contract receiver","from":"Source address","id":"ID of the token type","to":"Target address","value":"Transfer amount"}}},"title":"ERC1155Token - A test ERC1155 token contract","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610ae3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062fdd58e14610045578063731133e9146100a7578063f242432a14610154575b600080fd5b6100916004803603604081101561005b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610221565b6040518082815260200191505060405180910390f35b610152600480360360808110156100bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561010e57600080fd5b82018360208201111561012057600080fd5b8035906020019184600183028401116401000000008311171561014257600080fd5b9091929391929390505050610300565b005b61021f600480360360a081101561016a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156101db57600080fd5b8201836020820111156101ed57600080fd5b8035906020019184600183028401116401000000008311171561020f57600080fd5b9091929391929390505050610485565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806109d1602b913960400191505060405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610386576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610a5c6021913960400191505060405180910390fd5b60008085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054830160008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061047e33600087878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506107cb565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561050b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806109fc6028913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614806105d2575060011515600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b610627576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180610a246038913960400191505060405180910390fd5b8260008086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540360008086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054830160008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506107c3338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506107cb565b505050505050565b6107d4846109bd565b156109b55763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e6188888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108b4578082015181840152602081019050610899565b50505050905090810190601f1680156108e15780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561090457600080fd5b505af1158015610918573d6000803e3d6000fd5b505050506040513d602081101561092e57600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146109b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180610a7d6031913960400191505060405180910390fd5b5b505050505050565b600080823b90506000811191505091905056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a206d696e7420746f20746865207a65726f2061646472657373455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a264697066735822122003bad9b879af8f21c6ffdcebd9e9ecc946a70b4c47337507df1024363017fc8764736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAE3 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 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDD58E EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x731133E9 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xF242432A EQ PUSH2 0x154 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x91 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x221 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x152 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x300 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x21F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x485 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x9D1 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x386 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA5C PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP4 ADD PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x47E CALLER PUSH1 0x0 DUP8 DUP8 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x7CB JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x50B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x9FC PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x5D2 JUMPI POP PUSH1 0x1 ISZERO ISZERO PUSH1 0x1 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO EQ JUMPDEST PUSH2 0x627 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x38 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA24 PUSH1 0x38 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SUB PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x0 DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP4 ADD PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x7C3 CALLER DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x7CB JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x7D4 DUP5 PUSH2 0x9BD JUMP JUMPDEST ISZERO PUSH2 0x9B5 JUMPI PUSH4 0xF23A6E61 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF23A6E61 DUP9 DUP9 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD 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 0x8B4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x899 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8E1 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 SWAP7 POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x904 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x918 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x92E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x9B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x31 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA7D PUSH1 0x31 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER BALANCE BALANCE CALLDATALOAD CALLDATALOAD GASPRICE KECCAK256 PUSH3 0x616C61 PUSH15 0x636520717565727920666F72207468 PUSH6 0x207A65726F20 PUSH2 0x6464 PUSH19 0x657373455243313135353A2074617267657420 PUSH2 0x6464 PUSH19 0x657373206D757374206265206E6F6E2D7A6572 PUSH16 0x455243313135353A206E656564206F70 PUSH6 0x7261746F7220 PUSH2 0x7070 PUSH19 0x6F76616C20666F722033726420706172747920 PUSH21 0x72616E73666572732E455243313135353A206D696E PUSH21 0x20746F20746865207A65726F206164647265737345 MSTORE NUMBER BALANCE BALANCE CALLDATALOAD CALLDATALOAD GASPRICE KECCAK256 PUSH8 0x6F7420756E6B6E6F PUSH24 0x6E2076616C75652066726F6D206F6E455243313135355265 PUSH4 0x65697665 PUSH5 0xA264697066 PUSH20 0x5822122003BAD9B879AF8F21C6FFDCEBD9E9ECC9 CHAINID 0xA7 SIGNEXTEND 0x4C SELFBALANCE CALLER PUSH22 0x7DF1024363017FC8764736F6C634300070600330000 ","sourceMap":"223:4225:49:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100405760003560e01c8062fdd58e14610045578063731133e9146100a7578063f242432a14610154575b600080fd5b6100916004803603604081101561005b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610221565b6040518082815260200191505060405180910390f35b610152600480360360808110156100bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561010e57600080fd5b82018360208201111561012057600080fd5b8035906020019184600183028401116401000000008311171561014257600080fd5b9091929391929390505050610300565b005b61021f600480360360a081101561016a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156101db57600080fd5b8201836020820111156101ed57600080fd5b8035906020019184600183028401116401000000008311171561020f57600080fd5b9091929391929390505050610485565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806109d1602b913960400191505060405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610386576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610a5c6021913960400191505060405180910390fd5b60008085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054830160008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061047e33600087878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506107cb565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561050b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806109fc6028913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614806105d2575060011515600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b610627576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180610a246038913960400191505060405180910390fd5b8260008086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540360008086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054830160008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506107c3338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506107cb565b505050505050565b6107d4846109bd565b156109b55763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e6188888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108b4578082015181840152602081019050610899565b50505050905090810190601f1680156108e15780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561090457600080fd5b505af1158015610918573d6000803e3d6000fd5b505050506040513d602081101561092e57600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146109b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180610a7d6031913960400191505060405180910390fd5b5b505050505050565b600080823b90506000811191505091905056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a206d696e7420746f20746865207a65726f2061646472657373455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a264697066735822122003bad9b879af8f21c6ffdcebd9e9ecc946a70b4c47337507df1024363017fc8764736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDD58E EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x731133E9 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xF242432A EQ PUSH2 0x154 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x91 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x221 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x152 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x300 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x21F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x485 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x9D1 PUSH1 0x2B SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x386 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA5C PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP4 ADD PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x47E CALLER PUSH1 0x0 DUP8 DUP8 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x7CB JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x50B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x9FC PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x5D2 JUMPI POP PUSH1 0x1 ISZERO ISZERO PUSH1 0x1 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO EQ JUMPDEST PUSH2 0x627 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x38 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA24 PUSH1 0x38 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SUB PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x0 DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP4 ADD PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x7C3 CALLER DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x7CB JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x7D4 DUP5 PUSH2 0x9BD JUMP JUMPDEST ISZERO PUSH2 0x9B5 JUMPI PUSH4 0xF23A6E61 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF23A6E61 DUP9 DUP9 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD 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 0x8B4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x899 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8E1 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 SWAP7 POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x904 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x918 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x92E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x9B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x31 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA7D PUSH1 0x31 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER BALANCE BALANCE CALLDATALOAD CALLDATALOAD GASPRICE KECCAK256 PUSH3 0x616C61 PUSH15 0x636520717565727920666F72207468 PUSH6 0x207A65726F20 PUSH2 0x6464 PUSH19 0x657373455243313135353A2074617267657420 PUSH2 0x6464 PUSH19 0x657373206D757374206265206E6F6E2D7A6572 PUSH16 0x455243313135353A206E656564206F70 PUSH6 0x7261746F7220 PUSH2 0x7070 PUSH19 0x6F76616C20666F722033726420706172747920 PUSH21 0x72616E73666572732E455243313135353A206D696E PUSH21 0x20746F20746865207A65726F206164647265737345 MSTORE NUMBER BALANCE BALANCE CALLDATALOAD CALLDATALOAD GASPRICE KECCAK256 PUSH8 0x6F7420756E6B6E6F PUSH24 0x6E2076616C75652066726F6D206F6E455243313135355265 PUSH4 0x65697665 PUSH5 0xA264697066 PUSH20 0x5822122003BAD9B879AF8F21C6FFDCEBD9E9ECC9 CHAINID 0xA7 SIGNEXTEND 0x4C SELFBALANCE CALLER PUSH22 0x7DF1024363017FC8764736F6C634300070600330000 ","sourceMap":"223:4225:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;769:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2451:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1540:569;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;769:205;836:7;880:1;863:19;;:5;:19;;;;855:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;947:9;:13;957:2;947:13;;;;;;;;;;;:20;961:5;947:20;;;;;;;;;;;;;;;;940:27;;769:205;;;;:::o;2451:304::-;2566:1;2552:16;;:2;:16;;;;2544:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2645:9;:13;2655:2;2645:13;;;;;;;;;;;:17;2659:2;2645:17;;;;;;;;;;;;;;;;2637:5;:25;2617:9;:13;2627:2;2617:13;;;;;;;;;;;:17;2631:2;2617:17;;;;;;;;;;;;;;;:45;;;;2673:75;2704:10;2724:1;2728:2;2732;2736:5;2743:4;;2673:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;:75::i;:::-;2451:304;;;;;:::o;1540:569::-;1681:1;1667:16;;:2;:16;;;;1659:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1767:10;1759:18;;:4;:18;;;:66;;;;1821:4;1781:44;;:18;:24;1800:4;1781:24;;;;;;;;;;;;;;;:36;1806:10;1781:36;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;1759:66;1738:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1962:5;1940:9;:13;1950:2;1940:13;;;;;;;;;;;:19;1954:4;1940:19;;;;;;;;;;;;;;;;:27;1918:9;:13;1928:2;1918:13;;;;;;;;;;;:19;1932:4;1918:19;;;;;;;;;;;;;;;:49;;;;2005:9;:13;2015:2;2005:13;;;;;;;;;;;:17;2019:2;2005:17;;;;;;;;;;;;;;;;1997:5;:25;1977:9;:13;1987:2;1977:13;;;;;;;;;;;:17;1991:2;1977:17;;;;;;;;;;;;;;;:45;;;;2033:69;2064:10;2076:4;2082:2;2086;2090:5;2097:4;;2033:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;:69::i;:::-;1540:569;;;;;;:::o;3934:512::-;4141:14;4152:2;4141:10;:14::i;:::-;4137:303;;;4295:51;;;4196:150;;;4217:2;4196:42;;;4239:8;4249:4;4255:2;4259:5;4266:4;4196:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:150;;;;4171:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4137:303;3934:512;;;;;;:::o;3107:246::-;3167:4;3183:12;3304:7;3292:20;3284:28;;3345:1;3338:4;:8;3331:15;;;3107:246;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"557400","executionCost":"594","totalCost":"557994"},"external":{"balanceOf(address,uint256)":"infinite","mint(address,uint256,uint256,bytes)":"infinite","safeTransferFrom(address,address,uint256,uint256,bytes)":"infinite"},"internal":{"_doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes memory)":"infinite","isContract(address)":"747"}},"methodIdentifiers":{"balanceOf(address,uint256)":"00fdd58e","mint(address,uint256,uint256,bytes)":"731133e9","safeTransferFrom(address,address,uint256,uint256,bytes)":"f242432a"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Get the specified address' balance for token with specified ID.\",\"params\":{\"id\":\"ID of the token\",\"owner\":\"The address of the token holder\"},\"returns\":{\"_0\":\"The owner's balance of the token type requested\"}},\"mint(address,uint256,uint256,bytes)\":{\"details\":\"Test function to mint an amount of a token with the given ID\",\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"id\":\"ID of the token to be minted\",\"to\":\"The address that will own the minted token\",\"value\":\"Amount of the token to be minted\"}},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"from\":\"Source address\",\"id\":\"ID of the token type\",\"to\":\"Target address\",\"value\":\"Transfer amount\"}}},\"title\":\"ERC1155Token - A test ERC1155 token contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"notice\":\"Transfers `value` amount of an `id` from the `from` address to the `to` address specified.         Caller must be approved to manage the tokens being transferred out of the `from` account.         If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ERC1155Token.sol\":\"ERC1155Token\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/external/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title SafeMath\\n * @notice Math operations with safety checks that revert on error (overflow/underflow)\\n */\\nlibrary SafeMath {\\n    /**\\n     * @notice Multiplies two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Product of a and b\\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-solidity/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\\n     * @param a First number\\n     * @param b Second number\\n     * @return Difference of a and b\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        require(b <= a);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Adds two numbers, reverts on overflow.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Sum of a and b\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @notice Returns the largest of two numbers.\\n     * @param a First number\\n     * @param b Second number\\n     * @return Largest of a and b\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n}\\n\",\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\"},\"contracts/interfaces/ERC1155TokenReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n// Note: The ERC-165 identifier for this interface is 0x4e2312e0.\\ninterface ERC1155TokenReceiver {\\n    /**\\n     * @notice Handle the receipt of a single ERC1155 token type.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61) if it accepts the transfer.\\n     *      This function MUST revert if it rejects the transfer.\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _id        The ID of the token being transferred.\\n     * @param _value     The amount of tokens being transferred.\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`.\\n     */\\n    function onERC1155Received(\\n        address _operator,\\n        address _from,\\n        uint256 _id,\\n        uint256 _value,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n\\n    /**\\n     * @notice Handle the receipt of multiple ERC1155 token types.\\n     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.\\n     *      This function MUST return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81) if it accepts the transfer(s).\\n     *      This function MUST revert if it rejects the transfer(s).\\n     *      Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.\\n     * @param _operator  The address which initiated the batch transfer (i.e. msg.sender).\\n     * @param _from      The address which previously owned the token.\\n     * @param _ids       An array containing ids of each token being transferred (order and length must match _values array).\\n     * @param _values    An array containing amounts of each token being transferred (order and length must match _ids array).\\n     * @param _data      Additional data with no specified format.\\n     * @return           `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`.\\n     */\\n    function onERC1155BatchReceived(\\n        address _operator,\\n        address _from,\\n        uint256[] calldata _ids,\\n        uint256[] calldata _values,\\n        bytes calldata _data\\n    ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x87e62665c041cade64e753ecdccf931cb100ab6e4bcc98769c1e6474be9db493\",\"license\":\"LGPL-3.0-only\"},\"contracts/test/ERC1155Token.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../interfaces/ERC1155TokenReceiver.sol\\\";\\nimport \\\"../external/SafeMath.sol\\\";\\n\\n/**\\n * @title ERC1155Token - A test ERC1155 token contract\\n */\\ncontract ERC1155Token {\\n    using SafeMath for uint256;\\n\\n    // Mapping from token ID to owner balances\\n    mapping(uint256 => mapping(address => uint256)) private _balances;\\n\\n    // Mapping from owner to operator approvals\\n    mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n    /**\\n     * @dev Get the specified address' balance for token with specified ID.\\n     * @param owner The address of the token holder\\n     * @param id ID of the token\\n     * @return The owner's balance of the token type requested\\n     */\\n    function balanceOf(address owner, uint256 id) public view returns (uint256) {\\n        require(owner != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n        return _balances[id][owner];\\n    }\\n\\n    /**\\n     * @notice Transfers `value` amount of an `id` from the `from` address to the `to` address specified.\\n     *         Caller must be approved to manage the tokens being transferred out of the `from` account.\\n     *         If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\\n     * @param from Source address\\n     * @param to Target address\\n     * @param id ID of the token type\\n     * @param value Transfer amount\\n     * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\\n     */\\n    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external {\\n        require(to != address(0), \\\"ERC1155: target address must be non-zero\\\");\\n        require(\\n            from == msg.sender || _operatorApprovals[from][msg.sender] == true,\\n            \\\"ERC1155: need operator approval for 3rd party transfers.\\\"\\n        );\\n\\n        _balances[id][from] = _balances[id][from] - value;\\n        _balances[id][to] = value + _balances[id][to];\\n\\n        _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, value, data);\\n    }\\n\\n    /**\\n     * @dev Test function to mint an amount of a token with the given ID\\n     * @param to The address that will own the minted token\\n     * @param id ID of the token to be minted\\n     * @param value Amount of the token to be minted\\n     * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\\n     */\\n    function mint(address to, uint256 id, uint256 value, bytes calldata data) external {\\n        require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n        _balances[id][to] = value + _balances[id][to];\\n\\n        _doSafeTransferAcceptanceCheck(msg.sender, address(0), to, id, value, data);\\n    }\\n\\n    /**\\n     * @notice Returns true if `account` is a contract.\\n     * @dev This function will return false if invoked during the constructor of a contract,\\n     *      as the code is not actually created until after the constructor finishes.\\n     * @param account The address being queried\\n     * @return True if `account` is a contract\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        uint256 size;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Internal function to invoke `onERC1155Received` on a target address\\n     * The call is not executed if the target address is not a contract\\n     * @param operator  The address which initiated the transfer (i.e. msg.sender)\\n     * @param from      The address which previously owned the token\\n     * @param to        The address which will now own the token\\n     * @param id        The id of the token being transferred\\n     * @param value     The amount of tokens being transferred\\n     * @param data      Additional data with no specified format\\n     */\\n    function _doSafeTransferAcceptanceCheck(\\n        address operator,\\n        address from,\\n        address to,\\n        uint256 id,\\n        uint256 value,\\n        bytes memory data\\n    ) internal {\\n        if (isContract(to)) {\\n            require(\\n                ERC1155TokenReceiver(to).onERC1155Received(operator, from, id, value, data) ==\\n                    ERC1155TokenReceiver(to).onERC1155Received.selector,\\n                \\\"ERC1155: got unknown value from onERC1155Received\\\"\\n            );\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd332e09481ecd5fc714ac45d06d59159f054a542aadef71e7a3860d5909310da\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":6504,"contract":"contracts/test/ERC1155Token.sol:ERC1155Token","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":6510,"contract":"contracts/test/ERC1155Token.sol:ERC1155Token","label":"_operatorApprovals","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_bool))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => bool))","numberOfBytes":"32","value":"t_mapping(t_address,t_bool)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"safeTransferFrom(address,address,uint256,uint256,bytes)":{"notice":"Transfers `value` amount of an `id` from the `from` address to the `to` address specified.         Caller must be approved to manage the tokens being transferred out of the `from` account.         If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately."}},"version":1}}},"contracts/test/ERC20Token.sol":{"ERC20Token":{"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":[],"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":"This contract is an ERC20 token contract that extends the OpenZeppelin ERC20 contract.","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":"Constructor that sets the name and symbol of the token and mints an initial supply to the contract deployer."},"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`."}},"title":"ERC20Token","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60806040523480156200001157600080fd5b506040518060400160405280600981526020017f54657374546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f545400000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000359565b508060049080519060200190620000af92919062000359565b506012600560006101000a81548160ff021916908360ff1602179055505050620000e73366038d7ea4c68000620000ed60201b60201c565b6200040f565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620001a560008383620002cb60201b60201c565b620001c181600254620002d060201b620009a01790919060201c565b6002819055506200021f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620002d060201b620009a01790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b6000808284019050838110156200034f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003915760008555620003dd565b82601f10620003ac57805160ff1916838001178555620003dd565b82800160010185558215620003dd579182015b82811115620003dc578251825591602001919060010190620003bf565b5b509050620003ec9190620003f0565b5090565b5b808211156200040b576000816000905550600101620003f1565b5090565b6110de806200041f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461025857806370a08231146102bc57806395d89b4114610314578063a457c2d714610397578063a9059cbb146103fb578063dd62ed3e1461045f576100a9565b806306fdde03146100ae578063095ea7b31461013157806318160ddd1461019557806323b872dd146101b3578063313ce56714610237575b600080fd5b6100b66104d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f65780820151818401526020810190506100db565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561014757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610579565b60405180821515815260200191505060405180910390f35b61019d610597565b6040518082815260200191505060405180910390f35b61021f600480360360608110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105a1565b60405180821515815260200191505060405180910390f35b61023f61067a565b604051808260ff16815260200191505060405180910390f35b6102a46004803603604081101561026e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610691565b60405180821515815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610744565b6040518082815260200191505060405180910390f35b61031c61078c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061082e565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108fb565b60405180821515815260200191505060405180910390f35b6104c16004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610919565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058d610586610a28565b8484610a30565b6001905092915050565b6000600254905090565b60006105ae848484610c27565b61066f846105ba610a28565b61066a8560405180606001604052806028815260200161101360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610620610a28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee89092919063ffffffff16565b610a30565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061073a61069e610a28565b8461073585600160006106af610a28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109a090919063ffffffff16565b610a30565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108f161083b610a28565b846108ec856040518060600160405280602581526020016110846025913960016000610865610a28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee89092919063ffffffff16565b610a30565b6001905092915050565b600061090f610908610a28565b8484610c27565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080828401905083811015610a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610fcb6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061103b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610fa86023913960400191505060405180910390fd5b610d3e838383610fa2565b610da981604051806060016040528060268152602001610fed602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e3c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109a090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610f95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f5a578082015181840152602081019050610f3f565b50505050905090810190601f168015610f875780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200ed35964f1faf5076927e5dff3fce5bd15cfd335a8c6df75350ff7609a95e31a64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x54657374546F6B656E0000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5454000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x96 SWAP3 SWAP2 SWAP1 PUSH3 0x359 JUMP JUMPDEST POP DUP1 PUSH1 0x4 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0xAF SWAP3 SWAP2 SWAP1 PUSH3 0x359 JUMP JUMPDEST POP PUSH1 0x12 PUSH1 0x5 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP POP POP PUSH3 0xE7 CALLER PUSH7 0x38D7EA4C68000 PUSH3 0xED PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x40F JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH3 0x191 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x1A5 PUSH1 0x0 DUP4 DUP4 PUSH3 0x2CB PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1C1 DUP2 PUSH1 0x2 SLOAD PUSH3 0x2D0 PUSH1 0x20 SHL PUSH3 0x9A0 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH3 0x21F DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH3 0x2D0 PUSH1 0x20 SHL PUSH3 0x9A0 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH3 0x34F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 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 PUSH3 0x391 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x3DD JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x3AC JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x3DD JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x3DD JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x3DC JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x3BF JUMP JUMPDEST JUMPDEST POP SWAP1 POP PUSH3 0x3EC SWAP2 SWAP1 PUSH3 0x3F0 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x40B JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH3 0x3F1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x10DE DUP1 PUSH3 0x41F 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 0x258 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3FB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x45F JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x237 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x4D7 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0xF6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xDB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x123 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 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19D PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x21F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x23F PUSH2 0x67A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x31C PUSH2 0x78C JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x35C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x341 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x389 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 0x3E3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x447 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x919 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x56F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x544 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x56F 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 0x552 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58D PUSH2 0x586 PUSH2 0xA28 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5AE DUP5 DUP5 DUP5 PUSH2 0xC27 JUMP JUMPDEST PUSH2 0x66F DUP5 PUSH2 0x5BA PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x66A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1013 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x620 PUSH2 0xA28 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xEE8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x73A PUSH2 0x69E PUSH2 0xA28 JUMP JUMPDEST DUP5 PUSH2 0x735 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x6AF PUSH2 0xA28 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x9A0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x824 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x824 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 0x807 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F1 PUSH2 0x83B PUSH2 0xA28 JUMP JUMPDEST DUP5 PUSH2 0x8EC DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1084 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x865 PUSH2 0xA28 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xEE8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x90F PUSH2 0x908 PUSH2 0xA28 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xC27 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xA1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xAB6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1060 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xB3C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFCB PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCAD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x103B PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFA8 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD3E DUP4 DUP4 DUP4 PUSH2 0xFA2 JUMP JUMPDEST PUSH2 0xDA9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFED PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xEE8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0xE3C DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x9A0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 GT ISZERO DUP3 SWAP1 PUSH2 0xF95 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 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 0xF5A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xF3F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF87 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 DUP3 DUP5 SUB SWAP1 POP 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 0x73582212200ED3 MSIZE PUSH5 0xF1FAF50769 0x27 0xE5 0xDF RETURN 0xFC 0xE5 0xBD ISZERO 0xCF 0xD3 CALLDATALOAD 0xA8 0xC6 0xDF PUSH22 0x350FF7609A95E31A64736F6C63430007060033000000 ","sourceMap":"256:272:50:-:0;;;428:98;;;;;;;;;;1958:145:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2040:5;2032;:13;;;;;;;;;;;;:::i;:::-;;2065:7;2055;:17;;;;;;;;;;;;:::i;:::-;;2094:2;2082:9;;:14;;;;;;;;;;;;;;;;;;1958:145;;484:35:50::1;490:10;502:16;484:5;;;:35;;:::i;:::-;256:272:::0;;7832:370:3;7934:1;7915:21;;:7;:21;;;;7907:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7983:49;8012:1;8016:7;8025:6;7983:20;;;:49;;:::i;:::-;8058:24;8075:6;8058:12;;:16;;;;;;:24;;;;:::i;:::-;8043:12;:39;;;;8113:30;8136:6;8113:9;:18;8123:7;8113:18;;;;;;;;;;;;;;;;:22;;;;;;:30;;;;:::i;:::-;8092:9;:18;8102:7;8092:18;;;;;;;;;;;;;;;:51;;;;8179:7;8158:37;;8175:1;8158:37;;;8188:6;8158:37;;;;;;;;;;;;;;;;;;7832:370;;:::o;10701:92::-;;;;:::o;2690:175:0:-;2748:7;2767:9;2783:1;2779;:5;2767:17;;2807:1;2802;:6;;2794:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;2850:8;;;2690:175;;;;:::o;256:272:50:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461025857806370a08231146102bc57806395d89b4114610314578063a457c2d714610397578063a9059cbb146103fb578063dd62ed3e1461045f576100a9565b806306fdde03146100ae578063095ea7b31461013157806318160ddd1461019557806323b872dd146101b3578063313ce56714610237575b600080fd5b6100b66104d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f65780820151818401526020810190506100db565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561014757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610579565b60405180821515815260200191505060405180910390f35b61019d610597565b6040518082815260200191505060405180910390f35b61021f600480360360608110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105a1565b60405180821515815260200191505060405180910390f35b61023f61067a565b604051808260ff16815260200191505060405180910390f35b6102a46004803603604081101561026e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610691565b60405180821515815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610744565b6040518082815260200191505060405180910390f35b61031c61078c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061082e565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108fb565b60405180821515815260200191505060405180910390f35b6104c16004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610919565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058d610586610a28565b8484610a30565b6001905092915050565b6000600254905090565b60006105ae848484610c27565b61066f846105ba610a28565b61066a8560405180606001604052806028815260200161101360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610620610a28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee89092919063ffffffff16565b610a30565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061073a61069e610a28565b8461073585600160006106af610a28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109a090919063ffffffff16565b610a30565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108f161083b610a28565b846108ec856040518060600160405280602581526020016110846025913960016000610865610a28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee89092919063ffffffff16565b610a30565b6001905092915050565b600061090f610908610a28565b8484610c27565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080828401905083811015610a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610fcb6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061103b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610fa86023913960400191505060405180910390fd5b610d3e838383610fa2565b610da981604051806060016040528060268152602001610fed602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e3c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109a090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610f95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f5a578082015181840152602081019050610f3f565b50505050905090810190601f168015610f875780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200ed35964f1faf5076927e5dff3fce5bd15cfd335a8c6df75350ff7609a95e31a64736f6c63430007060033","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 0x258 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3FB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x45F JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x237 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x4D7 JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0xF6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xDB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x123 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 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19D PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x21F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x23F PUSH2 0x67A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x31C PUSH2 0x78C JUMP JUMPDEST PUSH1 0x40 MLOAD 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 0x35C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x341 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x389 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 0x3E3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x447 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x919 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x56F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x544 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x56F 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 0x552 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x58D PUSH2 0x586 PUSH2 0xA28 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5AE DUP5 DUP5 DUP5 PUSH2 0xC27 JUMP JUMPDEST PUSH2 0x66F DUP5 PUSH2 0x5BA PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x66A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1013 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x620 PUSH2 0xA28 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xEE8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x73A PUSH2 0x69E PUSH2 0xA28 JUMP JUMPDEST DUP5 PUSH2 0x735 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x6AF PUSH2 0xA28 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x9A0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x824 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x824 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 0x807 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F1 PUSH2 0x83B PUSH2 0xA28 JUMP JUMPDEST DUP5 PUSH2 0x8EC DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1084 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x865 PUSH2 0xA28 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xEE8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x90F PUSH2 0x908 PUSH2 0xA28 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xC27 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xA1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xAB6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1060 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xB3C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFCB PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xCAD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x103B PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFA8 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD3E DUP4 DUP4 DUP4 PUSH2 0xFA2 JUMP JUMPDEST PUSH2 0xDA9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFED PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0xEE8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0xE3C DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x9A0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 GT ISZERO DUP3 SWAP1 PUSH2 0xF95 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 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 0xF5A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xF3F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF87 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 DUP3 DUP5 SUB SWAP1 POP 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 0x73582212200ED3 MSIZE PUSH5 0xF1FAF50769 0x27 0xE5 0xDF RETURN 0xFC 0xE5 0xBD ISZERO 0xCF 0xD3 CALLDATALOAD 0xA8 0xC6 0xDF PUSH22 0x350FF7609A95E31A64736F6C63430007060033000000 ","sourceMap":"256:272:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:89:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4244:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3235:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4877:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3086:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5589:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3399:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2370:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6291:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3727:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3957:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2168:89;2213:13;2245:5;2238:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:89;:::o;4244:166::-;4327:4;4343:39;4352:12;:10;:12::i;:::-;4366:7;4375:6;4343:8;:39::i;:::-;4399:4;4392:11;;4244:166;;;;:::o;3235:106::-;3296:7;3322:12;;3315:19;;3235:106;:::o;4877:317::-;4983:4;4999:36;5009:6;5017:9;5028:6;4999:9;:36::i;:::-;5045:121;5054:6;5062:12;:10;:12::i;:::-;5076:89;5114:6;5076:89;;;;;;;;;;;;;;;;;:11;:19;5088:6;5076:19;;;;;;;;;;;;;;;:33;5096:12;:10;:12::i;:::-;5076:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5045:8;:121::i;:::-;5183:4;5176:11;;4877:317;;;;;:::o;3086:89::-;3135:5;3159:9;;;;;;;;;;;3152:16;;3086:89;:::o;5589:215::-;5677:4;5693:83;5702:12;:10;:12::i;:::-;5716:7;5725:50;5764:10;5725:11;:25;5737:12;:10;:12::i;:::-;5725:25;;;;;;;;;;;;;;;:34;5751:7;5725:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5693:8;:83::i;:::-;5793:4;5786:11;;5589:215;;;;:::o;3399:125::-;3473:7;3499:9;:18;3509:7;3499:18;;;;;;;;;;;;;;;;3492:25;;3399:125;;;:::o;2370:93::-;2417:13;2449:7;2442:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2370:93;:::o;6291:266::-;6384:4;6400:129;6409:12;:10;:12::i;:::-;6423:7;6432:96;6471:15;6432:96;;;;;;;;;;;;;;;;;:11;:25;6444:12;:10;:12::i;:::-;6432:25;;;;;;;;;;;;;;;:34;6458:7;6432:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6400:8;:129::i;:::-;6546:4;6539:11;;6291:266;;;;:::o;3727:172::-;3813:4;3829:42;3839:12;:10;:12::i;:::-;3853:9;3864:6;3829:9;:42::i;:::-;3888:4;3881:11;;3727:172;;;;:::o;3957:149::-;4046:7;4072:11;:18;4084:5;4072:18;;;;;;;;;;;;;;;:27;4091:7;4072:27;;;;;;;;;;;;;;;;4065:34;;3957:149;;;;:::o;2690:175:0:-;2748:7;2767:9;2783:1;2779;:5;2767:17;;2807:1;2802;:6;;2794:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;2850:8;;;2690:175;;;;:::o;598:104:6:-;651:15;685:10;678:17;;598:104;:::o;9355:340:3:-;9473:1;9456:19;;:5;:19;;;;9448:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9553:1;9534:21;;:7;:21;;;;9526:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9635:6;9605:11;:18;9617:5;9605:18;;;;;;;;;;;;;;;:27;9624:7;9605:27;;;;;;;;;;;;;;;:36;;;;9672:7;9656:32;;9665:5;9656:32;;;9681:6;9656:32;;;;;;;;;;;;;;;;;;9355:340;;;:::o;7031:530::-;7154:1;7136:20;;:6;:20;;;;7128:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7237:1;7216:23;;:9;:23;;;;7208:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7290:47;7311:6;7319:9;7330:6;7290:20;:47::i;:::-;7368:71;7390:6;7368:71;;;;;;;;;;;;;;;;;:9;:17;7378:6;7368:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7348:9;:17;7358:6;7348:17;;;;;;;;;;;;;;;:91;;;;7472:32;7497:6;7472:9;:20;7482:9;7472:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7449:9;:20;7459:9;7449:20;;;;;;;;;;;;;;;:55;;;;7536:9;7519:35;;7528:6;7519:35;;;7547:6;7519:35;;;;;;;;;;;;;;;;;;7031:530;;;:::o;5432:163:0:-;5518:7;5550:1;5545;:6;;5553:12;5537:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:1;5583;:5;5576:12;;5432:163;;;;;:::o;10701:92:3:-;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"863600","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"1431","approve(address,uint256)":"infinite","balanceOf(address)":"1218","decimals()":"1144","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"1058","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","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"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\":[],\"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\":\"This contract is an ERC20 token contract that extends the OpenZeppelin ERC20 contract.\",\"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\":\"Constructor that sets the name and symbol of the token and mints an initial supply to the contract deployer.\"},\"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`.\"}},\"title\":\"ERC20Token\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ERC20Token.sol\":\"ERC20Token\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        uint256 c = a + b;\\n        if (c < a) return (false, 0);\\n        return (true, c);\\n    }\\n\\n    /**\\n     * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b > a) return (false, 0);\\n        return (true, a - b);\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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) return (true, 0);\\n        uint256 c = a * b;\\n        if (c / a != b) return (false, 0);\\n        return (true, c);\\n    }\\n\\n    /**\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b == 0) return (false, 0);\\n        return (true, a / b);\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        if (b == 0) return (false, 0);\\n        return (true, a % b);\\n    }\\n\\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        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        require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n        return a - b;\\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        if (a == 0) return 0;\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers, reverting 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        require(b > 0, \\\"SafeMath: division by zero\\\");\\n        return a / b;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * reverting 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        require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n        return a % b;\\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     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {trySub}.\\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        return a - b;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {tryDiv}.\\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        return a / b;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * reverting with custom message when dividing by zero.\\n     *\\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\\n     * message unnecessarily. For custom revert reasons use {tryMod}.\\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\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../utils/Context.sol\\\";\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"../../math/SafeMath.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\\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_) public {\\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 virtual 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 virtual 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 virtual returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual 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     *\\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 virtual {\\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\":\"0xca0c2396dbeb3503b51abf4248ebf77a1461edad513c01529df51850a012bee3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.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\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/test/ERC20Token.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\n/**\\n * @title ERC20Token\\n * @dev This contract is an ERC20 token contract that extends the OpenZeppelin ERC20 contract.\\n */\\ncontract ERC20Token is ERC20 {\\n    /**\\n     * @dev Constructor that sets the name and symbol of the token and mints an initial supply to the contract deployer.\\n     */\\n    constructor() public ERC20(\\\"TestToken\\\", \\\"TT\\\") {\\n        _mint(msg.sender, 1000000000000000);\\n    }\\n}\\n\",\"keccak256\":\"0x2ba37ea2dfa7f50fb3a20c78c185453c2322fa6101be50fbb078a55a9e65644d\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[{"astId":530,"contract":"contracts/test/ERC20Token.sol:ERC20Token","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":536,"contract":"contracts/test/ERC20Token.sol:ERC20Token","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":538,"contract":"contracts/test/ERC20Token.sol:ERC20Token","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":540,"contract":"contracts/test/ERC20Token.sol:ERC20Token","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":542,"contract":"contracts/test/ERC20Token.sol:ERC20Token","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":544,"contract":"contracts/test/ERC20Token.sol:ERC20Token","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}}},"contracts/test/TestHandler.sol":{"TestHandler":{"abi":[{"inputs":[],"name":"dudududu","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"manager","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"dudududu()":{"returns":{"manager":"The manager address","sender":"The sender address"}}},"title":"TestHandler - A test FallbackHandler contract","version":1},"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060e08061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806354955e5914602d575b600080fd5b6033607c565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b60008060856093565b608b60a2565b915091509091565b6000601436033560601c905090565b60003390509056fea264697066735822122021fb3c161bfe0c5efb51c7730db8421d3b79730ac0063c81afb04c4653d005ec64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP1 PUSH2 0x1F 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 0x54955E59 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x7C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x85 PUSH1 0x93 JUMP JUMPDEST PUSH1 0x8B PUSH1 0xA2 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 CALLDATASIZE SUB CALLDATALOAD PUSH1 0x60 SHR SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x21 0xFB EXTCODECOPY AND SHL INVALID 0xC 0x5E 0xFB MLOAD 0xC7 PUSH20 0xDB8421D3B79730AC0063C81AFB04C4653D005EC PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"180:358:52:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c806354955e5914602d575b600080fd5b6033607c565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b60008060856093565b608b60a2565b915091509091565b6000601436033560601c905090565b60003390509056fea264697066735822122021fb3c161bfe0c5efb51c7730db8421d3b79730ac0063c81afb04c4653d005ec64736f6c63430007060033","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 0x54955E59 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x7C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x85 PUSH1 0x93 JUMP JUMPDEST PUSH1 0x8B PUSH1 0xA2 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 CALLDATASIZE SUB CALLDATALOAD PUSH1 0x60 SHR SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x21 0xFB EXTCODECOPY AND SHL INVALID 0xC 0x5E 0xFB MLOAD 0xC7 PUSH20 0xDB8421D3B79730AC0063C81AFB04C4653D005EC PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"180:358:52:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;410:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;453:14;469:15;504:12;:10;:12::i;:::-;518:10;:8;:10::i;:::-;496:33;;;;410:126;;:::o;1053:312:29:-;1098:14;1344:2;1328:14;1324:23;1311:37;1307:2;1303:46;1293:56;;1279:80;:::o;1478:86::-;1521:7;1547:10;1540:17;;1478:86;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"44800","executionCost":"93","totalCost":"44893"},"external":{"dudududu()":"320"}},"methodIdentifiers":{"dudududu()":"54955e59"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"dudududu\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"dudududu()\":{\"returns\":{\"manager\":\"The manager address\",\"sender\":\"The sender address\"}}},\"title\":\"TestHandler - A test FallbackHandler contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"dudududu()\":{\"notice\":\"Returns the sender and manager address provided by the HandlerContext\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestHandler.sol\":\"TestHandler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/handler/HandlerContext.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/**\\n * @title Handler Context - Allows the fallback handler to extract addition context from the calldata\\n * @dev The fallback manager appends the following context to the calldata:\\n *      1. Fallback manager caller address (non-padded)\\n * based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/f8cc8b844a9f92f63dc55aa581f7d643a1bc5ac1/contracts/metatx/ERC2771Context.sol\\n * @author Richard Meissner - @rmeissner\\n */\\nabstract contract HandlerContext {\\n    /**\\n     * @notice Allows fetching the original caller address.\\n     * @dev This is only reliable in combination with a FallbackManager that supports this (e.g. Safe contract >=1.3.0).\\n     *      When using this functionality make sure that the linked _manager (aka msg.sender) supports this.\\n     *      This function does not rely on a trusted forwarder. Use the returned value only to\\n     *      check information against the calling manager.\\n     * @return sender Original caller address.\\n     */\\n    function _msgSender() internal pure returns (address sender) {\\n        // The assembly code is more direct than the Solidity version using `abi.decode`.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sender := shr(96, calldataload(sub(calldatasize(), 20)))\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the FallbackManager address\\n     * @return Fallback manager address\\n     */\\n    function _manager() internal view returns (address) {\\n        return msg.sender;\\n    }\\n}\\n\",\"keccak256\":\"0xce6da4c47f8691a4fcf07d20266b1a23ea757e49eedbfcf929f535f3f6e8072d\",\"license\":\"LGPL-3.0-only\"},\"contracts/test/TestHandler.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\nimport \\\"../handler/HandlerContext.sol\\\";\\n\\n/**\\n * @title TestHandler - A test FallbackHandler contract\\n */\\ncontract TestHandler is HandlerContext {\\n    /**\\n     * @notice Returns the sender and manager address provided by the HandlerContext\\n     * @return sender The sender address\\n     * @return manager The manager address\\n     */\\n    function dudududu() external view returns (address sender, address manager) {\\n        return (_msgSender(), _manager());\\n    }\\n}\\n\",\"keccak256\":\"0xf761507e537707c0222fe2deb89f31c17d04c030c77977efe13a40443f54d0ea\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"dudududu()":{"notice":"Returns the sender and manager address provided by the HandlerContext"}},"version":1}}}}}}