Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
0.000001 FWETH
Holders
1
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FlashPot
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-27 */ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.4; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256(bytes("1")), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. library SafeTransferLib { /*/////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool callStatus; assembly { // Transfer the ETH and store if it succeeded or not. callStatus := call(gas(), to, amount, 0, 0, 0, 0) } require(callStatus, "ETH_TRANSFER_FAILED"); } /*/////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 100 because the calldata length is 4 + 32 * 3. callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED"); } /*/////////////////////////////////////////////////////////////// INTERNAL HELPER LOGIC //////////////////////////////////////////////////////////////*/ function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) { assembly { // Get how many bytes the call returned. let returnDataSize := returndatasize() // If the call reverted: if iszero(callStatus) { // Copy the revert message into memory. returndatacopy(0, 0, returnDataSize) // Revert with the same message. revert(0, returnDataSize) } switch returnDataSize case 32 { // Copy the return data into memory. returndatacopy(0, 0, returnDataSize) // Set success to whether it returned true. success := iszero(iszero(mload(0))) } case 0 { // There was no return data. success := 1 } default { // It returned some malformed input. success := 0 } } } } /** * @dev Interface of the ERC3156 FlashBorrower, as defined in * https://eips.ethereum.org/EIPS/eip-3156[ERC-3156]. * * _Available since v4.1._ */ interface IERC3156FlashBorrower { /** * @dev Receive a flash loan. * @param initiator The initiator of the loan. * @param token The loan currency. * @param amount The amount of tokens lent. * @param fee The additional amount of tokens to repay. * @param data Arbitrary data structure, intended to contain user-defined parameters. * @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan" */ function onFlashLoan( address initiator, address token, uint256 amount, uint256 fee, bytes calldata data ) external returns (bytes32); } /** * @dev Interface of the ERC3156 FlashLender, as defined in * https://eips.ethereum.org/EIPS/eip-3156[ERC-3156]. * * _Available since v4.1._ */ interface IERC3156FlashLender { /** * @dev The amount of currency available to be lended. * @param token The loan currency. * @return The amount of `token` that can be borrowed. */ function maxFlashLoan(address token) external view returns (uint256); /** * @dev The fee to be charged for a given loan. * @param token The loan currency. * @param amount The amount of tokens lent. * @return The amount of `token` to be charged for the loan, on top of the returned principal. */ function flashFee(address token, uint256 amount) external view returns (uint256); /** * @dev Initiate a flash loan. * @param receiver The receiver of the tokens in the loan, and the receiver of the callback. * @param token The loan currency. * @param amount The amount of tokens lent. * @param data Arbitrary data structure, intended to contain user-defined parameters. */ function flashLoan( IERC3156FlashBorrower receiver, address token, uint256 amount, bytes calldata data ) external returns (bool); } /// @notice Gas optimized reentrancy protection for smart contracts. /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol) abstract contract ReentrancyGuard { uint256 private reentrancyStatus = 1; modifier nonReentrant() { require(reentrancyStatus == 1, "REENTRANCY"); reentrancyStatus = 2; _; reentrancyStatus = 1; } } /// @notice Trident access control contract. /// @author Adapted from https://github.com/boringcrypto/BoringSolidity/blob/master/contracts/BoringOwnable.sol, License-Identifier: MIT. contract TridentOwnable { address public owner; address public pendingOwner; event TransferOwner(address indexed sender, address indexed recipient); event TransferOwnerClaim(address indexed sender, address indexed recipient); /// @notice Initialize and grant deployer account (`msg.sender`) `owner` access role. constructor() { owner = msg.sender; emit TransferOwner(address(0), msg.sender); } /// @notice Access control modifier that requires modified function to be called by `owner` account. modifier onlyOwner() { require(msg.sender == owner, "NOT_OWNER"); _; } /// @notice `pendingOwner` can claim `owner` account. function claimOwner() external { require(msg.sender == pendingOwner, "NOT_PENDING_OWNER"); emit TransferOwner(owner, msg.sender); owner = msg.sender; pendingOwner = address(0); } /// @notice Transfer `owner` account. /// @param recipient Account granted `owner` access control. /// @param direct If 'true', ownership is directly transferred. function transferOwner(address recipient, bool direct) external onlyOwner { require(recipient != address(0), "ZERO_ADDRESS"); if (direct) { owner = recipient; emit TransferOwner(msg.sender, recipient); } else { pendingOwner = recipient; emit TransferOwnerClaim(msg.sender, recipient); } } } /// @notice Flash-lendable ETH wrapper with elastic shares. contract FlashPot is ERC20("FlashPot Wrapped Ether", "FWETH", 18), IERC3156FlashLender, ReentrancyGuard, TridentOwnable { using SafeTransferLib for address; /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Deposit(address indexed from, uint256 amount); event Withdrawal(address indexed to, uint256 amount); /*/////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ error CallbackFailed(); error RepayFailed(); /*/////////////////////////////////////////////////////////////// FLASH STORAGE //////////////////////////////////////////////////////////////*/ bytes32 public constant CALLBACK_SUCCESS = keccak256("ERC3156FlashBorrower.onFlashLoan"); uint256 public fee; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(uint256 fee_) { fee = fee_; } /*/////////////////////////////////////////////////////////////// FLASH OPERATIONS //////////////////////////////////////////////////////////////*/ function flashLoan( IERC3156FlashBorrower receiver, address, uint256 amount, bytes calldata data ) public override nonReentrant returns (bool) { uint256 flee = flashFee(address(0), amount); uint256 startingBalance = address(this).balance; address(receiver).safeTransferETH(amount); if (receiver.onFlashLoan(msg.sender, address(0), amount, flee, data) != CALLBACK_SUCCESS) revert CallbackFailed(); if (address(this).balance != startingBalance + flee) revert RepayFailed(); return true; } function flashFee( address, uint256 amount ) public view override returns (uint256) { return amount * fee / 10000; } function maxFlashLoan(address) public view override returns (uint256) { return address(this).balance; } /*/////////////////////////////////////////////////////////////// WRAP OPERATIONS //////////////////////////////////////////////////////////////*/ function deposit() public payable nonReentrant { uint256 totalShares = totalSupply; uint256 totalETH = address(this).balance - msg.value; if (totalShares == 0 || totalETH == 0) { _mint(msg.sender, msg.value); } else { uint256 what = (msg.value * totalShares) / totalETH; _mint(msg.sender, what); } emit Deposit(msg.sender, msg.value); } function withdraw(uint256 share) public nonReentrant { uint256 what = (share * address(this).balance) / totalSupply; _burn(msg.sender, share); msg.sender.safeTransferETH(what); emit Withdrawal(msg.sender, share); } receive() external payable {} /*/////////////////////////////////////////////////////////////// GOVERNANCE //////////////////////////////////////////////////////////////*/ function updateFlashFee(uint256 fee_) public onlyOwner { fee = fee_; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"fee_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CallbackFailed","type":"error"},{"inputs":[],"name":"RepayFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"TransferOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"TransferOwnerClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"CALLBACK_SUCCESS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"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":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"flashFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC3156FlashBorrower","name":"receiver","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxFlashLoan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":[],"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":"amount","type":"uint256"}],"name":"transfer","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"direct","type":"bool"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee_","type":"uint256"}],"name":"updateFlashFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405260016006553480156200001657600080fd5b5060405162001ed338038062001ed3833981016040819052620000399162000296565b604080518082018252601681527f466c617368506f7420577261707065642045746865720000000000000000000060208083019182528351808501909452600584526408cae8aa8960db1b9084015281519192916012916200009f9160009190620001f0565b508151620000b5906001906020850190620001f0565b507fff0000000000000000000000000000000000000000000000000000000000000060f882901b166080524660a052620000ee6200013f565b60c0525050600780546001600160a01b031916339081179091556040519091506000907f5bb496b3f951b55d3a1d8e479725a4d25bdc7644fc355f0b71c540354820a1c5908290a360095562000391565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620001739190620002b0565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b828054620001fe9062000354565b90600052602060002090601f0160209004810192826200022257600085556200026d565b82601f106200023d57805160ff19168380011785556200026d565b828001600101855582156200026d579182015b828111156200026d57825182559160200191906001019062000250565b506200027b9291506200027f565b5090565b5b808211156200027b576000815560010162000280565b600060208284031215620002a957600080fd5b5051919050565b600080835481600182811c915080831680620002cd57607f831692505b6020808410821415620002ee57634e487b7160e01b86526022600452602486fd5b818015620003055760018114620003175762000346565b60ff1986168952848901965062000346565b60008a81526020902060005b868110156200033e5781548b82015290850190830162000323565b505084890196505b509498975050505050505050565b600181811c908216806200036957607f821691505b602082108114156200038b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160f81c60a05160c051611b0f620003c460003960006109520152600061091d015260006102cd0152611b0f6000f3fe60806040526004361061019a5760003560e01c806370a08231116100e1578063cf81afaa1161008a578063d9d98ce411610064578063d9d98ce4146104c8578063dd62ed3e146104e8578063ddca3f4314610520578063e30c39781461053657600080fd5b8063cf81afaa14610480578063d0e30db0146104a0578063d505accf146104a857600080fd5b80638da5cb5b116100bb5780638da5cb5b146103f957806395d89b411461044b578063a9059cbb1461046057600080fd5b806370a082311461036b5780637ecebe00146103985780638237e538146103c557600080fd5b806330adf81f116101435780633bd1adec1161011d5780633bd1adec146103165780635cffe9de1461032b578063613255ab1461034b57600080fd5b806330adf81f14610287578063313ce567146102bb5780633644e5151461030157600080fd5b806318160ddd1161017457806318160ddd1461022357806323b872dd146102475780632e1a7d4d1461026757600080fd5b806306fdde03146101a6578063095ea7b3146101d157806311b6e6b41461020157600080fd5b366101a157005b600080fd5b3480156101b257600080fd5b506101bb610563565b6040516101c89190611917565b60405180910390f35b3480156101dd57600080fd5b506101f16101ec3660046116c1565b6105f1565b60405190151581526020016101c8565b34801561020d57600080fd5b5061022161021c3660046117a5565b61066a565b005b34801561022f57600080fd5b5061023960025481565b6040519081526020016101c8565b34801561025357600080fd5b506101f16102623660046115d6565b6106f5565b34801561027357600080fd5b506102216102823660046117a5565b610839565b34801561029357600080fd5b506102397f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b3480156102c757600080fd5b506102ef7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101c8565b34801561030d57600080fd5b50610239610919565b34801561032257600080fd5b50610221610974565b34801561033757600080fd5b506101f1610346366004611706565b610a72565b34801561035757600080fd5b50610239610366366004611580565b504790565b34801561037757600080fd5b50610239610386366004611580565b60036020526000908152604090205481565b3480156103a457600080fd5b506102396103b3366004611580565b60056020526000908152604090205481565b3480156103d157600080fd5b506102397f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981565b34801561040557600080fd5b506007546104269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b34801561045757600080fd5b506101bb610c72565b34801561046c57600080fd5b506101f161047b3660046116c1565b610c7f565b34801561048c57600080fd5b5061022161049b36600461168e565b610d04565b610221610eec565b3480156104b457600080fd5b506102216104c3366004611617565b610fe4565b3480156104d457600080fd5b506102396104e33660046116c1565b611310565b3480156104f457600080fd5b5061023961050336600461159d565b600460209081526000928352604080842090915290825290205481565b34801561052c57600080fd5b5061023960095481565b34801561054257600080fd5b506008546104269073ffffffffffffffffffffffffffffffffffffffff1681565b6000805461057090611a31565b80601f016020809104026020016040519081016040528092919081815260200182805461059c90611a31565b80156105e95780601f106105be576101008083540402835291602001916105e9565b820191906000526020600020905b8154815290600101906020018083116105cc57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106599086815260200190565b60405180910390a350600192915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f4f574e4552000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600955565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610789576107578382611a1a565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812080548592906107be908490611a1a565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108269087815260200190565b60405180910390a3506001949350505050565b6006546001146108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016106e7565b60026006819055546000906108ba47846119dd565b6108c491906119a2565b90506108d03383611334565b6108da33826113ca565b60405182815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65906020015b60405180910390a250506001600655565b60007f0000000000000000000000000000000000000000000000000000000000000000461461094f5761094a611444565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60085473ffffffffffffffffffffffffffffffffffffffff1633146109f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e4f545f50454e44494e475f4f574e455200000000000000000000000000000060448201526064016106e7565b600754604051339173ffffffffffffffffffffffffffffffffffffffff16907f5bb496b3f951b55d3a1d8e479725a4d25bdc7644fc355f0b71c540354820a1c590600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600880549091169055565b6000600654600114610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016106e7565b60026006556000610af18186611310565b905047610b1473ffffffffffffffffffffffffffffffffffffffff8916876113ca565b6040517f23e30c8b0000000000000000000000000000000000000000000000000000000081527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99073ffffffffffffffffffffffffffffffffffffffff8a16906323e30c8b90610b939033906000908c9089908d908d90600401611891565b602060405180830381600087803b158015610bad57600080fd5b505af1158015610bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be591906116ed565b14610c1c576040517f221f615800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c26828261198a565b4714610c5e576040517f9e703a0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600192505050600160065595945050505050565b6001805461057090611a31565b33600090815260036020526040812080548391908390610ca0908490611a1a565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106599086815260200190565b60075473ffffffffffffffffffffffffffffffffffffffff163314610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f4f574e4552000000000000000000000000000000000000000000000060448201526064016106e7565b73ffffffffffffffffffffffffffffffffffffffff8216610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f41444452455353000000000000000000000000000000000000000060448201526064016106e7565b8015610e7a57600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560405133907f5bb496b3f951b55d3a1d8e479725a4d25bdc7644fc355f0b71c540354820a1c590600090a35050565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560405133907f87f5c8846f4c51400fa448cfb84edcec5cc0f333b6d20a5b903e050823dcb66790600090a35050565b600654600114610f58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016106e7565b60026006819055546000610f6c3447611a1a565b9050811580610f79575080155b15610f8d57610f88333461150f565b610fb2565b600081610f9a84346119dd565b610fa491906119a2565b9050610fb0338261150f565b505b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c90602001610908565b4284101561104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016106e7565b6000611058610919565b73ffffffffffffffffffffffffffffffffffffffff89811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156111b7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061123257508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016106e7565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208b8516808552908352928190208a905551898152919350918a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60006127106009548361132391906119dd565b61132d91906119a2565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054839290611369908490611a1a565b909155505060028054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600080600080600085875af190508061143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016106e7565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161147691906117be565b604080519182900382208282018252600183527f31000000000000000000000000000000000000000000000000000000000000006020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254611521919061198a565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113be565b60006020828403121561159257600080fd5b813561132d81611ab4565b600080604083850312156115b057600080fd5b82356115bb81611ab4565b915060208301356115cb81611ab4565b809150509250929050565b6000806000606084860312156115eb57600080fd5b83356115f681611ab4565b9250602084013561160681611ab4565b929592945050506040919091013590565b600080600080600080600060e0888a03121561163257600080fd5b873561163d81611ab4565b9650602088013561164d81611ab4565b95506040880135945060608801359350608088013560ff8116811461167157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156116a157600080fd5b82356116ac81611ab4565b9150602083013580151581146115cb57600080fd5b600080604083850312156116d457600080fd5b82356116df81611ab4565b946020939093013593505050565b6000602082840312156116ff57600080fd5b5051919050565b60008060008060006080868803121561171e57600080fd5b853561172981611ab4565b9450602086013561173981611ab4565b935060408601359250606086013567ffffffffffffffff8082111561175d57600080fd5b818801915088601f83011261177157600080fd5b81358181111561178057600080fd5b89602082850101111561179257600080fd5b9699959850939650602001949392505050565b6000602082840312156117b757600080fd5b5035919050565b600080835481600182811c9150808316806117da57607f831692505b6020808410821415611813577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015611827576001811461185657611883565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650611883565b60008a81526020902060005b8681101561187b5781548b820152908501908301611862565b505084890196505b509498975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501168301019050979650505050505050565b600060208083528351808285015260005b8181101561194457858101830151858201604001528201611928565b81811115611956576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000821982111561199d5761199d611a85565b500190565b6000826119d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a1557611a15611a85565b500290565b600082821015611a2c57611a2c611a85565b500390565b600181811c90821680611a4557607f821691505b60208210811415611a7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611ad657600080fd5b5056fea2646970667358221220adc54e8282bfbfb9d8ff6cae4592764fc25482e418c0cdcc511854fe139ff2c064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x60806040526004361061019a5760003560e01c806370a08231116100e1578063cf81afaa1161008a578063d9d98ce411610064578063d9d98ce4146104c8578063dd62ed3e146104e8578063ddca3f4314610520578063e30c39781461053657600080fd5b8063cf81afaa14610480578063d0e30db0146104a0578063d505accf146104a857600080fd5b80638da5cb5b116100bb5780638da5cb5b146103f957806395d89b411461044b578063a9059cbb1461046057600080fd5b806370a082311461036b5780637ecebe00146103985780638237e538146103c557600080fd5b806330adf81f116101435780633bd1adec1161011d5780633bd1adec146103165780635cffe9de1461032b578063613255ab1461034b57600080fd5b806330adf81f14610287578063313ce567146102bb5780633644e5151461030157600080fd5b806318160ddd1161017457806318160ddd1461022357806323b872dd146102475780632e1a7d4d1461026757600080fd5b806306fdde03146101a6578063095ea7b3146101d157806311b6e6b41461020157600080fd5b366101a157005b600080fd5b3480156101b257600080fd5b506101bb610563565b6040516101c89190611917565b60405180910390f35b3480156101dd57600080fd5b506101f16101ec3660046116c1565b6105f1565b60405190151581526020016101c8565b34801561020d57600080fd5b5061022161021c3660046117a5565b61066a565b005b34801561022f57600080fd5b5061023960025481565b6040519081526020016101c8565b34801561025357600080fd5b506101f16102623660046115d6565b6106f5565b34801561027357600080fd5b506102216102823660046117a5565b610839565b34801561029357600080fd5b506102397f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b3480156102c757600080fd5b506102ef7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016101c8565b34801561030d57600080fd5b50610239610919565b34801561032257600080fd5b50610221610974565b34801561033757600080fd5b506101f1610346366004611706565b610a72565b34801561035757600080fd5b50610239610366366004611580565b504790565b34801561037757600080fd5b50610239610386366004611580565b60036020526000908152604090205481565b3480156103a457600080fd5b506102396103b3366004611580565b60056020526000908152604090205481565b3480156103d157600080fd5b506102397f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981565b34801561040557600080fd5b506007546104269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b34801561045757600080fd5b506101bb610c72565b34801561046c57600080fd5b506101f161047b3660046116c1565b610c7f565b34801561048c57600080fd5b5061022161049b36600461168e565b610d04565b610221610eec565b3480156104b457600080fd5b506102216104c3366004611617565b610fe4565b3480156104d457600080fd5b506102396104e33660046116c1565b611310565b3480156104f457600080fd5b5061023961050336600461159d565b600460209081526000928352604080842090915290825290205481565b34801561052c57600080fd5b5061023960095481565b34801561054257600080fd5b506008546104269073ffffffffffffffffffffffffffffffffffffffff1681565b6000805461057090611a31565b80601f016020809104026020016040519081016040528092919081815260200182805461059c90611a31565b80156105e95780601f106105be576101008083540402835291602001916105e9565b820191906000526020600020905b8154815290600101906020018083116105cc57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106599086815260200190565b60405180910390a350600192915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f4f574e4552000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600955565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610789576107578382611a1a565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812080548592906107be908490611a1a565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108269087815260200190565b60405180910390a3506001949350505050565b6006546001146108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016106e7565b60026006819055546000906108ba47846119dd565b6108c491906119a2565b90506108d03383611334565b6108da33826113ca565b60405182815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65906020015b60405180910390a250506001600655565b60007f0000000000000000000000000000000000000000000000000000000000000001461461094f5761094a611444565b905090565b507fbf10a67baf8ccbf4019cb4e38b2227da770ff33ad6be400e5e28ae4c26ae0b5090565b60085473ffffffffffffffffffffffffffffffffffffffff1633146109f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e4f545f50454e44494e475f4f574e455200000000000000000000000000000060448201526064016106e7565b600754604051339173ffffffffffffffffffffffffffffffffffffffff16907f5bb496b3f951b55d3a1d8e479725a4d25bdc7644fc355f0b71c540354820a1c590600090a3600780547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600880549091169055565b6000600654600114610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016106e7565b60026006556000610af18186611310565b905047610b1473ffffffffffffffffffffffffffffffffffffffff8916876113ca565b6040517f23e30c8b0000000000000000000000000000000000000000000000000000000081527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99073ffffffffffffffffffffffffffffffffffffffff8a16906323e30c8b90610b939033906000908c9089908d908d90600401611891565b602060405180830381600087803b158015610bad57600080fd5b505af1158015610bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be591906116ed565b14610c1c576040517f221f615800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c26828261198a565b4714610c5e576040517f9e703a0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600192505050600160065595945050505050565b6001805461057090611a31565b33600090815260036020526040812080548391908390610ca0908490611a1a565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106599086815260200190565b60075473ffffffffffffffffffffffffffffffffffffffff163314610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f4f574e4552000000000000000000000000000000000000000000000060448201526064016106e7565b73ffffffffffffffffffffffffffffffffffffffff8216610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f41444452455353000000000000000000000000000000000000000060448201526064016106e7565b8015610e7a57600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560405133907f5bb496b3f951b55d3a1d8e479725a4d25bdc7644fc355f0b71c540354820a1c590600090a35050565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560405133907f87f5c8846f4c51400fa448cfb84edcec5cc0f333b6d20a5b903e050823dcb66790600090a35050565b600654600114610f58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016106e7565b60026006819055546000610f6c3447611a1a565b9050811580610f79575080155b15610f8d57610f88333461150f565b610fb2565b600081610f9a84346119dd565b610fa491906119a2565b9050610fb0338261150f565b505b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c90602001610908565b4284101561104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016106e7565b6000611058610919565b73ffffffffffffffffffffffffffffffffffffffff89811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156111b7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061123257508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016106e7565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208b8516808552908352928190208a905551898152919350918a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60006127106009548361132391906119dd565b61132d91906119a2565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054839290611369908490611a1a565b909155505060028054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600080600080600085875af190508061143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016106e7565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161147691906117be565b604080519182900382208282018252600183527f31000000000000000000000000000000000000000000000000000000000000006020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254611521919061198a565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113be565b60006020828403121561159257600080fd5b813561132d81611ab4565b600080604083850312156115b057600080fd5b82356115bb81611ab4565b915060208301356115cb81611ab4565b809150509250929050565b6000806000606084860312156115eb57600080fd5b83356115f681611ab4565b9250602084013561160681611ab4565b929592945050506040919091013590565b600080600080600080600060e0888a03121561163257600080fd5b873561163d81611ab4565b9650602088013561164d81611ab4565b95506040880135945060608801359350608088013560ff8116811461167157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156116a157600080fd5b82356116ac81611ab4565b9150602083013580151581146115cb57600080fd5b600080604083850312156116d457600080fd5b82356116df81611ab4565b946020939093013593505050565b6000602082840312156116ff57600080fd5b5051919050565b60008060008060006080868803121561171e57600080fd5b853561172981611ab4565b9450602086013561173981611ab4565b935060408601359250606086013567ffffffffffffffff8082111561175d57600080fd5b818801915088601f83011261177157600080fd5b81358181111561178057600080fd5b89602082850101111561179257600080fd5b9699959850939650602001949392505050565b6000602082840312156117b757600080fd5b5035919050565b600080835481600182811c9150808316806117da57607f831692505b6020808410821415611813577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015611827576001811461185657611883565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650611883565b60008a81526020902060005b8681101561187b5781548b820152908501908301611862565b505084890196505b509498975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501168301019050979650505050505050565b600060208083528351808285015260005b8181101561194457858101830151858201604001528201611928565b81811115611956576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000821982111561199d5761199d611a85565b500190565b6000826119d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a1557611a15611a85565b500290565b600082821015611a2c57611a2c611a85565b500390565b600181811c90821680611a4557607f821691505b60208210811415611a7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611ad657600080fd5b5056fea2646970667358221220adc54e8282bfbfb9d8ff6cae4592764fc25482e418c0cdcc511854fe139ff2c064736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : fee_ (uint256): 10
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
16903:3559:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1057:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2693:217;;;;;;;;;;-1:-1:-1;2693:217:0;;;;;:::i;:::-;;:::i;:::-;;;6929:14:1;;6922:22;6904:41;;6892:2;6877:18;2693:217:0;6764:187:1;20375:84:0;;;;;;;;;;-1:-1:-1;20375:84:0;;;;;:::i;:::-;;:::i;:::-;;1341:26;;;;;;;;;;;;;;;;;;;7102:25:1;;;7090:2;7075:18;1341:26:0;6956:177:1;3311:612:0;;;;;;;;;;-1:-1:-1;3311:612:0;;;;;:::i;:::-;;:::i;19886:261::-;;;;;;;;;;-1:-1:-1;19886:261:0;;;;;:::i;:::-;;:::i;1692:146::-;;;;;;;;;;;;1743:95;1692:146;;1113:31;;;;;;;;;;;;;;;;;;12098:4:1;12086:17;;;12068:36;;12056:2;12041:18;1113:31:0;11926:184:1;5151:179:0;;;;;;;;;;;;;:::i;16049:219::-;;;;;;;;;;;;;:::i;18356:596::-;;;;;;;;;;-1:-1:-1;18356:596:0;;;;;:::i;:::-;;:::i;19121:117::-;;;;;;;;;;-1:-1:-1;19121:117:0;;;;;:::i;:::-;-1:-1:-1;19209:21:0;;19121:117;1376:44;;;;;;;;;;-1:-1:-1;1376:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;1959:41;;;;;;;;;;-1:-1:-1;1959:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;17796:88;;;;;;;;;;;;17839:45;17796:88;;15356:20;;;;;;;;;;-1:-1:-1;15356:20:0;;;;;;;;;;;5888:42:1;5876:55;;;5858:74;;5846:2;5831:18;15356:20:0;5712:226:1;1084:20:0;;;;;;;;;;;;;:::i;2918:385::-;;;;;;;;;;-1:-1:-1;2918:385:0;;;;;:::i;:::-;;:::i;16454:381::-;;;;;;;;;;-1:-1:-1;16454:381:0;;;;;:::i;:::-;;:::i;19438:440::-;;;:::i;4120:1023::-;;;;;;;;;;-1:-1:-1;4120:1023:0;;;;;:::i;:::-;;:::i;18960:153::-;;;;;;;;;;-1:-1:-1;18960:153:0;;;;;:::i;:::-;;:::i;1429:64::-;;;;;;;;;;-1:-1:-1;1429:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;17893:18;;;;;;;;;;;;;;;;15383:27;;;;;;;;;;-1:-1:-1;15383:27:0;;;;;;;;1057:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2693:217::-;2794:10;2767:4;2784:21;;;:9;:21;;;;;;;;;:30;;;;;;;;;;:39;;;2841:37;2767:4;;2784:30;;2841:37;;;;2817:6;7102:25:1;;7090:2;7075:18;;6956:177;2841:37:0;;;;;;;;-1:-1:-1;2898:4:0;2693:217;;;;:::o;20375:84::-;15943:5;;;;15929:10;:19;15921:41;;;;;;;11257:2:1;15921:41:0;;;11239:21:1;11296:1;11276:18;;;11269:29;11334:11;11314:18;;;11307:39;11363:18;;15921:41:0;;;;;;;;;20441:3:::1;:10:::0;20375:84::o;3311:612::-;3468:15;;;3433:4;3468:15;;;:9;:15;;;;;;;;3484:10;3468:27;;;;;;;;3559:17;3548:28;;3544:80;;3608:16;3618:6;3608:7;:16;:::i;:::-;3578:15;;;;;;;:9;:15;;;;;;;;3594:10;3578:27;;;;;;;:46;3544:80;3637:15;;;;;;;:9;:15;;;;;:25;;3656:6;;3637:15;:25;;3656:6;;3637:25;:::i;:::-;;;;-1:-1:-1;;3813:13:0;;;;;;;;:9;:13;;;;;;;:23;;;;;;3865:26;3813:13;;3865:26;;;;;;;3830:6;7102:25:1;;7090:2;7075:18;;6956:177;3865:26:0;;;;;;;;-1:-1:-1;3911:4:0;;3311:612;-1:-1:-1;;;;3311:612:0:o;19886:261::-;15009:16;;15029:1;15009:21;15001:44;;;;;;;9540:2:1;15001:44:0;;;9522:21:1;9579:2;9559:18;;;9552:30;9618:12;9598:18;;;9591:40;9648:18;;15001:44:0;9338:334:1;15001:44:0;15077:1;15058:16;:20;;;19999:11;19950:12:::1;::::0;19966:29:::1;19974:21;19966:5:::0;:29:::1;:::i;:::-;19965:45;;;;:::i;:::-;19950:60;;20023:24;20029:10;20041:5;20023;:24::i;:::-;20060:32;:10;20087:4:::0;20060:26:::1;:32::i;:::-;20110:29;::::0;7102:25:1;;;20121:10:0::1;::::0;20110:29:::1;::::0;7090:2:1;7075:18;20110:29:0::1;;;;;;;;-1:-1:-1::0;;15124:1:0;15105:16;:20;19886:261::o;5151:179::-;5208:7;5252:16;5235:13;:33;:87;;5298:24;:22;:24::i;:::-;5228:94;;5151:179;:::o;5235:87::-;-1:-1:-1;5271:24:0;;5151:179::o;16049:219::-;16113:12;;;;16099:10;:26;16091:56;;;;;;;10563:2:1;16091:56:0;;;10545:21:1;10602:2;10582:18;;;10575:30;10641:19;10621:18;;;10614:47;10678:18;;16091:56:0;10361:341:1;16091:56:0;16177:5;;16163:32;;16184:10;;16163:32;16177:5;;16163:32;;16177:5;;16163:32;16206:5;:18;;;;;;16214:10;16206:18;;;;16235:12;:25;;;;;;;16049:219::o;18356:596::-;18534:4;15009:16;;15029:1;15009:21;15001:44;;;;;;;9540:2:1;15001:44:0;;;9522:21:1;9579:2;9559:18;;;9552:30;9618:12;9598:18;;;9591:40;9648:18;;15001:44:0;9338:334:1;15001:44:0;15077:1;15058:16;:20;18551:12:::1;18566:28;18551:12:::0;18587:6;18566:8:::1;:28::i;:::-;18551:43:::0;-1:-1:-1;18633:21:0::1;18667:41;:33;::::0;::::1;18701:6:::0;18667:33:::1;:41::i;:::-;18725:64;::::0;;;;17839:45:::1;::::0;18725:20:::1;::::0;::::1;::::0;::::1;::::0;:64:::1;::::0;18746:10:::1;::::0;18766:1:::1;::::0;18770:6;;18778:4;;18784;;;;18725:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:84;18721:113;;18818:16;;;;;;;;;;;;;;18721:113;18876:22;18894:4:::0;18876:15;:22:::1;:::i;:::-;18851:21;:47;18847:73;;18907:13;;;;;;;;;;;;;;18847:73;18940:4;18933:11;;;;15124:1:::0;15105:16;:20;18356:596;;-1:-1:-1;;;;;18356:596:0:o;1084:20::-;;;;;;;:::i;2918:385::-;3015:10;2988:4;3005:21;;;:9;:21;;;;;:31;;3030:6;;3005:21;2988:4;;3005:31;;3030:6;;3005:31;:::i;:::-;;;;-1:-1:-1;;3187:13:0;;;;;;;:9;:13;;;;;;;:23;;;;;;3239:32;3248:10;;3239:32;;;;3204:6;7102:25:1;;7090:2;7075:18;;6956:177;16454:381:0;15943:5;;;;15929:10;:19;15921:41;;;;;;;11257:2:1;15921:41:0;;;11239:21:1;11296:1;11276:18;;;11269:29;11334:11;11314:18;;;11307:39;11363:18;;15921:41:0;11055:332:1;15921:41:0;16547:23:::1;::::0;::::1;16539:48;;;::::0;::::1;::::0;;9879:2:1;16539:48:0::1;::::0;::::1;9861:21:1::0;9918:2;9898:18;;;9891:30;9957:14;9937:18;;;9930:42;9989:18;;16539:48:0::1;9677:336:1::0;16539:48:0::1;16602:6;16598:230;;;16625:5;:17:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;16662:36:::1;::::0;16676:10:::1;::::0;16662:36:::1;::::0;-1:-1:-1;;16662:36:0::1;16454:381:::0;;:::o;16598:230::-:1;16731:12;:24:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;16775:41:::1;::::0;16794:10:::1;::::0;16775:41:::1;::::0;-1:-1:-1;;16775:41:0::1;16454:381:::0;;:::o;19438:440::-;15009:16;;15029:1;15009:21;15001:44;;;;;;;9540:2:1;15001:44:0;;;9522:21:1;9579:2;9559:18;;;9552:30;9618:12;9598:18;;;9591:40;9648:18;;15001:44:0;9338:334:1;15001:44:0;15077:1;15058:16;:20;;;19518:11;19496:19:::1;19561:33;19585:9;19561:21;:33;:::i;:::-;19542:52:::0;-1:-1:-1;19611:16:0;;;:33:::1;;-1:-1:-1::0;19631:13:0;;19611:33:::1;19607:216;;;19661:28;19667:10;19679:9;19661:5;:28::i;:::-;19607:216;;;19722:12;19765:8:::0;19738:23:::1;19750:11:::0;19738:9:::1;:23;:::i;:::-;19737:36;;;;:::i;:::-;19722:51;;19788:23;19794:10;19806:4;19788:5;:23::i;:::-;19707:116;19607:216;19840:30;::::0;19860:9:::1;7102:25:1::0;;19848:10:0::1;::::0;19840:30:::1;::::0;7090:2:1;7075:18;19840:30:0::1;6956:177:1::0;4120:1023:0;4348:15;4336:8;:27;;4328:63;;;;;;;11594:2:1;4328:63:0;;;11576:21:1;11633:2;11613:18;;;11606:30;11672:25;11652:18;;;11645:53;11715:18;;4328:63:0;11392:347:1;4328:63:0;4561:14;4678:18;:16;:18::i;:::-;4780:13;;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;4729:77;;1743:95;4729:77;;;7425:25:1;7527:18;;;7520:43;;;;7599:15;;;7579:18;;;7572:43;7631:18;;;7624:34;;;7674:19;;;7667:35;;;;7718:19;;;;7711:35;;;4729:77:0;;;;;;;;;;7397:19:1;;;4729:77:0;;;4719:88;;;;;;;;5533:66:1;4606:220:0;;;5521:79:1;5616:11;;;5609:27;;;;5652:12;;;5645:28;;;;5689:12;;4606:220:0;;;;;;;;;;;;;4578:263;;4606:220;4578:263;;;;4858:24;4885:26;;;;;;;;;8501:25:1;;;8574:4;8562:17;;8542:18;;;8535:45;;;;8596:18;;;8589:34;;;8639:18;;;8632:34;;;4578:263:0;;-1:-1:-1;4858:24:0;4885:26;;8473:19:1;;4885:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4885:26:0;;;;;;-1:-1:-1;;4936:30:0;;;;;;;:59;;;4990:5;4970:25;;:16;:25;;;4936:59;4928:86;;;;;;;10220:2:1;4928:86:0;;;10202:21:1;10259:2;10239:18;;;10232:30;10298:16;10278:18;;;10271:44;10332:18;;4928:86:0;10018:338:1;4928:86:0;5031:27;;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5104:31;7102:25:1;;;5031:36:0;;-1:-1:-1;5104:31:0;;;;;;7075:18:1;5104:31:0;;;;;;;4120:1023;;;;;;;:::o;18960:153::-;19058:7;19100:5;19094:3;;19085:6;:12;;;;:::i;:::-;:20;;;;:::i;:::-;19078:27;18960:153;-1:-1:-1;;;18960:153:0:o;6345:338::-;6418:15;;;;;;;:9;:15;;;;;:25;;6437:6;;6418:15;:25;;6437:6;;6418:25;:::i;:::-;;;;-1:-1:-1;;6591:11:0;:21;;;;;;;6641:34;;7102:25:1;;;-1:-1:-1;;6641:34:0;;;;;;7090:2:1;7075:18;6641:34:0;;;;;;;;6345:338;;:::o;7371:314::-;7444:15;7610:1;7607;7604;7601;7593:6;7589:2;7582:5;7577:35;7563:49;;7643:10;7635:42;;;;;;;10909:2:1;7635:42:0;;;10891:21:1;10948:2;10928:18;;;10921:30;10987:21;10967:18;;;10960:49;11026:18;;7635:42:0;10707:343:1;7635:42:0;7433:252;7371:314;;:::o;5338:464::-;5403:7;5504:95;5638:4;5622:22;;;;;;:::i;:::-;;;;;;;;;;5677:10;;;;;;;;;;;;;;5471:308;;;;;8016:25:1;;;;8057:18;;8050:34;;;;5667:21:0;8100:18:1;;;8093:34;5711:13:0;8143:18:1;;;8136:34;5755:4:0;8186:19:1;;;8179:84;7988:19;;5471:308:0;;;;;;;;;;;;5443:351;;;;;;5423:371;;5338:464;:::o;6002:335::-;6088:6;6073:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;6245:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;6297:32;7102:25:1;;;6297:32:0;;7075:18:1;6297:32:0;6956:177:1;14:247;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:388::-;334:6;342;395:2;383:9;374:7;370:23;366:32;363:52;;;411:1;408;401:12;363:52;450:9;437:23;469:31;494:5;469:31;:::i;:::-;519:5;-1:-1:-1;576:2:1;561:18;;548:32;589:33;548:32;589:33;:::i;:::-;641:7;631:17;;;266:388;;;;;:::o;659:456::-;736:6;744;752;805:2;793:9;784:7;780:23;776:32;773:52;;;821:1;818;811:12;773:52;860:9;847:23;879:31;904:5;879:31;:::i;:::-;929:5;-1:-1:-1;986:2:1;971:18;;958:32;999:33;958:32;999:33;:::i;:::-;659:456;;1051:7;;-1:-1:-1;;;1105:2:1;1090:18;;;;1077:32;;659:456::o;1120:829::-;1231:6;1239;1247;1255;1263;1271;1279;1332:3;1320:9;1311:7;1307:23;1303:33;1300:53;;;1349:1;1346;1339:12;1300:53;1388:9;1375:23;1407:31;1432:5;1407:31;:::i;:::-;1457:5;-1:-1:-1;1514:2:1;1499:18;;1486:32;1527:33;1486:32;1527:33;:::i;:::-;1579:7;-1:-1:-1;1633:2:1;1618:18;;1605:32;;-1:-1:-1;1684:2:1;1669:18;;1656:32;;-1:-1:-1;1740:3:1;1725:19;;1712:33;1789:4;1776:18;;1764:31;;1754:59;;1809:1;1806;1799:12;1754:59;1120:829;;;;-1:-1:-1;1120:829:1;;;;1832:7;1886:3;1871:19;;1858:33;;-1:-1:-1;1938:3:1;1923:19;;;1910:33;;1120:829;-1:-1:-1;;1120:829:1:o;1954:416::-;2019:6;2027;2080:2;2068:9;2059:7;2055:23;2051:32;2048:52;;;2096:1;2093;2086:12;2048:52;2135:9;2122:23;2154:31;2179:5;2154:31;:::i;:::-;2204:5;-1:-1:-1;2261:2:1;2246:18;;2233:32;2303:15;;2296:23;2284:36;;2274:64;;2334:1;2331;2324:12;2375:315;2443:6;2451;2504:2;2492:9;2483:7;2479:23;2475:32;2472:52;;;2520:1;2517;2510:12;2472:52;2559:9;2546:23;2578:31;2603:5;2578:31;:::i;:::-;2628:5;2680:2;2665:18;;;;2652:32;;-1:-1:-1;;;2375:315:1:o;2695:184::-;2765:6;2818:2;2806:9;2797:7;2793:23;2789:32;2786:52;;;2834:1;2831;2824:12;2786:52;-1:-1:-1;2857:16:1;;2695:184;-1:-1:-1;2695:184:1:o;2884:965::-;3010:6;3018;3026;3034;3042;3095:3;3083:9;3074:7;3070:23;3066:33;3063:53;;;3112:1;3109;3102:12;3063:53;3151:9;3138:23;3170:31;3195:5;3170:31;:::i;:::-;3220:5;-1:-1:-1;3277:2:1;3262:18;;3249:32;3290:33;3249:32;3290:33;:::i;:::-;3342:7;-1:-1:-1;3396:2:1;3381:18;;3368:32;;-1:-1:-1;3451:2:1;3436:18;;3423:32;3474:18;3504:14;;;3501:34;;;3531:1;3528;3521:12;3501:34;3569:6;3558:9;3554:22;3544:32;;3614:7;3607:4;3603:2;3599:13;3595:27;3585:55;;3636:1;3633;3626:12;3585:55;3676:2;3663:16;3702:2;3694:6;3691:14;3688:34;;;3718:1;3715;3708:12;3688:34;3763:7;3758:2;3749:6;3745:2;3741:15;3737:24;3734:37;3731:57;;;3784:1;3781;3774:12;3731:57;2884:965;;;;-1:-1:-1;2884:965:1;;-1:-1:-1;3815:2:1;3807:11;;3837:6;2884:965;-1:-1:-1;;;2884:965:1:o;3854:180::-;3913:6;3966:2;3954:9;3945:7;3941:23;3937:32;3934:52;;;3982:1;3979;3972:12;3934:52;-1:-1:-1;4005:23:1;;3854:180;-1:-1:-1;3854:180:1:o;4039:1219::-;4169:3;4198:1;4231:6;4225:13;4261:3;4283:1;4311:9;4307:2;4303:18;4293:28;;4371:2;4360:9;4356:18;4393;4383:61;;4437:4;4429:6;4425:17;4415:27;;4383:61;4463:2;4511;4503:6;4500:14;4480:18;4477:38;4474:222;;;4550:77;4545:3;4538:90;4651:4;4648:1;4641:15;4681:4;4676:3;4669:17;4474:222;4712:18;4739:162;;;;4915:1;4910:323;;;;4705:528;;4739:162;4787:66;4776:9;4772:82;4767:3;4760:95;4884:6;4879:3;4875:16;4868:23;;4739:162;;4910:323;12191:1;12184:14;;;12228:4;12215:18;;5008:1;5022:165;5036:6;5033:1;5030:13;5022:165;;;5114:14;;5101:11;;;5094:35;5157:16;;;;5051:10;;5022:165;;;5026:3;;5216:6;5211:3;5207:16;5200:23;;4705:528;-1:-1:-1;5249:3:1;;4039:1219;-1:-1:-1;;;;;;;;4039:1219:1:o;5943:816::-;6175:4;6204:42;6285:2;6277:6;6273:15;6262:9;6255:34;6337:2;6329:6;6325:15;6320:2;6309:9;6305:18;6298:43;;6377:6;6372:2;6361:9;6357:18;6350:34;6420:6;6415:2;6404:9;6400:18;6393:34;6464:3;6458;6447:9;6443:19;6436:32;6505:6;6499:3;6488:9;6484:19;6477:35;6563:6;6555;6549:3;6538:9;6534:19;6521:49;6620:1;6614:3;6605:6;6594:9;6590:22;6586:32;6579:43;6749:3;6679:66;6674:2;6666:6;6662:15;6658:88;6647:9;6643:104;6639:114;6631:122;;5943:816;;;;;;;;;:::o;8677:656::-;8789:4;8818:2;8847;8836:9;8829:21;8879:6;8873:13;8922:6;8917:2;8906:9;8902:18;8895:34;8947:1;8957:140;8971:6;8968:1;8965:13;8957:140;;;9066:14;;;9062:23;;9056:30;9032:17;;;9051:2;9028:26;9021:66;8986:10;;8957:140;;;9115:6;9112:1;9109:13;9106:91;;;9185:1;9180:2;9171:6;9160:9;9156:22;9152:31;9145:42;9106:91;-1:-1:-1;9249:2:1;9237:15;9254:66;9233:88;9218:104;;;;9324:2;9214:113;;8677:656;-1:-1:-1;;;8677:656:1:o;12244:128::-;12284:3;12315:1;12311:6;12308:1;12305:13;12302:39;;;12321:18;;:::i;:::-;-1:-1:-1;12357:9:1;;12244:128::o;12377:274::-;12417:1;12443;12433:189;;12478:77;12475:1;12468:88;12579:4;12576:1;12569:15;12607:4;12604:1;12597:15;12433:189;-1:-1:-1;12636:9:1;;12377:274::o;12656:228::-;12696:7;12822:1;12754:66;12750:74;12747:1;12744:81;12739:1;12732:9;12725:17;12721:105;12718:131;;;12829:18;;:::i;:::-;-1:-1:-1;12869:9:1;;12656:228::o;12889:125::-;12929:4;12957:1;12954;12951:8;12948:34;;;12962:18;;:::i;:::-;-1:-1:-1;12999:9:1;;12889:125::o;13019:437::-;13098:1;13094:12;;;;13141;;;13162:61;;13216:4;13208:6;13204:17;13194:27;;13162:61;13269:2;13261:6;13258:14;13238:18;13235:38;13232:218;;;13306:77;13303:1;13296:88;13407:4;13404:1;13397:15;13435:4;13432:1;13425:15;13232:218;;13019:437;;;:::o;13461:184::-;13513:77;13510:1;13503:88;13610:4;13607:1;13600:15;13634:4;13631:1;13624:15;13650:154;13736:42;13729:5;13725:54;13718:5;13715:65;13705:93;;13794:1;13791;13784:12;13705:93;13650:154;:::o
Swarm Source
ipfs://adc54e8282bfbfb9d8ff6cae4592764fc25482e418c0cdcc511854fe139ff2c0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.