ERC-20
DeFi
Overview
Max Total Supply
16,000,000 UwU
Holders
905 (0.00%)
Market
Price
$0.84 @ 0.000324 ETH (-7.46%)
Onchain Market Cap
$13,373,024.00
Circulating Supply Market Cap
$6,257,401.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.141599386129310508 UwUValue
$0.12 ( ~4.6489275327193E-05 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
UwU
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-18 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract BoringOwnableData { address public owner; address public pendingOwner; } contract BoringOwnable is BoringOwnableData { event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /// @notice `owner` defaults to msg.sender on construction. constructor() { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } /// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner. /// Can only be invoked by the current `owner`. /// @param newOwner Address of the new owner. /// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`. /// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise. function transferOwnership( address newOwner, bool direct, bool renounce ) public onlyOwner { if (direct) { // Checks require(newOwner != address(0) || renounce, "Ownable: zero address"); // Effects emit OwnershipTransferred(owner, newOwner); owner = newOwner; pendingOwner = address(0); } else { // Effects pendingOwner = newOwner; } } /// @notice Needs to be called by `pendingOwner` to claim ownership. function claimOwnership() public { address _pendingOwner = pendingOwner; // Checks require(msg.sender == _pendingOwner, "Ownable: caller != pending owner"); // Effects emit OwnershipTransferred(owner, _pendingOwner); owner = _pendingOwner; pendingOwner = address(0); } /// @notice Only allows the `owner` to execute the function. modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } } contract Domain { bytes32 private constant DOMAIN_SEPARATOR_SIGNATURE_HASH = keccak256("EIP712Domain(uint256 chainId,address verifyingContract)"); // See https://eips.ethereum.org/EIPS/eip-191 string private constant EIP191_PREFIX_FOR_EIP712_STRUCTURED_DATA = "\x19\x01"; // solhint-disable var-name-mixedcase bytes32 private immutable _DOMAIN_SEPARATOR; uint256 private immutable DOMAIN_SEPARATOR_CHAIN_ID; /// @dev Calculate the DOMAIN_SEPARATOR function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) { return keccak256( abi.encode( DOMAIN_SEPARATOR_SIGNATURE_HASH, chainId, address(this) ) ); } constructor() { uint256 chainId; assembly {chainId := chainid()} _DOMAIN_SEPARATOR = _calculateDomainSeparator(DOMAIN_SEPARATOR_CHAIN_ID = chainId); } /// @dev Return the DOMAIN_SEPARATOR // It's named internal to allow making it public from the contract that uses it by creating a simple view function // with the desired public name, such as DOMAIN_SEPARATOR or domainSeparator. // solhint-disable-next-line func-name-mixedcase function _domainSeparator() internal view returns (bytes32) { uint256 chainId; assembly {chainId := chainid()} return chainId == DOMAIN_SEPARATOR_CHAIN_ID ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId); } function _getDigest(bytes32 dataHash) internal view returns (bytes32 digest) { digest = keccak256( abi.encodePacked( EIP191_PREFIX_FOR_EIP712_STRUCTURED_DATA, _domainSeparator(), dataHash ) ); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, 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); /// @notice EIP 2612 function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } // Data part taken out for building of contracts that receive delegate calls contract ERC20Data { /// @notice owner > balance mapping. mapping(address => uint256) public balanceOf; /// @notice owner > spender > allowance mapping. mapping(address => mapping(address => uint256)) public allowance; /// @notice owner > nonce mapping. Used in `permit`. mapping(address => uint256) public nonces; } abstract contract ERC20 is IERC20, Domain { /// @notice owner > balance mapping. mapping(address => uint256) public override balanceOf; /// @notice owner > spender > allowance mapping. mapping(address => mapping(address => uint256)) public override allowance; /// @notice owner > nonce mapping. Used in `permit`. mapping(address => uint256) public nonces; /// @notice Transfers `amount` tokens from `msg.sender` to `to`. /// @param to The address to move the tokens. /// @param amount of the tokens to move. /// @return (bool) Returns True if succeeded. function transfer(address to, uint256 amount) public returns (bool) { // If `amount` is 0, or `msg.sender` is `to` nothing happens if (amount != 0 || msg.sender == to) { uint256 srcBalance = balanceOf[msg.sender]; require(srcBalance >= amount, "ERC20: balance too low"); if (msg.sender != to) { require(to != address(0), "ERC20: no zero address"); // Moved down so low balance calls safe some gas balanceOf[msg.sender] = srcBalance - amount; // Underflow is checked balanceOf[to] += amount; } } emit Transfer(msg.sender, to, amount); return true; } /// @notice Transfers `amount` tokens from `from` to `to`. Caller needs approval for `from`. /// @param from Address to draw tokens from. /// @param to The address to move the tokens. /// @param amount The token amount to move. /// @return (bool) Returns True if succeeded. function transferFrom( address from, address to, uint256 amount ) public returns (bool) { // If `amount` is 0, or `from` is `to` nothing happens if (amount != 0) { uint256 srcBalance = balanceOf[from]; require(srcBalance >= amount, "ERC20: balance too low"); if (from != to) { uint256 spenderAllowance = allowance[from][msg.sender]; // If allowance is infinite, don't decrease it to save on gas (breaks with EIP-20). if (spenderAllowance != type(uint256).max) { require(spenderAllowance >= amount, "ERC20: allowance too low"); allowance[from][msg.sender] = spenderAllowance - amount; // Underflow is checked } require(to != address(0), "ERC20: no zero address"); // Moved down so other failed calls safe some gas balanceOf[from] = srcBalance - amount; // Underflow is checked balanceOf[to] += amount; } } emit Transfer(from, to, amount); return true; } /// @notice Approves `amount` from sender to be spend by `spender`. /// @param spender Address of the party that can draw from msg.sender's account. /// @param amount The maximum collective amount that `spender` can draw. /// @return (bool) Returns True if approved. function approve(address spender, uint256 amount) public override returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32) { return _domainSeparator(); } // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 private constant PERMIT_SIGNATURE_HASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; /// @notice Approves `value` from `owner_` to be spend by `spender`. /// @param owner_ Address of the owner. /// @param spender The address of the spender that gets approved to draw from `owner_`. /// @param value The maximum collective amount that `spender` can draw. /// @param deadline This permit must be redeemed before this deadline (UTC timestamp in seconds). function permit( address owner_, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external override { require(owner_ != address(0), "ERC20: Owner cannot be 0"); require(block.timestamp < deadline, "ERC20: Expired"); require( ecrecover(_getDigest(keccak256(abi.encode(PERMIT_SIGNATURE_HASH, owner_, spender, value, nonces[owner_]++, deadline))), v, r, s) == owner_, "ERC20: Invalid Signature" ); allowance[owner_][spender] = value; emit Approval(owner_, spender, value); } } library BoringMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) { require((c = a + b) >= b, "BoringMath: Add Overflow"); } function sub(uint256 a, uint256 b) internal pure returns (uint256 c) { require((c = a - b) <= a, "BoringMath: Underflow"); } function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { require(b == 0 || (c = a * b) / b == a, "BoringMath: Mul Overflow"); } } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } /// @title UwU /// @author 0xForklend contract UwU is ERC20, BoringOwnable { using BoringMath for uint256; using EnumerableSet for EnumerableSet.AddressSet; string public constant symbol = "UwU"; string public constant name = "UwU Lend"; uint8 public constant decimals = 18; uint256 public override totalSupply; uint256 public constant MAX_SUPPLY = 16 * 1e24; EnumerableSet.AddressSet private minters; EnumerableSet.AddressSet private burners; function mint(address to, uint256 amount) public isMinter { _mint(to, amount); } function burn(address to, uint256 amount) public isBurner { _burn(to, amount); } function _mint(address to, uint256 amount) internal { require(to != address(0), "UwU: no mint to zero address"); require(MAX_SUPPLY >= totalSupply.add(amount), "UwU: Don't go over MAX"); totalSupply = totalSupply + amount; balanceOf[to] += amount; emit Transfer(address(0), to, amount); } function _burn(address to, uint256 amount) internal { require(balanceOf[to] >= amount, "Burn too much"); totalSupply -= amount; balanceOf[to] -= amount; emit Transfer(to, address(0), amount); } function addMinter(address who) public onlyOwner { require(!minters.contains(who), 'exists'); minters.add(who); } function removeMinter(address who) public onlyOwner { require(minters.contains(who), '!exists'); minters.remove(who); } function getMinters() public view returns(address[] memory) { return minters.values(); } function addBurner(address who) public onlyOwner { require(!burners.contains(who), 'exists'); burners.add(who); } function removeBurner(address who) public onlyOwner { require(burners.contains(who), '!exists'); burners.remove(who); } function getBurners() public view returns(address[] memory) { return burners.values(); } modifier isMinter() { require(minters.contains(msg.sender), '!minter'); _; } modifier isBurner() { require(burners.contains(msg.sender), '!burner'); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"addBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"who","type":"address"}],"name":"removeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"removeMinter","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":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b504660a081905261007481604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152908101829052306060820152600090608001604051602081830303815290604052805190602001209050919050565b60805250600380546001600160a01b031916339081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360805160a0516117146100dd6000396000610e9301526000610ec801526117146000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636b32810b116100de578063983b2d5611610097578063d505accf11610071578063d505accf1461036f578063dd62ed3e14610382578063e30c3978146103ad578063f44637ba146103c057600080fd5b8063983b2d56146103365780639dc29fac14610349578063a9059cbb1461035c57600080fd5b80636b32810b1461028c57806370a08231146102a15780637ecebe00146102c157806386fe8b43146102e15780638da5cb5b146102e957806395d89b411461031457600080fd5b80633092afd5116101305780633092afd51461022a578063313ce5671461023d57806332cb6b0c146102575780633644e5151461026957806340c10f19146102715780634e71e0c81461028457600080fd5b8063028468581461017857806306fdde031461018d578063078dfbe7146101ca578063095ea7b3146101dd57806318160ddd1461020057806323b872dd14610217575b600080fd5b61018b6101863660046113ae565b6103d3565b005b6101b460405180604001604052806008815260200167155dd54813195b9960c21b81525081565b6040516101c191906113f9565b60405180910390f35b61018b6101d836600461143c565b610456565b6101f06101eb36600461147f565b610566565b60405190151581526020016101c1565b61020960055481565b6040519081526020016101c1565b6101f06102253660046114a9565b6105d3565b61018b6102383660046113ae565b6107df565b610245601281565b60405160ff90911681526020016101c1565b6102096a0d3c21bcecceda1000000081565b610209610855565b61018b61027f36600461147f565b610864565b61018b6108af565b61029461096d565b6040516101c191906114e5565b6102096102af3660046113ae565b60006020819052908152604090205481565b6102096102cf3660046113ae565b60026020526000908152604090205481565b610294610979565b6003546102fc906001600160a01b031681565b6040516001600160a01b0390911681526020016101c1565b6101b46040518060400160405280600381526020016255775560e81b81525081565b61018b6103443660046113ae565b610985565b61018b61035736600461147f565b6109fb565b6101f061036a36600461147f565b610a46565b61018b61037d366004611532565b610b8b565b6102096103903660046115a5565b600160209081526000928352604080842090915290825290205481565b6004546102fc906001600160a01b031681565b61018b6103ce3660046113ae565b610dde565b6003546001600160a01b031633146104065760405162461bcd60e51b81526004016103fd906115d8565b60405180910390fd5b610411600882610e54565b6104475760405162461bcd60e51b81526020600482015260076024820152662165786973747360c81b60448201526064016103fd565b610452600882610e79565b5050565b6003546001600160a01b031633146104805760405162461bcd60e51b81526004016103fd906115d8565b8115610544576001600160a01b03831615158061049a5750805b6104de5760405162461bcd60e51b81526020600482015260156024820152744f776e61626c653a207a65726f206164647265737360581b60448201526064016103fd565b6003546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0385166001600160a01b031991821617909155600480549091169055505050565b600480546001600160a01b0385166001600160a01b0319909116179055505050565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105c19086815260200190565b60405180910390a35060015b92915050565b6000811561079a576001600160a01b0384166000908152602081905260409020548281101561063d5760405162461bcd60e51b815260206004820152601660248201527545524332303a2062616c616e636520746f6f206c6f7760501b60448201526064016103fd565b836001600160a01b0316856001600160a01b031614610798576001600160a01b0385166000908152600160209081526040808320338452909152902054600019811461070257838110156106d35760405162461bcd60e51b815260206004820152601860248201527f45524332303a20616c6c6f77616e636520746f6f206c6f77000000000000000060448201526064016103fd565b6106dd8482611623565b6001600160a01b03871660009081526001602090815260408083203384529091529020555b6001600160a01b0385166107515760405162461bcd60e51b815260206004820152601660248201527545524332303a206e6f207a65726f206164647265737360501b60448201526064016103fd565b61075b8483611623565b6001600160a01b03808816600090815260208190526040808220939093559087168152908120805486929061079190849061163a565b9091555050505b505b826001600160a01b0316846001600160a01b03166000805160206116bf833981519152846040516107cd91815260200190565b60405180910390a35060019392505050565b6003546001600160a01b031633146108095760405162461bcd60e51b81526004016103fd906115d8565b610814600682610e54565b61084a5760405162461bcd60e51b81526020600482015260076024820152662165786973747360c81b60448201526064016103fd565b610452600682610e79565b600061085f610e8e565b905090565b61086f600633610e54565b6108a55760405162461bcd60e51b815260206004820152600760248201526610b6b4b73a32b960c91b60448201526064016103fd565b6104528282610eee565b6004546001600160a01b031633811461090a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657260448201526064016103fd565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b039092166001600160a01b0319928316179055600480549091169055565b606061085f6006611016565b606061085f6008611016565b6003546001600160a01b031633146109af5760405162461bcd60e51b81526004016103fd906115d8565b6109ba600682610e54565b156109f05760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b60448201526064016103fd565b610452600682611023565b610a06600833610e54565b610a3c5760405162461bcd60e51b815260206004820152600760248201526610b13ab93732b960c91b60448201526064016103fd565b6104528282611038565b600081151580610a5e5750336001600160a01b038416145b15610b60573360009081526020819052604090205482811015610abc5760405162461bcd60e51b815260206004820152601660248201527545524332303a2062616c616e636520746f6f206c6f7760501b60448201526064016103fd565b336001600160a01b03851614610b5e576001600160a01b038416610b1b5760405162461bcd60e51b815260206004820152601660248201527545524332303a206e6f207a65726f206164647265737360501b60448201526064016103fd565b610b258382611623565b33600090815260208190526040808220929092556001600160a01b03861681529081208054859290610b5890849061163a565b90915550505b505b6040518281526001600160a01b0384169033906000805160206116bf833981519152906020016105c1565b6001600160a01b038716610be15760405162461bcd60e51b815260206004820152601860248201527f45524332303a204f776e65722063616e6e6f742062652030000000000000000060448201526064016103fd565b834210610c215760405162461bcd60e51b815260206004820152600e60248201526d115490cc8c0e88115e1c1a5c995960921b60448201526064016103fd565b6001600160a01b03871660008181526002602052604081208054600192610ccb927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d9291610c7483611652565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e00160405160208183030381529060405280519060200120611100565b6040805160008152602081018083529290925260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b505050602060405103516001600160a01b031614610d795760405162461bcd60e51b815260206004820152601860248201527f45524332303a20496e76616c6964205369676e6174757265000000000000000060448201526064016103fd565b6001600160a01b038781166000818152600160209081526040808320948b168084529482529182902089905590518881527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6003546001600160a01b03163314610e085760405162461bcd60e51b81526004016103fd906115d8565b610e13600882610e54565b15610e495760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b60448201526064016103fd565b610452600882611023565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610e72836001600160a01b038416611155565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610ec657610ec181611248565b610ee8565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6001600160a01b038216610f445760405162461bcd60e51b815260206004820152601c60248201527f5577553a206e6f206d696e7420746f207a65726f20616464726573730000000060448201526064016103fd565b600554610f519082611289565b6a0d3c21bcecceda100000001015610fa45760405162461bcd60e51b81526020600482015260166024820152750aaeeaa744088dedc4ee840cede40deeccae4409a82b60531b60448201526064016103fd565b80600554610fb2919061163a565b6005556001600160a01b03821660009081526020819052604081208054839290610fdd90849061163a565b90915550506040518181526001600160a01b038316906000906000805160206116bf833981519152906020015b60405180910390a35050565b60606000610e72836112e7565b6000610e72836001600160a01b038416611343565b6001600160a01b0382166000908152602081905260409020548111156110905760405162461bcd60e51b815260206004820152600d60248201526c084eae4dc40e8dede40daeac6d609b1b60448201526064016103fd565b80600560008282546110a29190611623565b90915550506001600160a01b038216600090815260208190526040812080548392906110cf908490611623565b90915550506040518181526000906001600160a01b038416906000805160206116bf8339815191529060200161100a565b600060405180604001604052806002815260200161190160f01b815250611125610e8e565b836040516020016111389392919061166b565b604051602081830303815290604052805190602001209050919050565b6000818152600183016020526040812054801561123e576000611179600183611623565b855490915060009061118d90600190611623565b90508181146111f25760008660000182815481106111ad576111ad611692565b90600052602060002001549050808760000184815481106111d0576111d0611692565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611203576112036116a8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105cd565b60009150506105cd565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152908101829052306060820152600090608001611138565b600081611296818561163a565b91508110156105cd5760405162461bcd60e51b815260206004820152601860248201527f426f72696e674d6174683a20416464204f766572666c6f77000000000000000060448201526064016103fd565b60608160000180548060200260200160405190810160405280929190818152602001828054801561133757602002820191906000526020600020905b815481526020019060010190808311611323575b50505050509050919050565b600081815260018301602052604081205461138a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105cd565b5060006105cd565b80356001600160a01b03811681146113a957600080fd5b919050565b6000602082840312156113c057600080fd5b610e7282611392565b60005b838110156113e45781810151838201526020016113cc565b838111156113f3576000848401525b50505050565b60208152600082518060208401526114188160408501602087016113c9565b601f01601f19169190910160400192915050565b803580151581146113a957600080fd5b60008060006060848603121561145157600080fd5b61145a84611392565b92506114686020850161142c565b91506114766040850161142c565b90509250925092565b6000806040838503121561149257600080fd5b61149b83611392565b946020939093013593505050565b6000806000606084860312156114be57600080fd5b6114c784611392565b92506114d560208501611392565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b818110156115265783516001600160a01b031683529284019291840191600101611501565b50909695505050505050565b600080600080600080600060e0888a03121561154d57600080fd5b61155688611392565b965061156460208901611392565b95506040880135945060608801359350608088013560ff8116811461158857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156115b857600080fd5b6115c183611392565b91506115cf60208401611392565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000828210156116355761163561160d565b500390565b6000821982111561164d5761164d61160d565b500190565b6000600182016116645761166461160d565b5060010190565b6000845161167d8184602089016113c9565b91909101928352506020820152604001919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207c013370caf2dad11b6a87ead4e6ebf970b92dee827e6d0a064bce626836b27b64736f6c634300080f0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80636b32810b116100de578063983b2d5611610097578063d505accf11610071578063d505accf1461036f578063dd62ed3e14610382578063e30c3978146103ad578063f44637ba146103c057600080fd5b8063983b2d56146103365780639dc29fac14610349578063a9059cbb1461035c57600080fd5b80636b32810b1461028c57806370a08231146102a15780637ecebe00146102c157806386fe8b43146102e15780638da5cb5b146102e957806395d89b411461031457600080fd5b80633092afd5116101305780633092afd51461022a578063313ce5671461023d57806332cb6b0c146102575780633644e5151461026957806340c10f19146102715780634e71e0c81461028457600080fd5b8063028468581461017857806306fdde031461018d578063078dfbe7146101ca578063095ea7b3146101dd57806318160ddd1461020057806323b872dd14610217575b600080fd5b61018b6101863660046113ae565b6103d3565b005b6101b460405180604001604052806008815260200167155dd54813195b9960c21b81525081565b6040516101c191906113f9565b60405180910390f35b61018b6101d836600461143c565b610456565b6101f06101eb36600461147f565b610566565b60405190151581526020016101c1565b61020960055481565b6040519081526020016101c1565b6101f06102253660046114a9565b6105d3565b61018b6102383660046113ae565b6107df565b610245601281565b60405160ff90911681526020016101c1565b6102096a0d3c21bcecceda1000000081565b610209610855565b61018b61027f36600461147f565b610864565b61018b6108af565b61029461096d565b6040516101c191906114e5565b6102096102af3660046113ae565b60006020819052908152604090205481565b6102096102cf3660046113ae565b60026020526000908152604090205481565b610294610979565b6003546102fc906001600160a01b031681565b6040516001600160a01b0390911681526020016101c1565b6101b46040518060400160405280600381526020016255775560e81b81525081565b61018b6103443660046113ae565b610985565b61018b61035736600461147f565b6109fb565b6101f061036a36600461147f565b610a46565b61018b61037d366004611532565b610b8b565b6102096103903660046115a5565b600160209081526000928352604080842090915290825290205481565b6004546102fc906001600160a01b031681565b61018b6103ce3660046113ae565b610dde565b6003546001600160a01b031633146104065760405162461bcd60e51b81526004016103fd906115d8565b60405180910390fd5b610411600882610e54565b6104475760405162461bcd60e51b81526020600482015260076024820152662165786973747360c81b60448201526064016103fd565b610452600882610e79565b5050565b6003546001600160a01b031633146104805760405162461bcd60e51b81526004016103fd906115d8565b8115610544576001600160a01b03831615158061049a5750805b6104de5760405162461bcd60e51b81526020600482015260156024820152744f776e61626c653a207a65726f206164647265737360581b60448201526064016103fd565b6003546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0385166001600160a01b031991821617909155600480549091169055505050565b600480546001600160a01b0385166001600160a01b0319909116179055505050565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105c19086815260200190565b60405180910390a35060015b92915050565b6000811561079a576001600160a01b0384166000908152602081905260409020548281101561063d5760405162461bcd60e51b815260206004820152601660248201527545524332303a2062616c616e636520746f6f206c6f7760501b60448201526064016103fd565b836001600160a01b0316856001600160a01b031614610798576001600160a01b0385166000908152600160209081526040808320338452909152902054600019811461070257838110156106d35760405162461bcd60e51b815260206004820152601860248201527f45524332303a20616c6c6f77616e636520746f6f206c6f77000000000000000060448201526064016103fd565b6106dd8482611623565b6001600160a01b03871660009081526001602090815260408083203384529091529020555b6001600160a01b0385166107515760405162461bcd60e51b815260206004820152601660248201527545524332303a206e6f207a65726f206164647265737360501b60448201526064016103fd565b61075b8483611623565b6001600160a01b03808816600090815260208190526040808220939093559087168152908120805486929061079190849061163a565b9091555050505b505b826001600160a01b0316846001600160a01b03166000805160206116bf833981519152846040516107cd91815260200190565b60405180910390a35060019392505050565b6003546001600160a01b031633146108095760405162461bcd60e51b81526004016103fd906115d8565b610814600682610e54565b61084a5760405162461bcd60e51b81526020600482015260076024820152662165786973747360c81b60448201526064016103fd565b610452600682610e79565b600061085f610e8e565b905090565b61086f600633610e54565b6108a55760405162461bcd60e51b815260206004820152600760248201526610b6b4b73a32b960c91b60448201526064016103fd565b6104528282610eee565b6004546001600160a01b031633811461090a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657260448201526064016103fd565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b039092166001600160a01b0319928316179055600480549091169055565b606061085f6006611016565b606061085f6008611016565b6003546001600160a01b031633146109af5760405162461bcd60e51b81526004016103fd906115d8565b6109ba600682610e54565b156109f05760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b60448201526064016103fd565b610452600682611023565b610a06600833610e54565b610a3c5760405162461bcd60e51b815260206004820152600760248201526610b13ab93732b960c91b60448201526064016103fd565b6104528282611038565b600081151580610a5e5750336001600160a01b038416145b15610b60573360009081526020819052604090205482811015610abc5760405162461bcd60e51b815260206004820152601660248201527545524332303a2062616c616e636520746f6f206c6f7760501b60448201526064016103fd565b336001600160a01b03851614610b5e576001600160a01b038416610b1b5760405162461bcd60e51b815260206004820152601660248201527545524332303a206e6f207a65726f206164647265737360501b60448201526064016103fd565b610b258382611623565b33600090815260208190526040808220929092556001600160a01b03861681529081208054859290610b5890849061163a565b90915550505b505b6040518281526001600160a01b0384169033906000805160206116bf833981519152906020016105c1565b6001600160a01b038716610be15760405162461bcd60e51b815260206004820152601860248201527f45524332303a204f776e65722063616e6e6f742062652030000000000000000060448201526064016103fd565b834210610c215760405162461bcd60e51b815260206004820152600e60248201526d115490cc8c0e88115e1c1a5c995960921b60448201526064016103fd565b6001600160a01b03871660008181526002602052604081208054600192610ccb927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d9291610c7483611652565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e00160405160208183030381529060405280519060200120611100565b6040805160008152602081018083529290925260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b505050602060405103516001600160a01b031614610d795760405162461bcd60e51b815260206004820152601860248201527f45524332303a20496e76616c6964205369676e6174757265000000000000000060448201526064016103fd565b6001600160a01b038781166000818152600160209081526040808320948b168084529482529182902089905590518881527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6003546001600160a01b03163314610e085760405162461bcd60e51b81526004016103fd906115d8565b610e13600882610e54565b15610e495760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b60448201526064016103fd565b610452600882611023565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610e72836001600160a01b038416611155565b6000467f00000000000000000000000000000000000000000000000000000000000000018114610ec657610ec181611248565b610ee8565b7f61c067aca3facbfcec2b9ba619c0bbc88261b073a95ee061f0368f5814382aee5b91505090565b6001600160a01b038216610f445760405162461bcd60e51b815260206004820152601c60248201527f5577553a206e6f206d696e7420746f207a65726f20616464726573730000000060448201526064016103fd565b600554610f519082611289565b6a0d3c21bcecceda100000001015610fa45760405162461bcd60e51b81526020600482015260166024820152750aaeeaa744088dedc4ee840cede40deeccae4409a82b60531b60448201526064016103fd565b80600554610fb2919061163a565b6005556001600160a01b03821660009081526020819052604081208054839290610fdd90849061163a565b90915550506040518181526001600160a01b038316906000906000805160206116bf833981519152906020015b60405180910390a35050565b60606000610e72836112e7565b6000610e72836001600160a01b038416611343565b6001600160a01b0382166000908152602081905260409020548111156110905760405162461bcd60e51b815260206004820152600d60248201526c084eae4dc40e8dede40daeac6d609b1b60448201526064016103fd565b80600560008282546110a29190611623565b90915550506001600160a01b038216600090815260208190526040812080548392906110cf908490611623565b90915550506040518181526000906001600160a01b038416906000805160206116bf8339815191529060200161100a565b600060405180604001604052806002815260200161190160f01b815250611125610e8e565b836040516020016111389392919061166b565b604051602081830303815290604052805190602001209050919050565b6000818152600183016020526040812054801561123e576000611179600183611623565b855490915060009061118d90600190611623565b90508181146111f25760008660000182815481106111ad576111ad611692565b90600052602060002001549050808760000184815481106111d0576111d0611692565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611203576112036116a8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105cd565b60009150506105cd565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152908101829052306060820152600090608001611138565b600081611296818561163a565b91508110156105cd5760405162461bcd60e51b815260206004820152601860248201527f426f72696e674d6174683a20416464204f766572666c6f77000000000000000060448201526064016103fd565b60608160000180548060200260200160405190810160405280929190818152602001828054801561133757602002820191906000526020600020905b815481526020019060010190808311611323575b50505050509050919050565b600081815260018301602052604081205461138a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105cd565b5060006105cd565b80356001600160a01b03811681146113a957600080fd5b919050565b6000602082840312156113c057600080fd5b610e7282611392565b60005b838110156113e45781810151838201526020016113cc565b838111156113f3576000848401525b50505050565b60208152600082518060208401526114188160408501602087016113c9565b601f01601f19169190910160400192915050565b803580151581146113a957600080fd5b60008060006060848603121561145157600080fd5b61145a84611392565b92506114686020850161142c565b91506114766040850161142c565b90509250925092565b6000806040838503121561149257600080fd5b61149b83611392565b946020939093013593505050565b6000806000606084860312156114be57600080fd5b6114c784611392565b92506114d560208501611392565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b818110156115265783516001600160a01b031683529284019291840191600101611501565b50909695505050505050565b600080600080600080600060e0888a03121561154d57600080fd5b61155688611392565b965061156460208901611392565b95506040880135945060608801359350608088013560ff8116811461158857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156115b857600080fd5b6115c183611392565b91506115cf60208401611392565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000828210156116355761163561160d565b500390565b6000821982111561164d5761164d61160d565b500190565b6000600182016116645761166461160d565b5060010190565b6000845161167d8184602089016113c9565b91909101928352506020820152604001919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207c013370caf2dad11b6a87ead4e6ebf970b92dee827e6d0a064bce626836b27b64736f6c634300080f0033
Deployed Bytecode Sourcemap
22128:2219:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23892:138;;;;;;:::i;:::-;;:::i;:::-;;22308:40;;;;;;;;;;;;;;;-1:-1:-1;;;22308:40:0;;;;;;;;;;;;:::i;:::-;;;;;;;;943:506;;;;;;:::i;:::-;;:::i;8128:214::-;;;;;;:::i;:::-;;:::i;:::-;;;1950:14:1;;1943:22;1925:41;;1913:2;1898:18;8128:214:0;1785:187:1;22397:35:0;;;;;;;;;2123:25:1;;;2111:2;2096:18;22397:35:0;1977:177:1;6682:1151:0;;;;;;:::i;:::-;;:::i;23498:138::-;;;;;;:::i;:::-;;:::i;22355:35::-;;22388:2;22355:35;;;;;2664:4:1;2652:17;;;2634:36;;2622:2;2607:18;22355:35:0;2492:184:1;22439:46:0;;22476:9;22439:46;;8404:104;;;:::i;22588:92::-;;;;;;:::i;:::-;;:::i;1531:340::-;;;:::i;23644:100::-;;;:::i;:::-;;;;;;;:::i;5152:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;5404:41;;;;;;:::i;:::-;;;;;;;;;;;;;;24038:100;;;:::i;96:20::-;;;;;-1:-1:-1;;;;;96:20:0;;;;;;-1:-1:-1;;;;;3690:32:1;;;3672:51;;3660:2;3645:18;96:20:0;3526:203:1;22264:37:0;;;;;;;;;;;;;;;-1:-1:-1;;;22264:37:0;;;;;23358:132;;;;;;:::i;:::-;;:::i;22688:92::-;;;;;;:::i;:::-;;:::i;5672:703::-;;;;;;:::i;:::-;;:::i;9137:674::-;;;;;;:::i;:::-;;:::i;5266:73::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;123:27;;;;;-1:-1:-1;;;;;123:27:0;;;23752:132;;;;;;:::i;:::-;;:::i;23892:138::-;1999:5;;-1:-1:-1;;;;;1999:5:0;1985:10;:19;1977:64;;;;-1:-1:-1;;;1977:64:0;;;;;;;:::i;:::-;;;;;;;;;23961:21:::1;:7;23978:3:::0;23961:16:::1;:21::i;:::-;23953:41;;;::::0;-1:-1:-1;;;23953:41:0;;5260:2:1;23953:41:0::1;::::0;::::1;5242:21:1::0;5299:1;5279:18;;;5272:29;-1:-1:-1;;;5317:18:1;;;5310:37;5364:18;;23953:41:0::1;5058:330:1::0;23953:41:0::1;24003:19;:7;24018:3:::0;24003:14:::1;:19::i;:::-;;23892:138:::0;:::o;943:506::-;1999:5;;-1:-1:-1;;;;;1999:5:0;1985:10;:19;1977:64;;;;-1:-1:-1;;;1977:64:0;;;;;;;:::i;:::-;1082:6:::1;1078:364;;;-1:-1:-1::0;;;;;1136:22:0;::::1;::::0;::::1;::::0;:34:::1;;;1162:8;1136:34;1128:68;;;::::0;-1:-1:-1;;;1128:68:0;;5595:2:1;1128:68:0::1;::::0;::::1;5577:21:1::0;5634:2;5614:18;;;5607:30;-1:-1:-1;;;5653:18:1;;;5646:51;5714:18;;1128:68:0::1;5393:345:1::0;1128:68:0::1;1263:5;::::0;1242:37:::1;::::0;-1:-1:-1;;;;;1242:37:0;;::::1;::::0;1263:5:::1;::::0;1242:37:::1;::::0;1263:5:::1;::::0;1242:37:::1;1294:5;:16:::0;;-1:-1:-1;;;;;1294:16:0;::::1;-1:-1:-1::0;;;;;;1294:16:0;;::::1;;::::0;;;1325:12:::1;:25:::0;;;;::::1;::::0;;943:506;;;:::o;1078:364::-:1;1407:12;:23:::0;;-1:-1:-1;;;;;1407:23:0;::::1;-1:-1:-1::0;;;;;;1407:23:0;;::::1;;::::0;;943:506;;;:::o;8128:214::-;8230:10;8203:4;8220:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;8220:30:0;;;;;;;;;;:39;;;8275:37;8203:4;;8220:30;;8275:37;;;;8253:6;2123:25:1;;2111:2;2096:18;;1977:177;8275:37:0;;;;;;;;-1:-1:-1;8330:4:0;8128:214;;;;;:::o;6682:1151::-;6796:4;6881:11;;6877:885;;-1:-1:-1;;;;;6930:15:0;;6909:18;6930:15;;;;;;;;;;;6968:20;;;;6960:55;;;;-1:-1:-1;;;6960:55:0;;5945:2:1;6960:55:0;;;5927:21:1;5984:2;5964:18;;;5957:30;-1:-1:-1;;;6003:18:1;;;5996:52;6065:18;;6960:55:0;5743:346:1;6960:55:0;7044:2;-1:-1:-1;;;;;7036:10:0;:4;-1:-1:-1;;;;;7036:10:0;;7032:719;;-1:-1:-1;;;;;7094:15:0;;7067:24;7094:15;;;:9;:15;;;;;;;;7110:10;7094:27;;;;;;;;-1:-1:-1;;7245:37:0;;7241:251;;7335:6;7315:16;:26;;7307:63;;;;-1:-1:-1;;;7307:63:0;;6296:2:1;7307:63:0;;;6278:21:1;6335:2;6315:18;;;6308:30;6374:26;6354:18;;;6347:54;6418:18;;7307:63:0;6094:348:1;7307:63:0;7423:25;7442:6;7423:16;:25;:::i;:::-;-1:-1:-1;;;;;7393:15:0;;;;;;:9;:15;;;;;;;;7409:10;7393:27;;;;;;;:55;7241:251;-1:-1:-1;;;;;7518:16:0;;7510:51;;;;-1:-1:-1;;;7510:51:0;;6911:2:1;7510:51:0;;;6893:21:1;6950:2;6930:18;;;6923:30;-1:-1:-1;;;6969:18:1;;;6962:52;7031:18;;7510:51:0;6709:346:1;7510:51:0;7650:19;7663:6;7650:10;:19;:::i;:::-;-1:-1:-1;;;;;7632:15:0;;;:9;:15;;;;;;;;;;;:37;;;;7712:13;;;;;;;;:23;;7729:6;;7632:9;7712:23;;7729:6;;7712:23;:::i;:::-;;;;-1:-1:-1;;;7032:719:0;6894:868;6877:885;7792:2;-1:-1:-1;;;;;7777:26:0;7786:4;-1:-1:-1;;;;;7777:26:0;-1:-1:-1;;;;;;;;;;;7796:6:0;7777:26;;;;2123:25:1;;2111:2;2096:18;;1977:177;7777:26:0;;;;;;;;-1:-1:-1;7821:4:0;6682:1151;;;;;:::o;23498:138::-;1999:5;;-1:-1:-1;;;;;1999:5:0;1985:10;:19;1977:64;;;;-1:-1:-1;;;1977:64:0;;;;;;;:::i;:::-;23567:21:::1;:7;23584:3:::0;23567:16:::1;:21::i;:::-;23559:41;;;::::0;-1:-1:-1;;;23559:41:0;;5260:2:1;23559:41:0::1;::::0;::::1;5242:21:1::0;5299:1;5279:18;;;5272:29;-1:-1:-1;;;5317:18:1;;;5310:37;5364:18;;23559:41:0::1;5058:330:1::0;23559:41:0::1;23609:19;:7;23624:3:::0;23609:14:::1;:19::i;8404:104::-:0;8455:7;8482:18;:16;:18::i;:::-;8475:25;;8404:104;:::o;22588:92::-;24183:28;:7;24200:10;24183:16;:28::i;:::-;24175:48;;;;-1:-1:-1;;;24175:48:0;;7395:2:1;24175:48:0;;;7377:21:1;7434:1;7414:18;;;7407:29;-1:-1:-1;;;7452:18:1;;;7445:37;7499:18;;24175:48:0;7193:330:1;24175:48:0;22655:17:::1;22661:2;22665:6;22655:5;:17::i;1531:340::-:0;1599:12;;-1:-1:-1;;;;;1599:12:0;1651:10;:27;;1643:72;;;;-1:-1:-1;;;1643:72:0;;7730:2:1;1643:72:0;;;7712:21:1;;;7749:18;;;7742:30;7808:34;7788:18;;;7781:62;7860:18;;1643:72:0;7528:356:1;1643:72:0;1774:5;;1753:42;;-1:-1:-1;;;;;1753:42:0;;;;1774:5;;1753:42;;1774:5;;1753:42;1806:5;:21;;-1:-1:-1;;;;;1806:21:0;;;-1:-1:-1;;;;;;1806:21:0;;;;;;1838:12;:25;;;;;;;1531:340::o;23644:100::-;23686:16;23720;:7;:14;:16::i;24038:100::-;24080:16;24114;:7;:14;:16::i;23358:132::-;1999:5;;-1:-1:-1;;;;;1999:5:0;1985:10;:19;1977:64;;;;-1:-1:-1;;;1977:64:0;;;;;;;:::i;:::-;23425:21:::1;:7;23442:3:::0;23425:16:::1;:21::i;:::-;23424:22;23416:41;;;::::0;-1:-1:-1;;;23416:41:0;;8091:2:1;23416:41:0::1;::::0;::::1;8073:21:1::0;8130:1;8110:18;;;8103:29;-1:-1:-1;;;8148:18:1;;;8141:36;8194:18;;23416:41:0::1;7889:329:1::0;23416:41:0::1;23466:16;:7;23478:3:::0;23466:11:::1;:16::i;22688:92::-:0;24286:28;:7;24303:10;24286:16;:28::i;:::-;24278:48;;;;-1:-1:-1;;;24278:48:0;;8425:2:1;24278:48:0;;;8407:21:1;8464:1;8444:18;;;8437:29;-1:-1:-1;;;8482:18:1;;;8475:37;8529:18;;24278:48:0;8223:330:1;24278:48:0;22755:17:::1;22761:2;22765:6;22755:5;:17::i;5672:703::-:0;5734:4;5825:11;;;;:31;;-1:-1:-1;5840:10:0;-1:-1:-1;;;;;5840:16:0;;;5825:31;5821:477;;;5904:10;5873:18;5894:21;;;;;;;;;;;5938:20;;;;5930:55;;;;-1:-1:-1;;;5930:55:0;;5945:2:1;5930:55:0;;;5927:21:1;5984:2;5964:18;;;5957:30;-1:-1:-1;;;6003:18:1;;;5996:52;6065:18;;5930:55:0;5743:346:1;5930:55:0;6004:10;-1:-1:-1;;;;;6004:16:0;;;6000:287;;-1:-1:-1;;;;;6049:16:0;;6041:51;;;;-1:-1:-1;;;6041:51:0;;6911:2:1;6041:51:0;;;6893:21:1;6950:2;6930:18;;;6923:30;-1:-1:-1;;;6969:18:1;;;6962:52;7031:18;;6041:51:0;6709:346:1;6041:51:0;6186:19;6199:6;6186:10;:19;:::i;:::-;6172:10;6162:9;:21;;;;;;;;;;;:43;;;;-1:-1:-1;;;;;6248:13:0;;;;;;;:23;;6265:6;;6162:9;6248:23;;6265:6;;6248:23;:::i;:::-;;;;-1:-1:-1;;6000:287:0;5858:440;5821:477;6313:32;;2123:25:1;;;-1:-1:-1;;;;;6313:32:0;;;6322:10;;-1:-1:-1;;;;;;;;;;;6313:32:0;2111:2:1;2096:18;6313:32:0;1977:177:1;9137:674:0;-1:-1:-1;;;;;9357:20:0;;9349:57;;;;-1:-1:-1;;;9349:57:0;;8760:2:1;9349:57:0;;;8742:21:1;8799:2;8779:18;;;8772:30;8838:26;8818:18;;;8811:54;8882:18;;9349:57:0;8558:348:1;9349:57:0;9443:8;9425:15;:26;9417:53;;;;-1:-1:-1;;;9417:53:0;;9113:2:1;9417:53:0;;;9095:21:1;9152:2;9132:18;;;9125:30;-1:-1:-1;;;9171:18:1;;;9164:44;9225:18;;9417:53:0;8911:338:1;9417:53:0;-1:-1:-1;;;;;9503:155:0;;9545:21;9592:14;;;:6;:14;;;;;:16;;9503:128;;9513:108;;8670:66;;9652:6;;9576:7;;9585:5;;9592:16;;;;:::i;:::-;;;;-1:-1:-1;9534:85:0;;;;;;9681:25:1;;;;-1:-1:-1;;;;;9780:15:1;;;9760:18;;;9753:43;9832:15;;;;9812:18;;;9805:43;9864:18;;;9857:34;9907:19;;;9900:35;9951:19;;;9944:35;;;9653:19;;9534:85:0;;;;;;;;;;;;9524:96;;;;;;9513:10;:108::i;:::-;9503:128;;;;;;;;;;;;10217:25:1;;;;10290:4;10278:17;;10258:18;;;10251:45;10312:18;;;10305:34;;;10355:18;;;10348:34;;;10189:19;;9503:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9503:155:0;;9481:229;;;;-1:-1:-1;;;9481:229:0;;10595:2:1;9481:229:0;;;10577:21:1;10634:2;10614:18;;;10607:30;10673:26;10653:18;;;10646:54;10717:18;;9481:229:0;10393:348:1;9481:229:0;-1:-1:-1;;;;;9721:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;9771:32;;2123:25:1;;;9771:32:0;;2096:18:1;9771:32:0;;;;;;;9137:674;;;;;;;:::o;23752:132::-;1999:5;;-1:-1:-1;;;;;1999:5:0;1985:10;:19;1977:64;;;;-1:-1:-1;;;1977:64:0;;;;;;;:::i;:::-;23819:21:::1;:7;23836:3:::0;23819:16:::1;:21::i;:::-;23818:22;23810:41;;;::::0;-1:-1:-1;;;23810:41:0;;8091:2:1;23810:41:0::1;::::0;::::1;8073:21:1::0;8130:1;8110:18;;;8103:29;-1:-1:-1;;;8148:18:1;;;8141:36;8194:18;;23810:41:0::1;7889:329:1::0;23810:41:0::1;23860:16;:7;23872:3:::0;23860:11:::1;:16::i;17867:167::-:0;-1:-1:-1;;;;;18001:23:0;;17947:4;13403:19;;;:12;;;:19;;;;;;:24;;17971:55;17964:62;17867:167;-1:-1:-1;;;17867:167:0:o;17623:158::-;17696:4;17720:53;17728:3;-1:-1:-1;;;;;17748:23:0;;17720:7;:53::i;3325:237::-;3376:7;3434:9;3472:25;3461:36;;:93;;3520:34;3546:7;3520:25;:34::i;:::-;3461:93;;;3500:17;3461:93;3454:100;;;3325:237;:::o;22788:328::-;-1:-1:-1;;;;;22857:16:0;;22849:57;;;;-1:-1:-1;;;22849:57:0;;10948:2:1;22849:57:0;;;10930:21:1;10987:2;10967:18;;;10960:30;11026;11006:18;;;10999:58;11074:18;;22849:57:0;10746:352:1;22849:57:0;22937:11;;:23;;22953:6;22937:15;:23::i;:::-;22476:9;22923:37;;22915:72;;;;-1:-1:-1;;;22915:72:0;;11305:2:1;22915:72:0;;;11287:21:1;11344:2;11324:18;;;11317:30;-1:-1:-1;;;11363:18:1;;;11356:52;11425:18;;22915:72:0;11103:346:1;22915:72:0;23024:6;23010:11;;:20;;;;:::i;:::-;22996:11;:34;-1:-1:-1;;;;;23039:13:0;;:9;:13;;;;;;;;;;:23;;23056:6;;23039:9;:23;;23056:6;;23039:23;:::i;:::-;;;;-1:-1:-1;;23076:32:0;;2123:25:1;;;-1:-1:-1;;;;;23076:32:0;;;23093:1;;-1:-1:-1;;;;;;;;;;;23076:32:0;2111:2:1;2096:18;23076:32:0;;;;;;;;22788:328;;:::o;19299:310::-;19362:16;19391:22;19416:19;19424:3;19416:7;:19::i;17295:152::-;17365:4;17389:50;17394:3;-1:-1:-1;;;;;17414:23:0;;17389:4;:50::i;23124:226::-;-1:-1:-1;;;;;23193:13:0;;:9;:13;;;;;;;;;;;:23;-1:-1:-1;23193:23:0;23185:49;;;;-1:-1:-1;;;23185:49:0;;11656:2:1;23185:49:0;;;11638:21:1;11695:2;11675:18;;;11668:30;-1:-1:-1;;;11714:18:1;;;11707:43;11767:18;;23185:49:0;11454:337:1;23185:49:0;23258:6;23243:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23273:13:0;;:9;:13;;;;;;;;;;:23;;23290:6;;23273:9;:23;;23290:6;;23273:23;:::i;:::-;;;;-1:-1:-1;;23310:32:0;;2123:25:1;;;23331:1:0;;-1:-1:-1;;;;;23310:32:0;;;-1:-1:-1;;;;;;;;;;;23310:32:0;2111:2:1;2096:18;23310:32:0;1977:177:1;3570:331:0;3631:14;3747:40;;;;;;;;;;;;;-1:-1:-1;;;3747:40:0;;;3810:18;:16;:18::i;:::-;3851:8;3708:170;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3680:213;;;;;;3658:235;;3570:331;;;:::o;11800:1420::-;11866:4;12005:19;;;:12;;;:19;;;;;;12041:15;;12037:1176;;12416:21;12440:14;12453:1;12440:10;:14;:::i;:::-;12489:18;;12416:38;;-1:-1:-1;12469:17:0;;12489:22;;12510:1;;12489:22;:::i;:::-;12469:42;;12545:13;12532:9;:26;12528:405;;12579:17;12599:3;:11;;12611:9;12599:22;;;;;;;;:::i;:::-;;;;;;;;;12579:42;;12753:9;12724:3;:11;;12736:13;12724:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;12838:23;;;:12;;;:23;;;;;:36;;;12528:405;13014:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13109:3;:12;;:19;13122:5;13109:19;;;;;;;;;;;13102:26;;;13152:4;13145:11;;;;;;;12037:1176;13196:5;13189:12;;;;;2560:277;2685:133;;;2150:68;2685:133;;;12706:25:1;12747:18;;;12740:34;;;2798:4:0;12790:18:1;;;12783:60;2634:7:0;;12679:18:1;;2685:133:0;12504:345:1;9844:141:0;9902:9;9947:1;9937:5;9947:1;9937;:5;:::i;:::-;9933:9;;;9932:16;;9924:53;;;;-1:-1:-1;;;9924:53:0;;13056:2:1;9924:53:0;;;13038:21:1;13095:2;13075:18;;;13068:30;13134:26;13114:18;;;13107:54;13178:18;;9924:53:0;12854:348:1;14654:111:0;14710:16;14746:3;:11;;14739:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14654:111;;;:::o;11210:414::-;11273:4;13403:19;;;:12;;;:19;;;;;;11290:327;;-1:-1:-1;11333:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;11516:18;;11494:19;;;:12;;;:19;;;;;;:40;;;;11549:11;;11290:327;-1:-1:-1;11600:5:0;11593:12;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:258::-;455:1;465:113;479:6;476:1;473:13;465:113;;;555:11;;;549:18;536:11;;;529:39;501:2;494:10;465:113;;;596:6;593:1;590:13;587:48;;;631:1;622:6;617:3;613:16;606:27;587:48;;383:258;;;:::o;646:383::-;795:2;784:9;777:21;758:4;827:6;821:13;870:6;865:2;854:9;850:18;843:34;886:66;945:6;940:2;929:9;925:18;920:2;912:6;908:15;886:66;:::i;:::-;1013:2;992:15;-1:-1:-1;;988:29:1;973:45;;;;1020:2;969:54;;646:383;-1:-1:-1;;646:383:1:o;1034:160::-;1099:20;;1155:13;;1148:21;1138:32;;1128:60;;1184:1;1181;1174:12;1199:322;1270:6;1278;1286;1339:2;1327:9;1318:7;1314:23;1310:32;1307:52;;;1355:1;1352;1345:12;1307:52;1378:29;1397:9;1378:29;:::i;:::-;1368:39;;1426:35;1457:2;1446:9;1442:18;1426:35;:::i;:::-;1416:45;;1480:35;1511:2;1500:9;1496:18;1480:35;:::i;:::-;1470:45;;1199:322;;;;;:::o;1526:254::-;1594:6;1602;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;1694:29;1713:9;1694:29;:::i;:::-;1684:39;1770:2;1755:18;;;;1742:32;;-1:-1:-1;;;1526:254:1:o;2159:328::-;2236:6;2244;2252;2305:2;2293:9;2284:7;2280:23;2276:32;2273:52;;;2321:1;2318;2311:12;2273:52;2344:29;2363:9;2344:29;:::i;:::-;2334:39;;2392:38;2426:2;2415:9;2411:18;2392:38;:::i;:::-;2382:48;;2477:2;2466:9;2462:18;2449:32;2439:42;;2159:328;;;;;:::o;2863:658::-;3034:2;3086:21;;;3156:13;;3059:18;;;3178:22;;;3005:4;;3034:2;3257:15;;;;3231:2;3216:18;;;3005:4;3300:195;3314:6;3311:1;3308:13;3300:195;;;3379:13;;-1:-1:-1;;;;;3375:39:1;3363:52;;3470:15;;;;3435:12;;;;3411:1;3329:9;3300:195;;;-1:-1:-1;3512:3:1;;2863:658;-1:-1:-1;;;;;;2863:658:1:o;3734:693::-;3845:6;3853;3861;3869;3877;3885;3893;3946:3;3934:9;3925:7;3921:23;3917:33;3914:53;;;3963:1;3960;3953:12;3914:53;3986:29;4005:9;3986:29;:::i;:::-;3976:39;;4034:38;4068:2;4057:9;4053:18;4034:38;:::i;:::-;4024:48;;4119:2;4108:9;4104:18;4091:32;4081:42;;4170:2;4159:9;4155:18;4142:32;4132:42;;4224:3;4213:9;4209:19;4196:33;4269:4;4262:5;4258:16;4251:5;4248:27;4238:55;;4289:1;4286;4279:12;4238:55;3734:693;;;;-1:-1:-1;3734:693:1;;;;4312:5;4364:3;4349:19;;4336:33;;-1:-1:-1;4416:3:1;4401:19;;;4388:33;;3734:693;-1:-1:-1;;3734:693:1:o;4432:260::-;4500:6;4508;4561:2;4549:9;4540:7;4536:23;4532:32;4529:52;;;4577:1;4574;4567:12;4529:52;4600:29;4619:9;4600:29;:::i;:::-;4590:39;;4648:38;4682:2;4671:9;4667:18;4648:38;:::i;:::-;4638:48;;4432:260;;;;;:::o;4697:356::-;4899:2;4881:21;;;4918:18;;;4911:30;4977:34;4972:2;4957:18;;4950:62;5044:2;5029:18;;4697:356::o;6447:127::-;6508:10;6503:3;6499:20;6496:1;6489:31;6539:4;6536:1;6529:15;6563:4;6560:1;6553:15;6579:125;6619:4;6647:1;6644;6641:8;6638:34;;;6652:18;;:::i;:::-;-1:-1:-1;6689:9:1;;6579:125::o;7060:128::-;7100:3;7131:1;7127:6;7124:1;7121:13;7118:39;;;7137:18;;:::i;:::-;-1:-1:-1;7173:9:1;;7060:128::o;9254:135::-;9293:3;9314:17;;;9311:43;;9334:18;;:::i;:::-;-1:-1:-1;9381:1:1;9370:13;;9254:135::o;11796:439::-;11983:3;12021:6;12015:13;12037:53;12083:6;12078:3;12071:4;12063:6;12059:17;12037:53;:::i;:::-;12112:16;;;;12137:21;;;-1:-1:-1;12185:4:1;12174:16;;12167:32;12226:2;12215:14;;11796:439;-1:-1:-1;11796:439:1:o;12240:127::-;12301:10;12296:3;12292:20;12289:1;12282:31;12332:4;12329:1;12322:15;12356:4;12353:1;12346:15;12372:127;12433:10;12428:3;12424:20;12421:1;12414:31;12464:4;12461:1;12454:15;12488:4;12485:1;12478:15
Swarm Source
ipfs://7c013370caf2dad11b6a87ead4e6ebf970b92dee827e6d0a064bce626836b27b
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.