Token Spintop
Polygon Sponsored slots available. Book your slot here!
Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
14,057,985.556271 SPIN
Holders:
141 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AnyswapV6ERC20
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.2; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function balanceOf(address account) external view returns (uint256); 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); } /** * @dev Interface of the ERC2612 standard as defined in the EIP. * * Adds the {permit} method, which can be used to change one's * {IERC20-allowance} without having to send a transaction, by signing a * message. This allows users to spend tokens without having to hold Ether. * * See https://eips.ethereum.org/EIPS/eip-2612. */ interface IERC2612 { /** * @dev Returns the current ERC2612 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); function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool); } /// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can /// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the /// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet. interface IAnyswapV3ERC20 is IERC20, IERC2612 { /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token, /// after which a call is executed to an ERC677-compliant contract with the `data` parameter. /// Emits {Approval} event. /// Returns boolean value indicating whether operation succeeded. /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677. function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`), /// after which a call is executed to an ERC677-compliant contract with the `data` parameter. /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller. /// Emits {Transfer} event. /// Returns boolean value indicating whether operation succeeded. /// Requirements: /// - caller account must have at least `value` AnyswapV3ERC20 token. /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677. function transferAndCall(address to, uint value, bytes calldata data) external returns (bool); } interface ITransferReceiver { function onTokenTransfer(address, uint, bytes calldata) external returns (bool); } interface IApprovalReceiver { function onTokenApproval(address, uint, bytes calldata) external returns (bool); } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function callOptionalReturn(IERC20 token, bytes memory data) private { require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } contract AnyswapV6ERC20 is IAnyswapV3ERC20 { using SafeERC20 for IERC20; string public name; string public symbol; uint8 public immutable override decimals; address public immutable underlying; bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public immutable DOMAIN_SEPARATOR; /// @dev Records amount of AnyswapV3ERC20 token owned by account. mapping (address => uint256) public override balanceOf; uint256 private _totalSupply; // init flag for setting immediate vault, needed for CREATE2 support bool private _init; // flag to enable/disable swapout vs vault.burn so multiple events are triggered bool private _vaultOnly; // configurable delay for timelock functions uint public delay = 2*24*3600; // set of minters, can be this bridge or other bridges mapping(address => bool) public isMinter; address[] public minters; // primary controller of the token contract address public vault; address public pendingMinter; uint public delayMinter; address public pendingVault; uint public delayVault; modifier onlyAuth() { require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN"); _; } modifier onlyVault() { require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN"); _; } function owner() public view returns (address) { return mpc(); } function mpc() public view returns (address) { if (block.timestamp >= delayVault) { return pendingVault; } return vault; } function setVaultOnly(bool enabled) external onlyVault { _vaultOnly = enabled; } function initVault(address _vault) external onlyVault { require(_init); vault = _vault; pendingVault = _vault; isMinter[_vault] = true; minters.push(_vault); delayVault = block.timestamp; _init = false; } function setVault(address _vault) external onlyVault { require(_vault != address(0), "AnyswapV3ERC20: address(0x0)"); pendingVault = _vault; delayVault = block.timestamp + delay; } function applyVault() external onlyVault { require(block.timestamp >= delayVault); vault = pendingVault; } function setMinter(address _auth) external onlyVault { require(_auth != address(0), "AnyswapV3ERC20: address(0x0)"); pendingMinter = _auth; delayMinter = block.timestamp + delay; } function applyMinter() external onlyVault { require(block.timestamp >= delayMinter); isMinter[pendingMinter] = true; minters.push(pendingMinter); } // No time delay revoke minter emergency function function revokeMinter(address _auth) external onlyVault { isMinter[_auth] = false; } function getAllMinters() external view returns (address[] memory) { return minters; } function changeVault(address newVault) external onlyVault returns (bool) { require(newVault != address(0), "AnyswapV3ERC20: address(0x0)"); vault = newVault; pendingVault = newVault; emit LogChangeVault(vault, pendingVault, block.timestamp); return true; } function mint(address to, uint256 amount) external onlyAuth returns (bool) { _mint(to, amount); return true; } function burn(address from, uint256 amount) external onlyAuth returns (bool) { require(from != address(0), "AnyswapV3ERC20: address(0x0)"); _burn(from, amount); return true; } function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) { _mint(account, amount); emit LogSwapin(txhash, account, amount); return true; } function Swapout(uint256 amount, address bindaddr) public returns (bool) { require(!_vaultOnly, "AnyswapV4ERC20: onlyAuth"); require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)"); _burn(msg.sender, amount); emit LogSwapout(msg.sender, bindaddr, amount); return true; } /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}. /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times. mapping (address => uint256) public override nonces; /// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}. mapping (address => mapping (address => uint256)) public override allowance; event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime); event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount); event LogSwapout(address indexed account, address indexed bindaddr, uint amount); constructor(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault) { name = _name; symbol = _symbol; decimals = _decimals; underlying = _underlying; if (_underlying != address(0x0)) { require(_decimals == IERC20(_underlying).decimals()); } // Use init to allow for CREATE2 accross all chains _init = true; // Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens _vaultOnly = false; vault = _vault; pendingVault = _vault; delayVault = block.timestamp; uint256 chainId; assembly {chainId := chainid()} DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256(bytes("1")), chainId, address(this))); } /// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract. function totalSupply() external view override returns (uint256) { return _totalSupply; } function deposit() external returns (uint) { uint _amount = IERC20(underlying).balanceOf(msg.sender); IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount); return _deposit(_amount, msg.sender); } function deposit(uint amount) external returns (uint) { IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount); return _deposit(amount, msg.sender); } function deposit(uint amount, address to) external returns (uint) { IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount); return _deposit(amount, to); } function depositVault(uint amount, address to) external onlyVault returns (uint) { return _deposit(amount, to); } function _deposit(uint amount, address to) internal returns (uint) { require(underlying != address(0x0) && underlying != address(this)); _mint(to, amount); return amount; } function withdraw() external returns (uint) { return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender); } function withdraw(uint amount) external returns (uint) { return _withdraw(msg.sender, amount, msg.sender); } function withdraw(uint amount, address to) external returns (uint) { return _withdraw(msg.sender, amount, to); } function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) { return _withdraw(from, amount, to); } function _withdraw(address from, uint amount, address to) internal returns (uint) { _burn(from, amount); IERC20(underlying).safeTransfer(to, amount); return amount; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; balanceOf[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); balanceOf[account] -= amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token. /// Emits {Approval} event. /// Returns boolean value indicating whether operation succeeded. function approve(address spender, uint256 value) external override returns (bool) { // _approve(msg.sender, spender, value); allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token, /// after which a call is executed to an ERC677-compliant contract with the `data` parameter. /// Emits {Approval} event. /// Returns boolean value indicating whether operation succeeded. /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677. function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) { // _approve(msg.sender, spender, value); allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data); } /// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval. /// Emits {Approval} event. /// Requirements: /// - `deadline` must be timestamp in future. /// - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments. /// - the signature must use `owner` account's current nonce (see {nonces}). /// - the signer cannot be zero address and must be `owner` account. /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. /// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol. function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override { require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit"); bytes32 hashStruct = keccak256( abi.encode( PERMIT_TYPEHASH, target, spender, value, nonces[target]++, deadline)); require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s)); // _approve(owner, spender, value); allowance[target][spender] = value; emit Approval(target, spender, value); } function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) { require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit"); bytes32 hashStruct = keccak256( abi.encode( TRANSFER_TYPEHASH, target, to, value, nonces[target]++, deadline)); require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s)); require(to != address(0) || to != address(this)); uint256 balance = balanceOf[target]; require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance"); balanceOf[target] = balance - value; balanceOf[to] += value; emit Transfer(target, to, value); return true; } function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) { bytes32 hash = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, hashStruct)); address signer = ecrecover(hash, v, r, s); return (signer != address(0) && signer == target); } function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) { bytes32 hash = keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", DOMAIN_SEPARATOR, hashStruct)); address signer = ecrecover(hash, v, r, s); return (signer != address(0) && signer == target); } /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`). /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller. /// Emits {Transfer} event. /// Returns boolean value indicating whether operation succeeded. /// Requirements: /// - caller account must have at least `value` AnyswapV3ERC20 token. function transfer(address to, uint256 value) external override returns (bool) { require(to != address(0) || to != address(this)); uint256 balance = balanceOf[msg.sender]; require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance"); balanceOf[msg.sender] = balance - value; balanceOf[to] += value; emit Transfer(msg.sender, to, value); return true; } /// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism. /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`. /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller. /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`), /// unless allowance is set to `type(uint256).max` /// Emits {Transfer} event. /// Returns boolean value indicating whether operation succeeded. /// Requirements: /// - `from` account must have at least `value` balance of AnyswapV3ERC20 token. /// - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account. function transferFrom(address from, address to, uint256 value) external override returns (bool) { require(to != address(0) || to != address(this)); if (from != msg.sender) { // _decreaseAllowance(from, msg.sender, value); uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) { require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance"); uint256 reduced = allowed - value; allowance[from][msg.sender] = reduced; emit Approval(from, msg.sender, reduced); } } uint256 balance = balanceOf[from]; require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance"); balanceOf[from] = balance - value; balanceOf[to] += value; emit Transfer(from, to, value); return true; } /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`), /// after which a call is executed to an ERC677-compliant contract with the `data` parameter. /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller. /// Emits {Transfer} event. /// Returns boolean value indicating whether operation succeeded. /// Requirements: /// - caller account must have at least `value` AnyswapV3ERC20 token. /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677. function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) { require(to != address(0) || to != address(this)); uint256 balance = balanceOf[msg.sender]; require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance"); balanceOf[msg.sender] = balance - value; balanceOf[to] += value; emit Transfer(msg.sender, to, value); return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","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":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"initVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","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"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040526202a3006005553480156200001857600080fd5b50604051620053753803806200537583398181016040528101906200003e91906200044e565b846000908051906020019062000056929190620002fe565b5083600190805190602001906200006f929190620002fe565b508260ff1660808160ff1660f81b815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000182578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200013457600080fd5b505afa15801562000149573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016f919062000502565b60ff168360ff16146200018157600080fd5b5b6001600460006101000a81548160ff0219169083151502179055506000600460016101000a81548160ff02191690831515021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600c8190555060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620002789190620005ec565b60405180910390206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001620002d595949392919062000605565b6040516020818303038152906040528051906020012060c081815250505050505050506200087b565b8280546200030c906200076c565b90600052602060002090601f0160209004810192826200033057600085556200037c565b82601f106200034b57805160ff19168380011785556200037c565b828001600101855582156200037c579182015b828111156200037b5782518255916020019190600101906200035e565b5b5090506200038b91906200038f565b5090565b5b80821115620003aa57600081600090555060010162000390565b5090565b6000620003c5620003bf846200068b565b62000662565b905082815260208101848484011115620003de57600080fd5b620003eb84828562000736565b509392505050565b600081519050620004048162000847565b92915050565b600082601f8301126200041c57600080fd5b81516200042e848260208601620003ae565b91505092915050565b600081519050620004488162000861565b92915050565b600080600080600060a086880312156200046757600080fd5b600086015167ffffffffffffffff8111156200048257600080fd5b62000490888289016200040a565b955050602086015167ffffffffffffffff811115620004ae57600080fd5b620004bc888289016200040a565b9450506040620004cf8882890162000437565b9350506060620004e288828901620003f3565b9250506080620004f588828901620003f3565b9150509295509295909350565b6000602082840312156200051557600080fd5b6000620005258482850162000437565b91505092915050565b6200053981620006e1565b82525050565b6200054a81620006f5565b82525050565b600081546200055f816200076c565b6200056b8186620006d6565b945060018216600081146200058957600181146200059b57620005d2565b60ff19831686528186019350620005d2565b620005a685620006c1565b60005b83811015620005ca57815481890152600182019150602081019050620005a9565b838801955050505b50505092915050565b620005e6816200071f565b82525050565b6000620005fa828462000550565b915081905092915050565b600060a0820190506200061c60008301886200053f565b6200062b60208301876200053f565b6200063a60408301866200053f565b620006496060830185620005db565b6200065860808301846200052e565b9695505050505050565b60006200066e62000681565b90506200067c8282620007a2565b919050565b6000604051905090565b600067ffffffffffffffff821115620006a957620006a862000807565b5b620006b48262000836565b9050602081019050919050565b60008190508160005260206000209050919050565b600081905092915050565b6000620006ee82620006ff565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200075657808201518184015260208101905062000739565b8381111562000766576000848401525b50505050565b600060028204905060018216806200078557607f821691505b602082108114156200079c576200079b620007d8565b5b50919050565b620007ad8262000836565b810181811067ffffffffffffffff82111715620007cf57620007ce62000807565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200085281620006e1565b81146200085e57600080fd5b50565b6200086c8162000729565b81146200087857600080fd5b50565b60805160f81c60a05160601c60c051614a85620008f06000396000818161141b0152818161318c01526132a2015260008181611fb8015281816120110152818161254301528181612911015281816129c201528181612ff0015281816135a001526135f7015260006113f70152614a856000f3fe608060405234801561001057600080fd5b50600436106102b85760003560e01c806370a0823111610182578063bebbf4d0116100e9578063d505accf116100a2578063ec126c771161007c578063ec126c771461094b578063f75c26641461097b578063fbfa77cf14610999578063fca3b5aa146109b7576102b8565b8063d505accf146108f5578063d93f244514610911578063dd62ed3e1461091b576102b8565b8063bebbf4d014610821578063c308124014610851578063c4b740f51461086f578063cae9ca511461088b578063cfbd4885146108bb578063d0e30db0146108d7576102b8565b806395d89b411161013b57806395d89b41146107255780639dc29fac14610743578063a045442c14610773578063a9059cbb14610791578063aa271e1a146107c1578063b6b55f25146107f1576102b8565b806370a082311461063b5780637ecebe001461066b5780638623ec7b1461069b57806387689e28146106cb5780638da5cb5b146106e957806391c5df4914610707576102b8565b80633644e5151161022657806360e232a9116101df57806360e232a914610553578063628d6cba146105835780636817031b146105b35780636a42b8f8146105cf5780636e553f65146105ed5780636f307dc31461061d576102b8565b80633644e515146104695780633ccfd60b146104875780634000aea0146104a557806340c10f19146104d557806352113ba714610505578063605629d614610523576102b8565b806318160ddd1161027857806318160ddd1461039357806323b872dd146103b15780632e1a7d4d146103e15780632ebe3fbb1461041157806330adf81f1461042d578063313ce5671461044b576102b8565b806239d6ec146102bd578062bf26f4146102ed578062f714ce1461030b57806306fdde031461033b578063095ea7b3146103595780630d707df814610389575b600080fd5b6102d760048036038101906102d29190613af8565b6109d3565b6040516102e4919061442a565b60405180910390f35b6102f5610a5e565b60405161030291906141c7565b60405180910390f35b61032560048036038101906103209190613ca6565b610a82565b604051610332919061442a565b60405180910390f35b610343610a97565b6040516103509190614288565b60405180910390f35b610373600480360381019061036e9190613abc565b610b25565b60405161038091906141ac565b60405180910390f35b610391610c17565b005b61039b610d9c565b6040516103a8919061442a565b60405180910390f35b6103cb60048036038101906103c691906139cf565b610da6565b6040516103d891906141ac565b60405180910390f35b6103fb60048036038101906103f69190613c54565b6111cd565b604051610408919061442a565b60405180910390f35b61042b6004803603810190610426919061396a565b6111e1565b005b6104356113d1565b60405161044291906141c7565b60405180910390f35b6104536113f5565b6040516104609190614445565b60405180910390f35b610471611419565b60405161047e91906141c7565b60405180910390f35b61048f61143d565b60405161049c919061442a565b60405180910390f35b6104bf60048036038101906104ba9190613b47565b61148e565b6040516104cc91906141ac565b60405180910390f35b6104ef60048036038101906104ea9190613abc565b61172d565b6040516104fc91906141ac565b60405180910390f35b61050d6117cf565b60405161051a91906140cf565b60405180910390f35b61053d60048036038101906105389190613a1e565b6117f5565b60405161054a91906141ac565b60405180910390f35b61056d6004803603810190610568919061396a565b611b1f565b60405161057a91906141ac565b60405180910390f35b61059d60048036038101906105989190613ca6565b611d30565b6040516105aa91906141ac565b60405180910390f35b6105cd60048036038101906105c8919061396a565b611e6b565b005b6105d7611fa8565b6040516105e4919061442a565b60405180910390f35b61060760048036038101906106029190613ca6565b611fae565b604051610614919061442a565b60405180910390f35b61062561200f565b60405161063291906140cf565b60405180910390f35b6106556004803603810190610650919061396a565b612033565b604051610662919061442a565b60405180910390f35b6106856004803603810190610680919061396a565b61204b565b604051610692919061442a565b60405180910390f35b6106b560048036038101906106b09190613c54565b612063565b6040516106c291906140cf565b60405180910390f35b6106d36120a2565b6040516106e0919061442a565b60405180910390f35b6106f16120a8565b6040516106fe91906140cf565b60405180910390f35b61070f6120b7565b60405161071c91906140cf565b60405180910390f35b61072d6120dd565b60405161073a9190614288565b60405180910390f35b61075d60048036038101906107589190613abc565b61216b565b60405161076a91906141ac565b60405180910390f35b61077b61227d565b604051610788919061418a565b60405180910390f35b6107ab60048036038101906107a69190613abc565b61230b565b6040516107b891906141ac565b60405180910390f35b6107db60048036038101906107d6919061396a565b612519565b6040516107e891906141ac565b60405180910390f35b61080b60048036038101906108069190613c54565b612539565b604051610818919061442a565b60405180910390f35b61083b60048036038101906108369190613ca6565b612599565b604051610848919061442a565b60405180910390f35b610859612622565b604051610866919061442a565b60405180910390f35b61088960048036038101906108849190613bb3565b612628565b005b6108a560048036038101906108a09190613b47565b6126ba565b6040516108b291906141ac565b60405180910390f35b6108d560048036038101906108d0919061396a565b61283c565b005b6108df61290c565b6040516108ec919061442a565b60405180910390f35b61090f600480360381019061090a9190613a1e565b612a17565b005b610919612c1c565b005b61093560048036038101906109309190613993565b612d05565b604051610942919061442a565b60405180910390f35b61096560048036038101906109609190613c05565b612d2a565b60405161097291906141ac565b60405180910390f35b610983612e1c565b60405161099091906140cf565b60405180910390f35b6109a1612e7a565b6040516109ae91906140cf565b60405180910390f35b6109d160048036038101906109cc919061396a565b612ea0565b005b60006109dd612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906142aa565b60405180910390fd5b610a55848484612fdd565b90509392505050565b7f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b6000610a8f338484612fdd565b905092915050565b60008054610aa490614612565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad090614612565b8015610b1d5780601f10610af257610100808354040283529160200191610b1d565b820191906000526020600020905b815481529060010190602001808311610b0057829003601f168201915b505050505081565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c05919061442a565b60405180910390a36001905092915050565b610c1f612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c83906142aa565b60405180910390fd5b600a54421015610c9b57600080fd5b600160066000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600354905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580610e0f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b610e1857600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611030576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461102e5782811015610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d906143aa565b60405180910390fd5b60008382610f44919061453d565b905080600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611024919061442a565b60405180910390a3505b505b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae9061430a565b60405180910390fd5b82816110c3919061453d565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461115591906144e7565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516111b9919061442a565b60405180910390a360019150509392505050565b60006111da338333612fdd565b9050919050565b6111e9612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d906142aa565b60405180910390fd5b600460009054906101000a900460ff1661126f57600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600c819055506000600460006101000a81548160ff02191690831515021790555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061148933600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205433612fdd565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415806114f757503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b61150057600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e9061430a565b60405180910390fd5b8481611593919061453d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461162591906144e7565b925050819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611689919061442a565b60405180910390a38573ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36338787876040518563ffffffff1660e01b81526004016116d0949392919061414a565b602060405180830381600087803b1580156116ea57600080fd5b505af11580156116fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117229190613bdc565b915050949350505050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b29061436a565b60405180910390fd5b6117c5838361303e565b6001905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008442111561183a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118319061432a565b60405180910390fd5b60007f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59898989600d60008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118b090614644565b919050558a6040516020016118ca969594939291906141e2565b6040516020818303038152906040528051906020012090506118ef8982878787613187565b806119035750611902898287878761329d565b5b61190c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158061197457503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b61197d57600080fd5b6000600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905087811015611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb9061430a565b60405180910390fd5b8781611a10919061453d565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aa291906144e7565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051611b06919061442a565b60405180910390a3600192505050979650505050505050565b6000611b29612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d906142aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd906142ca565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac60405160405180910390a460019050919050565b6000600460019054906101000a900460ff1615611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d799061434a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de9906142ca565b60405180910390fd5b611dfc33846133b3565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c88885604051611e59919061442a565b60405180910390a36001905092915050565b611e73612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906142aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f47906142ca565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055442611f9f91906144e7565b600c8190555050565b60055481565b6000611ffd3330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134fc909392919063ffffffff16565b6120078383613585565b905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915090505481565b600d6020528060005260406000206000915090505481565b6007818154811061207357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b60006120b2612e1c565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600180546120ea90614612565b80601f016020809104026020016040519081016040528092919081815260200182805461211690614612565b80156121635780601f1061213857610100808354040283529160200191612163565b820191906000526020600020905b81548152906001019060200180831161214657829003601f168201915b505050505081565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061436a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612269576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612260906142ca565b60405180910390fd5b61227383836133b3565b6001905092915050565b6060600780548060200260200160405190810160405280929190818152602001828054801561230157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116122b7575b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158061237457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61237d57600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb9061430a565b60405180910390fd5b8281612410919061453d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124a291906144e7565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612506919061442a565b60405180910390a3600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b60006125883330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134fc909392919063ffffffff16565b6125928233613585565b9050919050565b60006125a3612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612607906142aa565b60405180910390fd5b61261a8383613585565b905092915050565b600a5481565b612630612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612694906142aa565b60405180910390fd5b80600460016101000a81548160ff02191690831515021790555050565b600083600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258660405161279a919061442a565b60405180910390a38473ffffffffffffffffffffffffffffffffffffffff1662ba451f338686866040518563ffffffff1660e01b81526004016127e0949392919061414a565b602060405180830381600087803b1580156127fa57600080fd5b505af115801561280e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128329190613bdc565b9050949350505050565b612844612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a8906142aa565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161296891906140cf565b60206040518083038186803b15801561298057600080fd5b505afa158015612994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b89190613c7d565b9050612a073330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134fc909392919063ffffffff16565b612a118133613585565b91505090565b83421115612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a519061432a565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888600d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612ad090614644565b9190505589604051602001612aea969594939291906141e2565b604051602081830303815290604052805190602001209050612b0f8882868686613187565b80612b235750612b22888286868661329d565b5b612b2c57600080fd5b85600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92588604051612c0a919061442a565b60405180910390a35050505050505050565b612c24612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c88906142aa565b60405180910390fd5b600c54421015612ca057600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e602052816000526040600020602052806000526040600020600091509150505481565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612daf9061436a565b60405180910390fd5b612dc2838361303e565b8273ffffffffffffffffffffffffffffffffffffffff16847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d6184604051612e09919061442a565b60405180910390a3600190509392505050565b6000600c544210612e5157600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612e77565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ea8612e1c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0c906142aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c906142ca565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055442612fd491906144e7565b600a8190555050565b6000612fe984846133b3565b61303482847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661364b9092919063ffffffff16565b8290509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a59061440a565b60405180910390fd5b80600360008282546130c091906144e7565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461311691906144e7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161317b919061442a565b60405180910390a35050565b6000807f0000000000000000000000000000000000000000000000000000000000000000866040516020016131bd929190614098565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516131fa9493929190614243565b6020604051602081039080840390855afa15801561321c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561329057508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b6000807f0000000000000000000000000000000000000000000000000000000000000000866040516020016132d3929190614061565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516133109493929190614243565b6020604051602081039080840390855afa158015613332573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156133a657508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341a9061438a565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613472919061453d565b92505081905550806003600082825461348b919061453d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134f0919061442a565b60405180910390a35050565b61357f846323b872dd60e01b85858560405160240161351d939291906140ea565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506136d1565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161415801561362f57503073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614155b61363857600080fd5b613642828461303e565b82905092915050565b6136cc8363a9059cbb60e01b848460405160240161366a929190614121565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506136d1565b505050565b6136f08273ffffffffffffffffffffffffffffffffffffffff16613842565b61372f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613726906143ea565b60405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051613757919061404a565b6000604051808303816000865af19150503d8060008114613794576040519150601f19603f3d011682016040523d82523d6000602084013e613799565b606091505b5091509150816137de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d5906142ea565b60405180910390fd5b60008151111561383c57808060200190518101906137fc9190613bdc565b61383b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613832906143ca565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156138845750808214155b92505050919050565b60008135905061389c816149dc565b92915050565b6000813590506138b1816149f3565b92915050565b6000815190506138c6816149f3565b92915050565b6000813590506138db81614a0a565b92915050565b60008083601f8401126138f357600080fd5b8235905067ffffffffffffffff81111561390c57600080fd5b60208301915083600182028301111561392457600080fd5b9250929050565b60008135905061393a81614a21565b92915050565b60008151905061394f81614a21565b92915050565b60008135905061396481614a38565b92915050565b60006020828403121561397c57600080fd5b600061398a8482850161388d565b91505092915050565b600080604083850312156139a657600080fd5b60006139b48582860161388d565b92505060206139c58582860161388d565b9150509250929050565b6000806000606084860312156139e457600080fd5b60006139f28682870161388d565b9350506020613a038682870161388d565b9250506040613a148682870161392b565b9150509250925092565b600080600080600080600060e0888a031215613a3957600080fd5b6000613a478a828b0161388d565b9750506020613a588a828b0161388d565b9650506040613a698a828b0161392b565b9550506060613a7a8a828b0161392b565b9450506080613a8b8a828b01613955565b93505060a0613a9c8a828b016138cc565b92505060c0613aad8a828b016138cc565b91505092959891949750929550565b60008060408385031215613acf57600080fd5b6000613add8582860161388d565b9250506020613aee8582860161392b565b9150509250929050565b600080600060608486031215613b0d57600080fd5b6000613b1b8682870161388d565b9350506020613b2c8682870161392b565b9250506040613b3d8682870161388d565b9150509250925092565b60008060008060608587031215613b5d57600080fd5b6000613b6b8782880161388d565b9450506020613b7c8782880161392b565b935050604085013567ffffffffffffffff811115613b9957600080fd5b613ba5878288016138e1565b925092505092959194509250565b600060208284031215613bc557600080fd5b6000613bd3848285016138a2565b91505092915050565b600060208284031215613bee57600080fd5b6000613bfc848285016138b7565b91505092915050565b600080600060608486031215613c1a57600080fd5b6000613c28868287016138cc565b9350506020613c398682870161388d565b9250506040613c4a8682870161392b565b9150509250925092565b600060208284031215613c6657600080fd5b6000613c748482850161392b565b91505092915050565b600060208284031215613c8f57600080fd5b6000613c9d84828501613940565b91505092915050565b60008060408385031215613cb957600080fd5b6000613cc78582860161392b565b9250506020613cd88582860161388d565b9150509250929050565b6000613cee8383613cfa565b60208301905092915050565b613d0381614571565b82525050565b613d1281614571565b82525050565b6000613d2382614470565b613d2d818561449e565b9350613d3883614460565b8060005b83811015613d69578151613d508882613ce2565b9750613d5b83614491565b925050600181019050613d3c565b5085935050505092915050565b613d7f81614583565b82525050565b613d8e8161458f565b82525050565b613da5613da08261458f565b61468d565b82525050565b6000613db783856144af565b9350613dc48385846145d0565b613dcd836146f5565b840190509392505050565b6000613de38261447b565b613ded81856144c0565b9350613dfd8185602086016145df565b80840191505092915050565b6000613e1482614486565b613e1e81856144cb565b9350613e2e8185602086016145df565b613e37816146f5565b840191505092915050565b6000613e4f601c836144dc565b9150613e5a82614706565b601c82019050919050565b6000613e726019836144cb565b9150613e7d8261472f565b602082019050919050565b6000613e956002836144dc565b9150613ea082614758565b600282019050919050565b6000613eb8601c836144cb565b9150613ec382614781565b602082019050919050565b6000613edb6020836144cb565b9150613ee6826147aa565b602082019050919050565b6000613efe602f836144cb565b9150613f09826147d3565b604082019050919050565b6000613f21601e836144cb565b9150613f2c82614822565b602082019050919050565b6000613f446018836144cb565b9150613f4f8261484b565b602082019050919050565b6000613f676019836144cb565b9150613f7282614874565b602082019050919050565b6000613f8a6021836144cb565b9150613f958261489d565b604082019050919050565b6000613fad6029836144cb565b9150613fb8826148ec565b604082019050919050565b6000613fd0602a836144cb565b9150613fdb8261493b565b604082019050919050565b6000613ff3601f836144cb565b9150613ffe8261498a565b602082019050919050565b6000614016601f836144cb565b9150614021826149b3565b602082019050919050565b614035816145b9565b82525050565b614044816145c3565b82525050565b60006140568284613dd8565b915081905092915050565b600061406c82613e42565b91506140788285613d94565b6020820191506140888284613d94565b6020820191508190509392505050565b60006140a382613e88565b91506140af8285613d94565b6020820191506140bf8284613d94565b6020820191508190509392505050565b60006020820190506140e46000830184613d09565b92915050565b60006060820190506140ff6000830186613d09565b61410c6020830185613d09565b614119604083018461402c565b949350505050565b60006040820190506141366000830185613d09565b614143602083018461402c565b9392505050565b600060608201905061415f6000830187613d09565b61416c602083018661402c565b818103604083015261417f818486613dab565b905095945050505050565b600060208201905081810360008301526141a48184613d18565b905092915050565b60006020820190506141c16000830184613d76565b92915050565b60006020820190506141dc6000830184613d85565b92915050565b600060c0820190506141f76000830189613d85565b6142046020830188613d09565b6142116040830187613d09565b61421e606083018661402c565b61422b608083018561402c565b61423860a083018461402c565b979650505050505050565b60006080820190506142586000830187613d85565b614265602083018661403b565b6142726040830185613d85565b61427f6060830184613d85565b95945050505050565b600060208201905081810360008301526142a28184613e09565b905092915050565b600060208201905081810360008301526142c381613e65565b9050919050565b600060208201905081810360008301526142e381613eab565b9050919050565b6000602082019050818103600083015261430381613ece565b9050919050565b6000602082019050818103600083015261432381613ef1565b9050919050565b6000602082019050818103600083015261434381613f14565b9050919050565b6000602082019050818103600083015261436381613f37565b9050919050565b6000602082019050818103600083015261438381613f5a565b9050919050565b600060208201905081810360008301526143a381613f7d565b9050919050565b600060208201905081810360008301526143c381613fa0565b9050919050565b600060208201905081810360008301526143e381613fc3565b9050919050565b6000602082019050818103600083015261440381613fe6565b9050919050565b6000602082019050818103600083015261442381614009565b9050919050565b600060208201905061443f600083018461402c565b92915050565b600060208201905061445a600083018461403b565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006144f2826145b9565b91506144fd836145b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561453257614531614697565b5b828201905092915050565b6000614548826145b9565b9150614553836145b9565b92508282101561456657614565614697565b5b828203905092915050565b600061457c82614599565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156145fd5780820151818401526020810190506145e2565b8381111561460c576000848401525b50505050565b6000600282049050600182168061462a57607f821691505b6020821081141561463e5761463d6146c6565b5b50919050565b600061464f826145b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561468257614681614697565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f416e7973776170563345524332303a20464f5242494444454e00000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f416e7973776170563345524332303a2061646472657373283078302900000000600082015250565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564600082015250565b7f416e7973776170563345524332303a207472616e7366657220616d6f756e742060008201527f657863656564732062616c616e63650000000000000000000000000000000000602082015250565b7f416e7973776170563345524332303a2045787069726564207065726d69740000600082015250565b7f416e7973776170563445524332303a206f6e6c79417574680000000000000000600082015250565b7f416e7973776170563445524332303a20464f5242494444454e00000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f416e7973776170563345524332303a207265717565737420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6149e581614571565b81146149f057600080fd5b50565b6149fc81614583565b8114614a0757600080fd5b50565b614a138161458f565b8114614a1e57600080fd5b50565b614a2a816145b9565b8114614a3557600080fd5b50565b614a41816145c3565b8114614a4c57600080fd5b5056fea264697066735822122069952ae32f6bc1a17a34575f76b0112517c85f0e500e649c011214a6c6422ed964736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7ca7d974169cc5a7ee19e1ca4c2e919718b700200000000000000000000000000000000000000000000000000000000000000075370696e746f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045350494e00000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7ca7d974169cc5a7ee19e1ca4c2e919718b700200000000000000000000000000000000000000000000000000000000000000075370696e746f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045350494e00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Spintop
Arg [1] : _symbol (string): SPIN
Arg [2] : _decimals (uint8): 18
Arg [3] : _underlying (address): 0x0000000000000000000000000000000000000000
Arg [4] : _vault (address): 0xe7ca7d974169cc5a7ee19e1ca4c2e919718b7002
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000e7ca7d974169cc5a7ee19e1ca4c2e919718b7002
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 5370696e746f7000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 5350494e00000000000000000000000000000000000000000000000000000000