Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 12,061 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 16591022 | 652 days ago | IN | 0 ETH | 0.00260883 | ||||
Mint | 16506236 | 664 days ago | IN | 0 ETH | 0.0048684 | ||||
Mint | 16499508 | 665 days ago | IN | 0 ETH | 0.01054201 | ||||
Mint | 16464373 | 670 days ago | IN | 0 ETH | 0.00677081 | ||||
Mint | 16397286 | 680 days ago | IN | 0 ETH | 0.00244479 | ||||
Mint | 16397271 | 680 days ago | IN | 0 ETH | 0.00234687 | ||||
Mint | 16397260 | 680 days ago | IN | 0 ETH | 0.00250749 | ||||
Mint | 16394361 | 680 days ago | IN | 0 ETH | 0.00297467 | ||||
Mint | 16393768 | 680 days ago | IN | 0 ETH | 0.00386017 | ||||
Mint | 16393284 | 680 days ago | IN | 0 ETH | 0.00527572 | ||||
Mint | 16392660 | 680 days ago | IN | 0 ETH | 0.00572005 | ||||
Mint | 16392651 | 680 days ago | IN | 0 ETH | 0.00510166 | ||||
Mint | 16392641 | 680 days ago | IN | 0 ETH | 0.00541086 | ||||
Mint | 16392621 | 680 days ago | IN | 0 ETH | 0.00504828 | ||||
Mint | 16297542 | 693 days ago | IN | 0 ETH | 0.00392531 | ||||
Mint | 16249395 | 700 days ago | IN | 0 ETH | 0.00536942 | ||||
Mint | 16247981 | 700 days ago | IN | 0 ETH | 0.00312993 | ||||
Mint | 16235523 | 702 days ago | IN | 0 ETH | 0.00352404 | ||||
Mint | 16226143 | 703 days ago | IN | 0 ETH | 0.00424738 | ||||
Mint | 16188713 | 709 days ago | IN | 0 ETH | 0.00398619 | ||||
Mint | 16140341 | 715 days ago | IN | 0 ETH | 0.00200588 | ||||
Mint | 16140319 | 715 days ago | IN | 0 ETH | 0.00320715 | ||||
Mint | 16027674 | 731 days ago | IN | 0 ETH | 0.00429191 | ||||
Mint | 15996376 | 736 days ago | IN | 0 ETH | 0.00408742 | ||||
Mint | 15979540 | 738 days ago | IN | 0 ETH | 0.00259518 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UserProxy
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 7500 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./interfaces/IERC20.sol"; import "./interfaces/IERC20Permit.sol"; import "./interfaces/ITranche.sol"; import "./interfaces/IWETH.sol"; import "./interfaces/IWrappedPosition.sol"; import "./libraries/Authorizable.sol"; /// @author Element Finance /// @title User Proxy contract UserProxy is Authorizable { // This contract is a convenience library to consolidate // the actions needed to create interest or principal tokens to one call. // It will hold user allowances, and can be disabled by authorized addresses // for security. // If frozen users still control their own tokens so can manually redeem them. // Store the accessibility state of the contract bool public isFrozen = false; // Constant wrapped ether address IWETH public immutable weth; // Tranche factory address for Tranche contract address derivation address internal immutable _trancheFactory; // Tranche bytecode hash for Tranche contract address derivation. // This is constant as long as Tranche does not implement non-constant constructor arguments. bytes32 internal immutable _trancheBytecodeHash; // A constant which represents ether address internal constant _ETH_CONSTANT = address( 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE ); /// @dev Marks the msg.sender as authorized and sets them /// as the owner in authorization library /// @param _weth The constant weth contract address /// @param __trancheFactory Address of the TrancheFactory contract /// @param __trancheBytecodeHash Hash of the Tranche bytecode. constructor( IWETH _weth, address __trancheFactory, bytes32 __trancheBytecodeHash ) Authorizable() { _authorize(msg.sender); weth = _weth; _trancheFactory = __trancheFactory; _trancheBytecodeHash = __trancheBytecodeHash; } /// @dev Requires that the contract is not frozen modifier notFrozen() { require(!isFrozen, "Contract frozen"); _; } /// @dev Allows an authorized address to freeze or unfreeze this contract /// @param _newState True for frozen and false for unfrozen function setIsFrozen(bool _newState) external onlyAuthorized() { isFrozen = _newState; } // Memory encoding of the permit data struct PermitData { IERC20Permit tokenContract; address who; uint256 amount; uint256 expiration; bytes32 r; bytes32 s; uint8 v; } /// @dev Takes the input permit calls and executes them /// @param data The array which encodes the set of permit calls to make modifier preApproval(PermitData[] memory data) { // If permit calls are provided we make try to make them if (data.length != 0) { // We make permit calls for each indicated call for (uint256 i = 0; i < data.length; i++) { _permitCall(data[i]); } } _; } /// @dev Makes permit calls indicated by a struct /// @param data the struct which has the permit calldata function _permitCall(PermitData memory data) internal { // Make the permit call to the token in the data field using // the fields provided. // Security note - This fairly open call is safe because it cannot // call 'transferFrom' or other sensitive methods despite the open // scope. Do not make more general without security review. data.tokenContract.permit( msg.sender, data.who, data.amount, data.expiration, data.v, data.r, data.s ); } /// @notice Mints a Principal/Interest token pair from either underlying token or Eth /// then returns the tokens to the caller. /// @dev This function assumes that it already has an allowance for the token in question. /// @param _amount The amount of underlying to turn into tokens /// @param _underlying Either (1) The underlying ERC20 token contract /// or (2) the _ETH_CONSTANT to indicate the user has sent eth. /// This token should revert in the event of a transfer failure. /// @param _expiration The expiration time of the Tranche contract /// @param _position The contract which manages pooled deposits /// @param _permitCallData Encoded array of permit calls to make prior to minting /// the data should be encoded with abi.encode(data, "PermitData[]") /// each PermitData struct provided will be executed as a call. /// An example use of this is if using a token with permit like USDC /// to encode a permit which gives this contract allowance before minting. /// @return returns the minted amounts of PT and YT // NOTE - It is critical that the notFrozen modifier is listed first so it gets called first. function mint( uint256 _amount, IERC20 _underlying, uint256 _expiration, address _position, PermitData[] calldata _permitCallData ) external payable notFrozen() preApproval(_permitCallData) returns (uint256, uint256) { // If the underlying token matches this predefined 'ETH token' // then we create weth for the user and go from there if (address(_underlying) == _ETH_CONSTANT) { // Check that the amount matches the amount provided require(msg.value == _amount, "Incorrect amount provided"); // Create weth from the provided eth weth.deposit{ value: msg.value }(); weth.transfer(address(_position), _amount); } else { // Check for the fact that this branch should not be payable require(msg.value == 0, "Non payable"); // Move the user's funds to the wrapped position contract _underlying.transferFrom(msg.sender, address(_position), _amount); } // Proceed to internal minting steps (uint256 ptMinted, uint256 ytMinted) = _mint(_expiration, _position); // This sanity check ensure that at least as much was minted as was transferred require(ytMinted >= _amount, "Not enough minted"); return (ptMinted, ytMinted); } /// @dev Allows a user to withdraw and unwrap weth in the same transaction /// likely quite a bit more expensive than direct unwrapping but useful /// for those who want to do one tx instead of two /// @param _expiration The tranche expiration time /// @param _position The contract which interacts with the yield bearing strategy /// @param _amountPT The amount of principal token to withdraw /// @param _amountYT The amount of yield token to withdraw. /// @param _permitCallData Encoded array of permit calls to make prior to withdrawing, /// should be used to get allowances for PT and YT // NOTE - It is critical that the notFrozen modifier is listed first so it gets called first. function withdrawWeth( uint256 _expiration, address _position, uint256 _amountPT, uint256 _amountYT, PermitData[] calldata _permitCallData ) external notFrozen() preApproval(_permitCallData) { // Post the Berlin hardfork this call warms the address so only cost ~100 gas overall require(IWrappedPosition(_position).token() == weth, "Non weth token"); // Only allow access if the user is actually attempting to withdraw require(((_amountPT != 0) || (_amountYT != 0)), "Invalid withdraw"); // Because of create2 we know this code is exactly what is expected. ITranche derivedTranche = _deriveTranche(_position, _expiration); uint256 wethReceivedPt = 0; uint256 wethReceivedYt = 0; // Check if we need to withdraw principal token if (_amountPT != 0) { // If we have to withdraw PT first transfer it to this contract derivedTranche.transferFrom(msg.sender, address(this), _amountPT); // Then we withdraw that PT with the resulting weth going to this address wethReceivedPt = derivedTranche.withdrawPrincipal( _amountPT, address(this) ); } // Check if we need to withdraw yield token if (_amountYT != 0) { // Post Berlin this lookup only costs 100 gas overall as well IERC20Permit yieldToken = derivedTranche.interestToken(); // Transfer the YT to this contract yieldToken.transferFrom(msg.sender, address(this), _amountYT); // Withdraw that YT wethReceivedYt = derivedTranche.withdrawInterest( _amountYT, address(this) ); } // A sanity check that some value was withdrawn if (_amountPT != 0) { require((wethReceivedPt != 0), "Rugged"); } if (_amountYT != 0) { require((wethReceivedYt != 0), "No yield accrued"); } // Withdraw the ether from weth weth.withdraw(wethReceivedPt + wethReceivedYt); // Send the withdrawn eth to the caller payable(msg.sender).transfer(wethReceivedPt + wethReceivedYt); } /// @dev The receive function allows WETH and only WETH to send /// eth directly to this contract. Note - It Cannot be assumed /// that this will prevent this contract from having an ETH balance receive() external payable { require(msg.sender == address(weth)); } /// @dev This internal mint function performs the core minting logic after /// the contract has already transferred to WrappedPosition contract /// @param _expiration The tranche expiration time /// @param _position The contract which interacts with the yield bearing strategy /// @return the principal token yield token returned function _mint(uint256 _expiration, address _position) internal returns (uint256, uint256) { // Use create2 to derive the tranche contract ITranche tranche = _deriveTranche(address(_position), _expiration); // Move funds into the Tranche contract // it will credit the msg.sender with the new tokens return tranche.prefundedDeposit(msg.sender); } /// @dev This internal function produces the deterministic create2 /// address of the Tranche contract from a wrapped position contract and expiration /// @param _position The wrapped position contract address /// @param _expiration The expiration time of the tranche /// @return The derived Tranche contract function _deriveTranche(address _position, uint256 _expiration) internal virtual view returns (ITranche) { bytes32 salt = keccak256(abi.encodePacked(_position, _expiration)); bytes32 addressBytes = keccak256( abi.encodePacked( bytes1(0xff), _trancheFactory, salt, _trancheBytecodeHash ) ); return ITranche(address(uint160(uint256(addressBytes)))); } /// @dev This contract holds a number of allowances for addresses so if it is deprecated /// it should be removed so that users do not have to remove allowances. /// Note - onlyOwner is a stronger check than onlyAuthorized, many addresses can be /// authorized to freeze or unfreeze the contract but only the owner address can kill function deprecate() external onlyOwner() { selfdestruct(payable(msg.sender)); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; interface IERC20 { function symbol() external view returns (string memory); function balanceOf(address account) external view returns (uint256); // Note this is non standard but nearly all ERC20 have exposed decimal functions function decimals() external view returns (uint8); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); }
// Forked from openzepplin // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit is IERC20 { /** * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens, * given `owner`'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20Permit.sol"; import "./IInterestToken.sol"; interface ITranche is IERC20Permit { function deposit(uint256 _shares, address destination) external returns (uint256, uint256); function prefundedDeposit(address _destination) external returns (uint256, uint256); function withdrawPrincipal(uint256 _amount, address _destination) external returns (uint256); function withdrawInterest(uint256 _amount, address _destination) external returns (uint256); function interestToken() external view returns (IInterestToken); function interestSupply() external view returns (uint128); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20.sol"; interface IWETH is IERC20 { function deposit() external payable; function withdraw(uint256 wad) external; event Deposit(address indexed dst, uint256 wad); event Withdrawal(address indexed src, uint256 wad); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20Permit.sol"; import "./IERC20.sol"; interface IWrappedPosition is IERC20Permit { function token() external view returns (IERC20); function balanceOfUnderlying(address who) external view returns (uint256); function getSharesToUnderlying(uint256 shares) external view returns (uint256); function deposit(address sender, uint256 amount) external returns (uint256); function withdraw( address sender, uint256 _shares, uint256 _minUnderlying ) external returns (uint256); function withdrawUnderlying( address _destination, uint256 _amount, uint256 _minUnderlying ) external returns (uint256, uint256); function prefundedDeposit(address _destination) external returns ( uint256, uint256, uint256 ); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.7.0; contract Authorizable { // This contract allows a flexible authorization scheme // The owner who can change authorization status address public owner; // A mapping from an address to its authorization status mapping(address => bool) public authorized; /// @dev We set the deployer to the owner constructor() { owner = msg.sender; } /// @dev This modifier checks if the msg.sender is the owner modifier onlyOwner() { require(msg.sender == owner, "Sender not owner"); _; } /// @dev This modifier checks if an address is authorized modifier onlyAuthorized() { require(isAuthorized(msg.sender), "Sender not Authorized"); _; } /// @dev Returns true if an address is authorized /// @param who the address to check /// @return true if authorized false if not function isAuthorized(address who) public view returns (bool) { return authorized[who]; } /// @dev Privileged function authorize an address /// @param who the address to authorize function authorize(address who) external onlyOwner() { _authorize(who); } /// @dev Privileged function to de authorize an address /// @param who The address to remove authorization from function deauthorize(address who) external onlyOwner() { authorized[who] = false; } /// @dev Function to change owner /// @param who The new owner address function setOwner(address who) public onlyOwner() { owner = who; } /// @dev Inheritable function which authorizes someone /// @param who the address to authorize function _authorize(address who) internal { authorized[who] = true; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20Permit.sol"; interface IInterestToken is IERC20Permit { function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; }
{ "optimizer": { "enabled": true, "runs": 7500 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IWETH","name":"_weth","type":"address"},{"internalType":"address","name":"__trancheFactory","type":"address"},{"internalType":"bytes32","name":"__trancheBytecodeHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deprecate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"contract IERC20","name":"_underlying","type":"address"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_position","type":"address"},{"components":[{"internalType":"contract IERC20Permit","name":"tokenContract","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct UserProxy.PermitData[]","name":"_permitCallData","type":"tuple[]"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_newState","type":"bool"}],"name":"setIsFrozen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_position","type":"address"},{"internalType":"uint256","name":"_amountPT","type":"uint256"},{"internalType":"uint256","name":"_amountYT","type":"uint256"},{"components":[{"internalType":"contract IERC20Permit","name":"tokenContract","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct UserProxy.PermitData[]","name":"_permitCallData","type":"tuple[]"}],"name":"withdrawWeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526002805460ff191690553480156200001b57600080fd5b5060405162001a3538038062001a358339810160408190526200003e91620000a9565b600080546001600160a01b031916339081179091556200005e9062000082565b6001600160601b0319606093841b81166080529190921b1660a05260c05262000109565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600080600060608486031215620000be578283fd5b8351620000cb81620000f0565b6020850151909350620000de81620000f0565b80925050604084015190509250925092565b6001600160a01b03811681146200010657600080fd5b50565b60805160601c60a05160601c60c0516118d462000161600039600061101401526000610ff001526000818160e8015281816103e001528181610542015281816109f301528181610c480152610d0101526118d46000f3fe6080604052600436106100cb5760003560e01c80636f1ea24c11610074578063b841d2d21161004e578063b841d2d214610230578063b918161114610251578063fe9fbb801461027157610114565b80636f1ea24c146101db5780638da5cb5b146101fb578063b6a5d7de1461021057610114565b806333eeb147116100a557806333eeb1471461016e5780633fc8cef31461019957806364eda74b146101bb57610114565b80630fcc0c281461011957806313af40351461012e57806327c97fa51461014e57610114565b36610114573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461011257600080fd5b005b600080fd5b34801561012557600080fd5b50610112610291565b34801561013a57600080fd5b506101126101493660046111ec565b6102d4565b34801561015a57600080fd5b506101126101693660046111ec565b610352565b34801561017a57600080fd5b506101836103d5565b6040516101909190611582565b60405180910390f35b3480156101a557600080fd5b506101ae6103de565b60405161019091906114bc565b3480156101c757600080fd5b506101126101d636600461120f565b610402565b3480156101e757600080fd5b506101126101f6366004611333565b610458565b34801561020757600080fd5b506101ae610ab6565b34801561021c57600080fd5b5061011261022b3660046111ec565b610ad2565b61024361023e3660046113a4565b610b15565b6040516101909291906117e0565b34801561025d57600080fd5b5061018361026c3660046111ec565b610e9c565b34801561027d57600080fd5b5061018361028c3660046111ec565b610eb1565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d15760405162461bcd60e51b81526004016102c8906115c4565b60405180910390fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff16331461030b5760405162461bcd60e51b81526004016102c8906115c4565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103895760405162461bcd60e51b81526004016102c8906115c4565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b33610eb1565b6104275760405162461bcd60e51b81526004016102c8906115fb565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60025460ff161561047b5760405162461bcd60e51b81526004016102c89061177c565b8181808060200260200160405190810160405280939291908181526020016000905b828210156104c9576104ba60e08302860136819003810190611263565b8152602001906001019061049d565b505050505080516000146105405760005b815181101561053e5761052c82828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ee0565b8061053681611806565b9150506104da565b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190611247565b73ffffffffffffffffffffffffffffffffffffffff16146106285760405162461bcd60e51b81526004016102c890611669565b8415158061063557508315155b6106515760405162461bcd60e51b81526004016102c890611632565b600061065d8789610f76565b905060008087156107ba576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906106be90339030908d906004016114dd565b602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610710919061122b565b506040517f884e17f300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063884e17f390610765908b9030906004016117bc565b602060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b7919061131b565b91505b86156109965760008373ffffffffffffffffffffffffffffffffffffffff1663764b666c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080857600080fd5b505afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108409190611247565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd9061089990339030908d906004016114dd565b602060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb919061122b565b506040517f1210aac200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690631210aac290610940908b9030906004016117bc565b602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061131b565b9150505b87156109b957816109b95760405162461bcd60e51b81526004016102c8906116a0565b86156109dc57806109dc5760405162461bcd60e51b81526004016102c8906116d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632e1a7d4d610a2283856117ee565b6040518263ffffffff1660e01b8152600401610a3e91906117b3565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b503392506108fc9150610a81905083856117ee565b6040518115909202916000818181858888f19350505050158015610aa9573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b095760405162461bcd60e51b81526004016102c8906115c4565b610b1281611079565b50565b600254600090819060ff1615610b3d5760405162461bcd60e51b81526004016102c89061177c565b8383808060200260200160405190810160405280939291908181526020016000905b82821015610b8b57610b7c60e08302860136819003810190611263565b81526020019060010190610b5f565b50505050508051600014610bf55760005b8151811015610bf357610be182828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80610beb81611806565b915050610b9c565b505b73ffffffffffffffffffffffffffffffffffffffff881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610d9357883414610c465760405162461bcd60e51b81526004016102c890611745565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250610d3b915089908d9060040161155c565b602060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061122b565b50610e5b565b3415610db15760405162461bcd60e51b81526004016102c89061158d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8916906323b872dd90610e079033908a908e906004016114dd565b602060405180830381600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061122b565b505b600080610e6889896110cb565b915091508a811015610e8c5760405162461bcd60e51b81526004016102c89061170e565b909a909950975050505050505050565b60016020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff165b919050565b806000015173ffffffffffffffffffffffffffffffffffffffff1663d505accf338360200151846040015185606001518660c0015187608001518860a001516040518863ffffffff1660e01b8152600401610f41979695949392919061150e565b600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505050565b6000808383604051602001610f8c929190611423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290528051602091820120925060009161103a917fff00000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009186917f00000000000000000000000000000000000000000000000000000000000000009101611458565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052805160209091012095945050505050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60008060006110da8486610f76565b6040517f85f45c8800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906385f45c889061112f9033906004016114bc565b6040805180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611400565b92509250505b9250929050565b8035610edb8161186e565b60008083601f8401126111a9578182fd5b50813567ffffffffffffffff8111156111c0578182fd5b60208301915083602060e08302850101111561118657600080fd5b803560ff81168114610edb57600080fd5b6000602082840312156111fd578081fd5b81356112088161186e565b9392505050565b600060208284031215611220578081fd5b813561120881611890565b60006020828403121561123c578081fd5b815161120881611890565b600060208284031215611258578081fd5b81516112088161186e565b600060e08284031215611274578081fd5b60405160e0810181811067ffffffffffffffff821117156112bc577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b6040526112c88361118d565b81526112d66020840161118d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261130f60c084016111db565b60c08201529392505050565b60006020828403121561132c578081fd5b5051919050565b60008060008060008060a0878903121561134b578182fd5b86359550602087013561135d8161186e565b94506040870135935060608701359250608087013567ffffffffffffffff811115611386578283fd5b61139289828a01611198565b979a9699509497509295939492505050565b60008060008060008060a087890312156113bc578182fd5b8635955060208701356113ce8161186e565b94506040870135935060608701356113e58161186e565b9250608087013567ffffffffffffffff811115611386578283fd5b60008060408385031215611412578182fd5b505080516020909101519092909150565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6020808252600b908201527f4e6f6e2070617961626c65000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420776974686472617700000000000000000000000000000000604082015260600190565b6020808252600e908201527f4e6f6e207765746820746f6b656e000000000000000000000000000000000000604082015260600190565b60208082526006908201527f5275676765640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4e6f207969656c64206163637275656400000000000000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206d696e746564000000000000000000000000000000604082015260600190565b60208082526019908201527f496e636f727265637420616d6f756e742070726f766964656400000000000000604082015260600190565b6020808252600f908201527f436f6e74726163742066726f7a656e0000000000000000000000000000000000604082015260600190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b918252602082015260400190565b600082198211156118015761180161183f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118385761183861183f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b1257600080fd5b8015158114610b1257600080fdfea26469706673582212202a6013595f1f2bbde4be22920ab5b117ec00eb896d90b285f906d6e72567e74064736f6c63430008000033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
Deployed Bytecode
0x6080604052600436106100cb5760003560e01c80636f1ea24c11610074578063b841d2d21161004e578063b841d2d214610230578063b918161114610251578063fe9fbb801461027157610114565b80636f1ea24c146101db5780638da5cb5b146101fb578063b6a5d7de1461021057610114565b806333eeb147116100a557806333eeb1471461016e5780633fc8cef31461019957806364eda74b146101bb57610114565b80630fcc0c281461011957806313af40351461012e57806327c97fa51461014e57610114565b36610114573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461011257600080fd5b005b600080fd5b34801561012557600080fd5b50610112610291565b34801561013a57600080fd5b506101126101493660046111ec565b6102d4565b34801561015a57600080fd5b506101126101693660046111ec565b610352565b34801561017a57600080fd5b506101836103d5565b6040516101909190611582565b60405180910390f35b3480156101a557600080fd5b506101ae6103de565b60405161019091906114bc565b3480156101c757600080fd5b506101126101d636600461120f565b610402565b3480156101e757600080fd5b506101126101f6366004611333565b610458565b34801561020757600080fd5b506101ae610ab6565b34801561021c57600080fd5b5061011261022b3660046111ec565b610ad2565b61024361023e3660046113a4565b610b15565b6040516101909291906117e0565b34801561025d57600080fd5b5061018361026c3660046111ec565b610e9c565b34801561027d57600080fd5b5061018361028c3660046111ec565b610eb1565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d15760405162461bcd60e51b81526004016102c8906115c4565b60405180910390fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff16331461030b5760405162461bcd60e51b81526004016102c8906115c4565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103895760405162461bcd60e51b81526004016102c8906115c4565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60025460ff1681565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b61040b33610eb1565b6104275760405162461bcd60e51b81526004016102c8906115fb565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60025460ff161561047b5760405162461bcd60e51b81526004016102c89061177c565b8181808060200260200160405190810160405280939291908181526020016000905b828210156104c9576104ba60e08302860136819003810190611263565b8152602001906001019061049d565b505050505080516000146105405760005b815181101561053e5761052c82828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ee0565b8061053681611806565b9150506104da565b505b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190611247565b73ffffffffffffffffffffffffffffffffffffffff16146106285760405162461bcd60e51b81526004016102c890611669565b8415158061063557508315155b6106515760405162461bcd60e51b81526004016102c890611632565b600061065d8789610f76565b905060008087156107ba576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906106be90339030908d906004016114dd565b602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610710919061122b565b506040517f884e17f300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063884e17f390610765908b9030906004016117bc565b602060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b7919061131b565b91505b86156109965760008373ffffffffffffffffffffffffffffffffffffffff1663764b666c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080857600080fd5b505afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108409190611247565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd9061089990339030908d906004016114dd565b602060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb919061122b565b506040517f1210aac200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690631210aac290610940908b9030906004016117bc565b602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061131b565b9150505b87156109b957816109b95760405162461bcd60e51b81526004016102c8906116a0565b86156109dc57806109dc5760405162461bcd60e51b81526004016102c8906116d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216632e1a7d4d610a2283856117ee565b6040518263ffffffff1660e01b8152600401610a3e91906117b3565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b503392506108fc9150610a81905083856117ee565b6040518115909202916000818181858888f19350505050158015610aa9573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b095760405162461bcd60e51b81526004016102c8906115c4565b610b1281611079565b50565b600254600090819060ff1615610b3d5760405162461bcd60e51b81526004016102c89061177c565b8383808060200260200160405190810160405280939291908181526020016000905b82821015610b8b57610b7c60e08302860136819003810190611263565b81526020019060010190610b5f565b50505050508051600014610bf55760005b8151811015610bf357610be182828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80610beb81611806565b915050610b9c565b505b73ffffffffffffffffffffffffffffffffffffffff881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610d9357883414610c465760405162461bcd60e51b81526004016102c890611745565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216935063a9059cbb9250610d3b915089908d9060040161155c565b602060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061122b565b50610e5b565b3415610db15760405162461bcd60e51b81526004016102c89061158d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8916906323b872dd90610e079033908a908e906004016114dd565b602060405180830381600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061122b565b505b600080610e6889896110cb565b915091508a811015610e8c5760405162461bcd60e51b81526004016102c89061170e565b909a909950975050505050505050565b60016020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff165b919050565b806000015173ffffffffffffffffffffffffffffffffffffffff1663d505accf338360200151846040015185606001518660c0015187608001518860a001516040518863ffffffff1660e01b8152600401610f41979695949392919061150e565b600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505050565b6000808383604051602001610f8c929190611423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290528051602091820120925060009161103a917fff00000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c09186917ff481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d9101611458565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052805160209091012095945050505050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60008060006110da8486610f76565b6040517f85f45c8800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906385f45c889061112f9033906004016114bc565b6040805180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611400565b92509250505b9250929050565b8035610edb8161186e565b60008083601f8401126111a9578182fd5b50813567ffffffffffffffff8111156111c0578182fd5b60208301915083602060e08302850101111561118657600080fd5b803560ff81168114610edb57600080fd5b6000602082840312156111fd578081fd5b81356112088161186e565b9392505050565b600060208284031215611220578081fd5b813561120881611890565b60006020828403121561123c578081fd5b815161120881611890565b600060208284031215611258578081fd5b81516112088161186e565b600060e08284031215611274578081fd5b60405160e0810181811067ffffffffffffffff821117156112bc577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b6040526112c88361118d565b81526112d66020840161118d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261130f60c084016111db565b60c08201529392505050565b60006020828403121561132c578081fd5b5051919050565b60008060008060008060a0878903121561134b578182fd5b86359550602087013561135d8161186e565b94506040870135935060608701359250608087013567ffffffffffffffff811115611386578283fd5b61139289828a01611198565b979a9699509497509295939492505050565b60008060008060008060a087890312156113bc578182fd5b8635955060208701356113ce8161186e565b94506040870135935060608701356113e58161186e565b9250608087013567ffffffffffffffff811115611386578283fd5b60008060408385031215611412578182fd5b505080516020909101519092909150565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6020808252600b908201527f4e6f6e2070617961626c65000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420776974686472617700000000000000000000000000000000604082015260600190565b6020808252600e908201527f4e6f6e207765746820746f6b656e000000000000000000000000000000000000604082015260600190565b60208082526006908201527f5275676765640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4e6f207969656c64206163637275656400000000000000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206d696e746564000000000000000000000000000000604082015260600190565b60208082526019908201527f496e636f727265637420616d6f756e742070726f766964656400000000000000604082015260600190565b6020808252600f908201527f436f6e74726163742066726f7a656e0000000000000000000000000000000000604082015260600190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b918252602082015260400190565b600082198211156118015761180161183f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118385761183861183f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b1257600080fd5b8015158114610b1257600080fdfea26469706673582212202a6013595f1f2bbde4be22920ab5b117ec00eb896d90b285f906d6e72567e74064736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : __trancheFactory (address): 0x62F161BF3692E4015BefB05A03a94A40f520d1c0
Arg [2] : __trancheBytecodeHash (bytes32): 0xf481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 00000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0
Arg [2] : f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.