Overview
Max Total Supply
599,788,210.483089119176791409 PR
Holders
205 (0.00%)
Transfers
-
58 ( 3.57%)
Market
Price
$0.0003 @ 0.000000 ETH (-1.34%)
Onchain Market Cap
$154,805.34
Circulating Supply Market Cap
$70,535.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PrimerToken
Compiler Version
v0.8.31+commit.fd3a2265
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2025-12-12
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/**
* @title Primer Token (PR)
* @notice ERC-20 token with EIP-3009 (Transfer With Authorization) and EIP-2612 (Permit)
* @dev Fully compatible with x402 protocol on Base
*/
contract PrimerToken {
// ============ ERC-20 Storage ============
string public constant name = "Primer";
string public constant symbol = "PR";
uint8 public constant decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
// ============ EIP-712 Storage ============
bytes32 public immutable DOMAIN_SEPARATOR;
// ============ EIP-2612 Storage ============
mapping(address => uint256) public nonces;
// ============ EIP-3009 Storage ============
mapping(address => mapping(bytes32 => bool)) internal _authorizationStates;
// ============ EIP-712 Type Hashes ============
bytes32 public constant PERMIT_TYPEHASH =
keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
bytes32 public constant TRANSFER_WITH_AUTHORIZATION_TYPEHASH =
keccak256("TransferWithAuthorization(address from,address to,uint256 value,uint256 validAfter,uint256 validBefore,bytes32 nonce)");
bytes32 public constant RECEIVE_WITH_AUTHORIZATION_TYPEHASH =
keccak256("ReceiveWithAuthorization(address from,address to,uint256 value,uint256 validAfter,uint256 validBefore,bytes32 nonce)");
bytes32 public constant CANCEL_AUTHORIZATION_TYPEHASH =
keccak256("CancelAuthorization(address authorizer,bytes32 nonce)");
// ============ ERC-20 Events ============
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
// ============ EIP-3009 Events ============
event AuthorizationUsed(address indexed authorizer, bytes32 indexed nonce);
event AuthorizationCanceled(address indexed authorizer, bytes32 indexed nonce);
// ============ Errors ============
error InvalidSignature();
error AuthorizationExpired();
error AuthorizationNotYetValid();
error AuthorizationAlreadyUsed();
error CallerMustBePayee();
error InsufficientBalance();
error InsufficientAllowance();
error InvalidAddress();
error ExpiredDeadline();
// ============ Constructor ============
constructor() {
DOMAIN_SEPARATOR = keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256(bytes("1")),
block.chainid,
address(this)
)
);
// Mint total supply to deployer: 600,000,001 tokens
uint256 initialSupply = 600_000_001 * 10 ** decimals;
totalSupply = initialSupply;
balanceOf[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
// ============ ERC-20 Functions ============
function transfer(address to, uint256 value) external returns (bool) {
_transfer(msg.sender, to, value);
return true;
}
function approve(address spender, uint256 value) external returns (bool) {
_approve(msg.sender, spender, value);
return true;
}
function transferFrom(address from, address to, uint256 value) external returns (bool) {
uint256 currentAllowance = allowance[from][msg.sender];
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) revert InsufficientAllowance();
unchecked {
_approve(from, msg.sender, currentAllowance - value);
}
}
_transfer(from, to, value);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
_approve(msg.sender, spender, allowance[msg.sender][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
uint256 currentAllowance = allowance[msg.sender][spender];
if (currentAllowance < subtractedValue) revert InsufficientAllowance();
unchecked {
_approve(msg.sender, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @notice Burn tokens from caller's balance, permanently reducing total supply
* @param amount Amount of tokens to burn
*/
function burn(uint256 amount) external {
if (balanceOf[msg.sender] < amount) revert InsufficientBalance();
unchecked {
balanceOf[msg.sender] -= amount;
totalSupply -= amount;
}
emit Transfer(msg.sender, address(0), amount);
}
// ============ EIP-2612 Permit ============
/**
* @notice Approve via signature (gasless approval)
* @param owner_ Token owner
* @param spender Spender address
* @param value Amount to approve
* @param deadline Signature expiry timestamp
* @param v Signature v
* @param r Signature r
* @param s Signature s
*/
function permit(
address owner_,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external {
if (block.timestamp > deadline) revert ExpiredDeadline();
bytes32 structHash = keccak256(
abi.encode(PERMIT_TYPEHASH, owner_, spender, value, nonces[owner_]++, deadline)
);
bytes32 digest = _hashTypedDataV4(structHash);
address signer = _recover(digest, v, r, s);
if (signer != owner_) revert InvalidSignature();
_approve(owner_, spender, value);
}
// ============ EIP-3009 Functions ============
/**
* @notice Execute a transfer with a signed authorization (x402 compatible)
* @dev Anyone can call this with a valid signature from `from`
* @param from Payer address
* @param to Payee address
* @param value Amount to transfer
* @param validAfter Authorization valid after this timestamp
* @param validBefore Authorization valid before this timestamp
* @param nonce Unique nonce
* @param v Signature v
* @param r Signature r
* @param s Signature s
*/
function transferWithAuthorization(
address from,
address to,
uint256 value,
uint256 validAfter,
uint256 validBefore,
bytes32 nonce,
uint8 v,
bytes32 r,
bytes32 s
) external {
_requireValidAuthorization(from, nonce, validAfter, validBefore);
bytes32 structHash = keccak256(
abi.encode(
TRANSFER_WITH_AUTHORIZATION_TYPEHASH,
from,
to,
value,
validAfter,
validBefore,
nonce
)
);
bytes32 digest = _hashTypedDataV4(structHash);
address signer = _recover(digest, v, r, s);
if (signer != from) revert InvalidSignature();
_markAuthorizationUsed(from, nonce);
_transfer(from, to, value);
}
/**
* @notice Execute a transfer where caller must be the payee (front-running protection)
* @dev Use this when receiving payments in smart contracts
* @param from Payer address
* @param to Payee address (must equal msg.sender)
* @param value Amount to transfer
* @param validAfter Authorization valid after this timestamp
* @param validBefore Authorization valid before this timestamp
* @param nonce Unique nonce
* @param v Signature v
* @param r Signature r
* @param s Signature s
*/
function receiveWithAuthorization(
address from,
address to,
uint256 value,
uint256 validAfter,
uint256 validBefore,
bytes32 nonce,
uint8 v,
bytes32 r,
bytes32 s
) external {
if (to != msg.sender) revert CallerMustBePayee();
_requireValidAuthorization(from, nonce, validAfter, validBefore);
bytes32 structHash = keccak256(
abi.encode(
RECEIVE_WITH_AUTHORIZATION_TYPEHASH,
from,
to,
value,
validAfter,
validBefore,
nonce
)
);
bytes32 digest = _hashTypedDataV4(structHash);
address signer = _recover(digest, v, r, s);
if (signer != from) revert InvalidSignature();
_markAuthorizationUsed(from, nonce);
_transfer(from, to, value);
}
/**
* @notice Cancel an authorization before it's used
* @param authorizer The address that signed the authorization
* @param nonce The nonce to cancel
* @param v Signature v
* @param r Signature r
* @param s Signature s
*/
function cancelAuthorization(
address authorizer,
bytes32 nonce,
uint8 v,
bytes32 r,
bytes32 s
) external {
if (_authorizationStates[authorizer][nonce]) revert AuthorizationAlreadyUsed();
bytes32 structHash = keccak256(
abi.encode(CANCEL_AUTHORIZATION_TYPEHASH, authorizer, nonce)
);
bytes32 digest = _hashTypedDataV4(structHash);
address signer = _recover(digest, v, r, s);
if (signer != authorizer) revert InvalidSignature();
_authorizationStates[authorizer][nonce] = true;
emit AuthorizationCanceled(authorizer, nonce);
}
/**
* @notice Check if an authorization nonce has been used
* @param authorizer The authorizer address
* @param nonce The nonce to check
* @return True if the nonce has been used
*/
function authorizationState(address authorizer, bytes32 nonce) external view returns (bool) {
return _authorizationStates[authorizer][nonce];
}
// ============ ERC-165 Support ============
function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
return
interfaceId == 0x36372b07 || // ERC-20
interfaceId == 0x9d8ff7da || // EIP-2612 (permit)
interfaceId == 0x01ffc9a7; // ERC-165
}
// ============ Internal Functions ============
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) revert InvalidAddress();
if (to == address(0)) revert InvalidAddress();
if (balanceOf[from] < value) revert InsufficientBalance();
unchecked {
balanceOf[from] -= value;
balanceOf[to] += value;
}
emit Transfer(from, to, value);
}
function _approve(address owner_, address spender, uint256 value) internal {
if (owner_ == address(0)) revert InvalidAddress();
if (spender == address(0)) revert InvalidAddress();
allowance[owner_][spender] = value;
emit Approval(owner_, spender, value);
}
function _hashTypedDataV4(bytes32 structHash) internal view returns (bytes32) {
return keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR, structHash));
}
function _recover(bytes32 digest, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
// EIP-2 conformance: s must be in lower half
if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
revert InvalidSignature();
}
address signer = ecrecover(digest, v, r, s);
if (signer == address(0)) revert InvalidSignature();
return signer;
}
function _requireValidAuthorization(
address authorizer,
bytes32 nonce,
uint256 validAfter,
uint256 validBefore
) internal view {
if (block.timestamp <= validAfter) revert AuthorizationNotYetValid();
if (block.timestamp >= validBefore) revert AuthorizationExpired();
if (_authorizationStates[authorizer][nonce]) revert AuthorizationAlreadyUsed();
}
function _markAuthorizationUsed(address authorizer, bytes32 nonce) internal {
_authorizationStates[authorizer][nonce] = true;
emit AuthorizationUsed(authorizer, nonce);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AuthorizationAlreadyUsed","type":"error"},{"inputs":[],"name":"AuthorizationExpired","type":"error"},{"inputs":[],"name":"AuthorizationNotYetValid","type":"error"},{"inputs":[],"name":"CallerMustBePayee","type":"error"},{"inputs":[],"name":"ExpiredDeadline","type":"error"},{"inputs":[],"name":"InsufficientAllowance","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidSignature","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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"AuthorizationCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"AuthorizationUsed","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":"CANCEL_AUTHORIZATION_TYPEHASH","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":[],"name":"RECEIVE_WITH_AUTHORIZATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRANSFER_WITH_AUTHORIZATION_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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"authorizationState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"authorizer","type":"address"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"cancelAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"validAfter","type":"uint256"},{"internalType":"uint256","name":"validBefore","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"receiveWithAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"validAfter","type":"uint256"},{"internalType":"uint256","name":"validBefore","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a060405234801561000f575f5ffd5b507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600681526020017f5072696d65720000000000000000000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016100c1959493929190610220565b60405160208183030381529060405280519060200120608081815250505f6012600a6100ed91906103d9565b6323c346016100fc9190610423565b9050805f819055508060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101a39190610464565b60405180910390a35061047d565b5f819050919050565b6101c3816101b1565b82525050565b5f819050919050565b6101db816101c9565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61020a826101e1565b9050919050565b61021a81610200565b82525050565b5f60a0820190506102335f8301886101ba565b61024060208301876101ba565b61024d60408301866101ba565b61025a60608301856101d2565b6102676080830184610211565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156102f3578086048111156102cf576102ce610271565b5b60018516156102de5780820291505b80810290506102ec8561029e565b94506102b3565b94509492505050565b5f8261030b57600190506103c6565b81610318575f90506103c6565b816001811461032e576002811461033857610367565b60019150506103c6565b60ff84111561034a57610349610271565b5b8360020a91508482111561036157610360610271565b5b506103c6565b5060208310610133831016604e8410600b841016171561039c5782820a90508381111561039757610396610271565b5b6103c6565b6103a984848460016102aa565b925090508184048111156103c0576103bf610271565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6103e3826101c9565b91506103ee836103cd565b925061041b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846102fc565b905092915050565b5f61042d826101c9565b9150610438836101c9565b9250828202610446816101c9565b9150828204841483151761045d5761045c610271565b5b5092915050565b5f6020820190506104775f8301846101d2565b92915050565b6080516120dc61049c5f395f81816106e701526114f601526120dc5ff3fe608060405234801561000f575f5ffd5b5060043610610156575f3560e01c80637ecebe00116100c1578063d505accf1161007a578063d505accf14610402578063d91694871461041e578063dd62ed3e1461043c578063e3ee160e1461046c578063e94a010214610488578063ef55bec6146104b857610156565b80637ecebe00146103185780637f2eecc31461034857806395d89b4114610366578063a0cc6a6814610384578063a457c2d7146103a2578063a9059cbb146103d257610156565b8063313ce56711610113578063313ce567146102445780633644e51514610262578063395093511461028057806342966c68146102b05780635a049a70146102cc57806370a08231146102e857610156565b806301ffc9a71461015a57806306fdde031461018a578063095ea7b3146101a857806318160ddd146101d857806323b872dd146101f657806330adf81f14610226575b5f5ffd5b610174600480360381019061016f919061186e565b6104d4565b60405161018191906118b3565b60405180910390f35b610192610565565b60405161019f919061193c565b60405180910390f35b6101c260048036038101906101bd91906119e9565b61059e565b6040516101cf91906118b3565b60405180910390f35b6101e06105b4565b6040516101ed9190611a36565b60405180910390f35b610210600480360381019061020b9190611a4f565b6105b9565b60405161021d91906118b3565b60405180910390f35b61022e6106bc565b60405161023b9190611ab7565b60405180910390f35b61024c6106e0565b6040516102599190611aeb565b60405180910390f35b61026a6106e5565b6040516102779190611ab7565b60405180910390f35b61029a600480360381019061029591906119e9565b610709565b6040516102a791906118b3565b60405180910390f35b6102ca60048036038101906102c59190611b04565b6107a2565b005b6102e660048036038101906102e19190611b83565b6108d9565b005b61030260048036038101906102fd9190611bfa565b610ae9565b60405161030f9190611a36565b60405180910390f35b610332600480360381019061032d9190611bfa565b610afe565b60405161033f9190611a36565b60405180910390f35b610350610b13565b60405161035d9190611ab7565b60405180910390f35b61036e610b37565b60405161037b919061193c565b60405180910390f35b61038c610b70565b6040516103999190611ab7565b60405180910390f35b6103bc60048036038101906103b791906119e9565b610b94565b6040516103c991906118b3565b60405180910390f35b6103ec60048036038101906103e791906119e9565b610c63565b6040516103f991906118b3565b60405180910390f35b61041c60048036038101906104179190611c25565b610c79565b005b610426610dee565b6040516104339190611ab7565b60405180910390f35b61045660048036038101906104519190611cc2565b610e12565b6040516104639190611a36565b60405180910390f35b61048660048036038101906104819190611d00565b610e32565b005b6104a2600480360381019061049d9190611dc4565b610f37565b6040516104af91906118b3565b60405180910390f35b6104d260048036038101906104cd9190611d00565b610f99565b005b5f6336372b0760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052e5750639d8ff7da60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061055e57506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6040518060400160405280600681526020017f5072696d6572000000000000000000000000000000000000000000000000000081525081565b5f6105aa338484611103565b6001905092915050565b5f5481565b5f5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106a55782811015610697576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106a48533858403611103565b5b6106b08585856112b4565b60019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f61079833848460025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546107939190611e2f565b611103565b6001905092915050565b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610819576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550805f5f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108ce9190611a36565b60405180910390a350565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f9054906101000a900460ff1615610969576040517f9508f1f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429868660405160200161099f93929190611e71565b6040516020818303038152906040528051906020012090505f6109c1826114f3565b90505f6109d082878787611544565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8981526020019081526020015f205f6101000a81548160ff021916908315150217905550868873ffffffffffffffffffffffffffffffffffffffff167f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8160405160405180910390a35050505050505050565b6001602052805f5260405f205f915090505481565b6003602052805f5260405f205f915090505481565b7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b6040518060400160405280600281526020017f505200000000000000000000000000000000000000000000000000000000000081525081565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b5f5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610c4b576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c583385858403611103565b600191505092915050565b5f610c6f3384846112b4565b6001905092915050565b83421115610cb3576040517ff87d927100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888860035f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610d2590611ea6565b9190505589604051602001610d3f96959493929190611eed565b6040516020818303038152906040528051906020012090505f610d61826114f3565b90505f610d7082878787611544565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610de28a8a8a611103565b50505050505050505050565b7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b6002602052815f5260405f20602052805f5260405f205f91509150505481565b610e3e89858888611661565b5f7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a22678a8a8a8a8a8a604051602001610e7c9796959493929190611f4c565b6040516020818303038152906040528051906020012090505f610e9e826114f3565b90505f610ead82878787611544565b90508b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f1e8c88611769565b610f298c8c8c6112b4565b505050505050505050505050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f9054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f5454b17d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61100a89858888611661565b5f7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de88a8a8a8a8a8a6040516020016110489796959493929190611f4c565b6040516020818303038152906040528051906020012090505f61106a826114f3565b90505f61107982878787611544565b90508b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110e0576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ea8c88611769565b6110f58c8c8c6112b4565b505050505050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611168576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111cd576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112a79190611a36565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611319576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137e576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156113f5576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114e69190611a36565b60405180910390a3505050565b5f7f00000000000000000000000000000000000000000000000000000000000000008260405160200161152792919061202d565b604051602081830303815290604052805190602001209050919050565b5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c11156115a1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6001868686866040515f81526020016040526040516115c49493929190612063565b6020604051602081039080840390855afa1580156115e4573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611655576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050949350505050565b81421161169a576040517fdf8e437200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8042106116d3576040517f0f05f5bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205f9054906101000a900460ff1615611763576040517f9508f1f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550808273ffffffffffffffffffffffffffffffffffffffff167f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a560405160405180910390a35050565b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61184d81611819565b8114611857575f5ffd5b50565b5f8135905061186881611844565b92915050565b5f6020828403121561188357611882611815565b5b5f6118908482850161185a565b91505092915050565b5f8115159050919050565b6118ad81611899565b82525050565b5f6020820190506118c65f8301846118a4565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61190e826118cc565b61191881856118d6565b93506119288185602086016118e6565b611931816118f4565b840191505092915050565b5f6020820190508181035f8301526119548184611904565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6119858261195c565b9050919050565b6119958161197b565b811461199f575f5ffd5b50565b5f813590506119b08161198c565b92915050565b5f819050919050565b6119c8816119b6565b81146119d2575f5ffd5b50565b5f813590506119e3816119bf565b92915050565b5f5f604083850312156119ff576119fe611815565b5b5f611a0c858286016119a2565b9250506020611a1d858286016119d5565b9150509250929050565b611a30816119b6565b82525050565b5f602082019050611a495f830184611a27565b92915050565b5f5f5f60608486031215611a6657611a65611815565b5b5f611a73868287016119a2565b9350506020611a84868287016119a2565b9250506040611a95868287016119d5565b9150509250925092565b5f819050919050565b611ab181611a9f565b82525050565b5f602082019050611aca5f830184611aa8565b92915050565b5f60ff82169050919050565b611ae581611ad0565b82525050565b5f602082019050611afe5f830184611adc565b92915050565b5f60208284031215611b1957611b18611815565b5b5f611b26848285016119d5565b91505092915050565b611b3881611a9f565b8114611b42575f5ffd5b50565b5f81359050611b5381611b2f565b92915050565b611b6281611ad0565b8114611b6c575f5ffd5b50565b5f81359050611b7d81611b59565b92915050565b5f5f5f5f5f60a08688031215611b9c57611b9b611815565b5b5f611ba9888289016119a2565b9550506020611bba88828901611b45565b9450506040611bcb88828901611b6f565b9350506060611bdc88828901611b45565b9250506080611bed88828901611b45565b9150509295509295909350565b5f60208284031215611c0f57611c0e611815565b5b5f611c1c848285016119a2565b91505092915050565b5f5f5f5f5f5f5f60e0888a031215611c4057611c3f611815565b5b5f611c4d8a828b016119a2565b9750506020611c5e8a828b016119a2565b9650506040611c6f8a828b016119d5565b9550506060611c808a828b016119d5565b9450506080611c918a828b01611b6f565b93505060a0611ca28a828b01611b45565b92505060c0611cb38a828b01611b45565b91505092959891949750929550565b5f5f60408385031215611cd857611cd7611815565b5b5f611ce5858286016119a2565b9250506020611cf6858286016119a2565b9150509250929050565b5f5f5f5f5f5f5f5f5f6101208a8c031215611d1e57611d1d611815565b5b5f611d2b8c828d016119a2565b9950506020611d3c8c828d016119a2565b9850506040611d4d8c828d016119d5565b9750506060611d5e8c828d016119d5565b9650506080611d6f8c828d016119d5565b95505060a0611d808c828d01611b45565b94505060c0611d918c828d01611b6f565b93505060e0611da28c828d01611b45565b925050610100611db48c828d01611b45565b9150509295985092959850929598565b5f5f60408385031215611dda57611dd9611815565b5b5f611de7858286016119a2565b9250506020611df885828601611b45565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e39826119b6565b9150611e44836119b6565b9250828201905080821115611e5c57611e5b611e02565b5b92915050565b611e6b8161197b565b82525050565b5f606082019050611e845f830186611aa8565b611e916020830185611e62565b611e9e6040830184611aa8565b949350505050565b5f611eb0826119b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ee257611ee1611e02565b5b600182019050919050565b5f60c082019050611f005f830189611aa8565b611f0d6020830188611e62565b611f1a6040830187611e62565b611f276060830186611a27565b611f346080830185611a27565b611f4160a0830184611a27565b979650505050505050565b5f60e082019050611f5f5f83018a611aa8565b611f6c6020830189611e62565b611f796040830188611e62565b611f866060830187611a27565b611f936080830186611a27565b611fa060a0830185611a27565b611fad60c0830184611aa8565b98975050505050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f611ff7600283611fb9565b915061200282611fc3565b600282019050919050565b5f819050919050565b61202761202282611a9f565b61200d565b82525050565b5f61203782611feb565b91506120438285612016565b6020820191506120538284612016565b6020820191508190509392505050565b5f6080820190506120765f830187611aa8565b6120836020830186611adc565b6120906040830185611aa8565b61209d6060830184611aa8565b9594505050505056fea26469706673582212202d1981ac8b627283ef47a73c436d5ea8199b8284c468e11637b00f43da23b43b64736f6c634300081f0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610156575f3560e01c80637ecebe00116100c1578063d505accf1161007a578063d505accf14610402578063d91694871461041e578063dd62ed3e1461043c578063e3ee160e1461046c578063e94a010214610488578063ef55bec6146104b857610156565b80637ecebe00146103185780637f2eecc31461034857806395d89b4114610366578063a0cc6a6814610384578063a457c2d7146103a2578063a9059cbb146103d257610156565b8063313ce56711610113578063313ce567146102445780633644e51514610262578063395093511461028057806342966c68146102b05780635a049a70146102cc57806370a08231146102e857610156565b806301ffc9a71461015a57806306fdde031461018a578063095ea7b3146101a857806318160ddd146101d857806323b872dd146101f657806330adf81f14610226575b5f5ffd5b610174600480360381019061016f919061186e565b6104d4565b60405161018191906118b3565b60405180910390f35b610192610565565b60405161019f919061193c565b60405180910390f35b6101c260048036038101906101bd91906119e9565b61059e565b6040516101cf91906118b3565b60405180910390f35b6101e06105b4565b6040516101ed9190611a36565b60405180910390f35b610210600480360381019061020b9190611a4f565b6105b9565b60405161021d91906118b3565b60405180910390f35b61022e6106bc565b60405161023b9190611ab7565b60405180910390f35b61024c6106e0565b6040516102599190611aeb565b60405180910390f35b61026a6106e5565b6040516102779190611ab7565b60405180910390f35b61029a600480360381019061029591906119e9565b610709565b6040516102a791906118b3565b60405180910390f35b6102ca60048036038101906102c59190611b04565b6107a2565b005b6102e660048036038101906102e19190611b83565b6108d9565b005b61030260048036038101906102fd9190611bfa565b610ae9565b60405161030f9190611a36565b60405180910390f35b610332600480360381019061032d9190611bfa565b610afe565b60405161033f9190611a36565b60405180910390f35b610350610b13565b60405161035d9190611ab7565b60405180910390f35b61036e610b37565b60405161037b919061193c565b60405180910390f35b61038c610b70565b6040516103999190611ab7565b60405180910390f35b6103bc60048036038101906103b791906119e9565b610b94565b6040516103c991906118b3565b60405180910390f35b6103ec60048036038101906103e791906119e9565b610c63565b6040516103f991906118b3565b60405180910390f35b61041c60048036038101906104179190611c25565b610c79565b005b610426610dee565b6040516104339190611ab7565b60405180910390f35b61045660048036038101906104519190611cc2565b610e12565b6040516104639190611a36565b60405180910390f35b61048660048036038101906104819190611d00565b610e32565b005b6104a2600480360381019061049d9190611dc4565b610f37565b6040516104af91906118b3565b60405180910390f35b6104d260048036038101906104cd9190611d00565b610f99565b005b5f6336372b0760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052e5750639d8ff7da60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061055e57506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6040518060400160405280600681526020017f5072696d6572000000000000000000000000000000000000000000000000000081525081565b5f6105aa338484611103565b6001905092915050565b5f5481565b5f5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106a55782811015610697576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106a48533858403611103565b5b6106b08585856112b4565b60019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b7f6f3a904ad5f6940c573c5593cb0a57ec3b3bafa58d4df009faf1c2b865dfda3281565b5f61079833848460025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546107939190611e2f565b611103565b6001905092915050565b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610819576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550805f5f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108ce9190611a36565b60405180910390a350565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f9054906101000a900460ff1615610969576040517f9508f1f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429868660405160200161099f93929190611e71565b6040516020818303038152906040528051906020012090505f6109c1826114f3565b90505f6109d082878787611544565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8981526020019081526020015f205f6101000a81548160ff021916908315150217905550868873ffffffffffffffffffffffffffffffffffffffff167f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8160405160405180910390a35050505050505050565b6001602052805f5260405f205f915090505481565b6003602052805f5260405f205f915090505481565b7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b6040518060400160405280600281526020017f505200000000000000000000000000000000000000000000000000000000000081525081565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b5f5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610c4b576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c583385858403611103565b600191505092915050565b5f610c6f3384846112b4565b6001905092915050565b83421115610cb3576040517ff87d927100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888860035f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610d2590611ea6565b9190505589604051602001610d3f96959493929190611eed565b6040516020818303038152906040528051906020012090505f610d61826114f3565b90505f610d7082878787611544565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610de28a8a8a611103565b50505050505050505050565b7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b6002602052815f5260405f20602052805f5260405f205f91509150505481565b610e3e89858888611661565b5f7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a22678a8a8a8a8a8a604051602001610e7c9796959493929190611f4c565b6040516020818303038152906040528051906020012090505f610e9e826114f3565b90505f610ead82878787611544565b90508b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f1e8c88611769565b610f298c8c8c6112b4565b505050505050505050505050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f9054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f5454b17d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61100a89858888611661565b5f7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de88a8a8a8a8a8a6040516020016110489796959493929190611f4c565b6040516020818303038152906040528051906020012090505f61106a826114f3565b90505f61107982878787611544565b90508b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110e0576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ea8c88611769565b6110f58c8c8c6112b4565b505050505050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611168576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111cd576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112a79190611a36565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611319576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137e576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156113f5576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114e69190611a36565b60405180910390a3505050565b5f7f6f3a904ad5f6940c573c5593cb0a57ec3b3bafa58d4df009faf1c2b865dfda328260405160200161152792919061202d565b604051602081830303815290604052805190602001209050919050565b5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c11156115a1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6001868686866040515f81526020016040526040516115c49493929190612063565b6020604051602081039080840390855afa1580156115e4573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611655576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050949350505050565b81421161169a576040517fdf8e437200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8042106116d3576040517f0f05f5bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205f9054906101000a900460ff1615611763576040517f9508f1f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550808273ffffffffffffffffffffffffffffffffffffffff167f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a560405160405180910390a35050565b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61184d81611819565b8114611857575f5ffd5b50565b5f8135905061186881611844565b92915050565b5f6020828403121561188357611882611815565b5b5f6118908482850161185a565b91505092915050565b5f8115159050919050565b6118ad81611899565b82525050565b5f6020820190506118c65f8301846118a4565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61190e826118cc565b61191881856118d6565b93506119288185602086016118e6565b611931816118f4565b840191505092915050565b5f6020820190508181035f8301526119548184611904565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6119858261195c565b9050919050565b6119958161197b565b811461199f575f5ffd5b50565b5f813590506119b08161198c565b92915050565b5f819050919050565b6119c8816119b6565b81146119d2575f5ffd5b50565b5f813590506119e3816119bf565b92915050565b5f5f604083850312156119ff576119fe611815565b5b5f611a0c858286016119a2565b9250506020611a1d858286016119d5565b9150509250929050565b611a30816119b6565b82525050565b5f602082019050611a495f830184611a27565b92915050565b5f5f5f60608486031215611a6657611a65611815565b5b5f611a73868287016119a2565b9350506020611a84868287016119a2565b9250506040611a95868287016119d5565b9150509250925092565b5f819050919050565b611ab181611a9f565b82525050565b5f602082019050611aca5f830184611aa8565b92915050565b5f60ff82169050919050565b611ae581611ad0565b82525050565b5f602082019050611afe5f830184611adc565b92915050565b5f60208284031215611b1957611b18611815565b5b5f611b26848285016119d5565b91505092915050565b611b3881611a9f565b8114611b42575f5ffd5b50565b5f81359050611b5381611b2f565b92915050565b611b6281611ad0565b8114611b6c575f5ffd5b50565b5f81359050611b7d81611b59565b92915050565b5f5f5f5f5f60a08688031215611b9c57611b9b611815565b5b5f611ba9888289016119a2565b9550506020611bba88828901611b45565b9450506040611bcb88828901611b6f565b9350506060611bdc88828901611b45565b9250506080611bed88828901611b45565b9150509295509295909350565b5f60208284031215611c0f57611c0e611815565b5b5f611c1c848285016119a2565b91505092915050565b5f5f5f5f5f5f5f60e0888a031215611c4057611c3f611815565b5b5f611c4d8a828b016119a2565b9750506020611c5e8a828b016119a2565b9650506040611c6f8a828b016119d5565b9550506060611c808a828b016119d5565b9450506080611c918a828b01611b6f565b93505060a0611ca28a828b01611b45565b92505060c0611cb38a828b01611b45565b91505092959891949750929550565b5f5f60408385031215611cd857611cd7611815565b5b5f611ce5858286016119a2565b9250506020611cf6858286016119a2565b9150509250929050565b5f5f5f5f5f5f5f5f5f6101208a8c031215611d1e57611d1d611815565b5b5f611d2b8c828d016119a2565b9950506020611d3c8c828d016119a2565b9850506040611d4d8c828d016119d5565b9750506060611d5e8c828d016119d5565b9650506080611d6f8c828d016119d5565b95505060a0611d808c828d01611b45565b94505060c0611d918c828d01611b6f565b93505060e0611da28c828d01611b45565b925050610100611db48c828d01611b45565b9150509295985092959850929598565b5f5f60408385031215611dda57611dd9611815565b5b5f611de7858286016119a2565b9250506020611df885828601611b45565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e39826119b6565b9150611e44836119b6565b9250828201905080821115611e5c57611e5b611e02565b5b92915050565b611e6b8161197b565b82525050565b5f606082019050611e845f830186611aa8565b611e916020830185611e62565b611e9e6040830184611aa8565b949350505050565b5f611eb0826119b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ee257611ee1611e02565b5b600182019050919050565b5f60c082019050611f005f830189611aa8565b611f0d6020830188611e62565b611f1a6040830187611e62565b611f276060830186611a27565b611f346080830185611a27565b611f4160a0830184611a27565b979650505050505050565b5f60e082019050611f5f5f83018a611aa8565b611f6c6020830189611e62565b611f796040830188611e62565b611f866060830187611a27565b611f936080830186611a27565b611fa060a0830185611a27565b611fad60c0830184611aa8565b98975050505050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f611ff7600283611fb9565b915061200282611fc3565b600282019050919050565b5f819050919050565b61202761202282611a9f565b61200d565b82525050565b5f61203782611feb565b91506120438285612016565b6020820191506120538284612016565b6020820191508190509392505050565b5f6080820190506120765f830187611aa8565b6120836020830186611adc565b6120906040830185611aa8565b61209d6060830184611aa8565b9594505050505056fea26469706673582212202d1981ac8b627283ef47a73c436d5ea8199b8284c468e11637b00f43da23b43b64736f6c634300081f0033
Deployed Bytecode Sourcemap
244:12583:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10504:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;321:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3396:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;451:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3554:470;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:146;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;409:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;660:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4032:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4785:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9390:672;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;486:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;761:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1365:200;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;366:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1154:202;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4243:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3246:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5462:631;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1574:131;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;537:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6687:897;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10287:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8155:956;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10504:268;10574:4;10626:10;10611:25;;:11;:25;;;;:77;;;;10678:10;10663:25;;:11;:25;;;;10611:77;:140;;;;10741:10;10726:25;;:11;:25;;;;10611:140;10591:160;;10504:268;;;:::o;321:38::-;;;;;;;;;;;;;;;;;;;:::o;3396:150::-;3463:4;3480:36;3489:10;3501:7;3510:5;3480:8;:36::i;:::-;3534:4;3527:11;;3396:150;;;;:::o;451:26::-;;;;:::o;3554:470::-;3635:4;3652:24;3679:9;:15;3689:4;3679:15;;;;;;;;;;;;;;;:27;3695:10;3679:27;;;;;;;;;;;;;;;;3652:54;;3741:17;3721:16;:37;3717:241;;3798:5;3779:16;:24;3775:60;;;3812:23;;;;;;;;;;;;;;3775:60;3879:52;3888:4;3894:10;3925:5;3906:16;:24;3879:8;:52::i;:::-;3717:241;3968:26;3978:4;3984:2;3988:5;3968:9;:26::i;:::-;4012:4;4005:11;;;3554:470;;;;;:::o;999:146::-;1050:95;999:146;:::o;409:35::-;442:2;409:35;:::o;660:41::-;;;:::o;4032:203::-;4114:4;4131:74;4140:10;4152:7;4194:10;4161:9;:21;4171:10;4161:21;;;;;;;;;;;;;;;:30;4183:7;4161:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;4131:8;:74::i;:::-;4223:4;4216:11;;4032:203;;;;:::o;4785:292::-;4863:6;4839:9;:21;4849:10;4839:21;;;;;;;;;;;;;;;;:30;4835:64;;;4878:21;;;;;;;;;;;;;;4835:64;4960:6;4935:9;:21;4945:10;4935:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;4996:6;4981:11;;:21;;;;;;;;;;;5058:1;5029:40;;5038:10;5029:40;;;5062:6;5029:40;;;;;;:::i;:::-;;;;;;;;4785:292;:::o;9390:672::-;9561:20;:32;9582:10;9561:32;;;;;;;;;;;;;;;:39;9594:5;9561:39;;;;;;;;;;;;;;;;;;;;;9557:78;;;9609:26;;;;;;;;;;;;;;9557:78;9648:18;1639:66;9735:10;9747:5;9693:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9669:95;;;;;;9648:116;;9777:14;9794:28;9811:10;9794:16;:28::i;:::-;9777:45;;9833:14;9850:25;9859:6;9867:1;9870;9873;9850:8;:25::i;:::-;9833:42;;9902:10;9892:20;;:6;:20;;;9888:51;;9921:18;;;;;;;;;;;;;;9888:51;9994:4;9952:20;:32;9973:10;9952:32;;;;;;;;;;;;;;;:39;9985:5;9952:39;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;10048:5;10036:10;10014:40;;;;;;;;;;;;9546:516;;;9390:672;;;;;:::o;486:44::-;;;;;;;;;;;;;;;;;:::o;761:41::-;;;;;;;;;;;;;;;;;:::o;1365:200::-;1436:129;1365:200;:::o;366:36::-;;;;;;;;;;;;;;;;;;;:::o;1154:202::-;1226:130;1154:202;:::o;4243:384::-;4330:4;4347:24;4374:9;:21;4384:10;4374:21;;;;;;;;;;;;;;;:30;4396:7;4374:30;;;;;;;;;;;;;;;;4347:57;;4438:15;4419:16;:34;4415:70;;;4462:23;;;;;;;;;;;;;;4415:70;4521:65;4530:10;4542:7;4570:15;4551:16;:34;4521:8;:65::i;:::-;4615:4;4608:11;;;4243:384;;;;:::o;3246:142::-;3309:4;3326:32;3336:10;3348:2;3352:5;3326:9;:32::i;:::-;3376:4;3369:11;;3246:142;;;;:::o;5462:631::-;5687:8;5669:15;:26;5665:56;;;5704:17;;;;;;;;;;;;;;5665:56;5734:18;1050:95;5807:6;5815:7;5824:5;5831:6;:14;5838:6;5831:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;5849:8;5779:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5755:114;;;;;;5734:135;;5882:14;5899:28;5916:10;5899:16;:28::i;:::-;5882:45;;5938:14;5955:25;5964:6;5972:1;5975;5978;5955:8;:25::i;:::-;5938:42;;6007:6;5997:16;;:6;:16;;;5993:47;;6022:18;;;;;;;;;;;;;;5993:47;6053:32;6062:6;6070:7;6079:5;6053:8;:32::i;:::-;5654:439;;;5462:631;;;;;;;:::o;1574:131::-;1639:66;1574:131;:::o;537:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6687:897::-;6958:64;6985:4;6991:5;6998:10;7010:11;6958:26;:64::i;:::-;7035:18;1226:130;7164:4;7187:2;7208:5;7232:10;7261:11;7291:5;7080:231;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7056:266;;;;;;7035:287;;7335:14;7352:28;7369:10;7352:16;:28::i;:::-;7335:45;;7391:14;7408:25;7417:6;7425:1;7428;7431;7408:8;:25::i;:::-;7391:42;;7460:4;7450:14;;:6;:14;;;7446:45;;7473:18;;;;;;;;;;;;;;7446:45;7504:35;7527:4;7533:5;7504:22;:35::i;:::-;7550:26;7560:4;7566:2;7570:5;7550:9;:26::i;:::-;6947:637;;;6687:897;;;;;;;;;:::o;10287:157::-;10373:4;10397:20;:32;10418:10;10397:32;;;;;;;;;;;;;;;:39;10430:5;10397:39;;;;;;;;;;;;;;;;;;;;;10390:46;;10287:157;;;;:::o;8155:956::-;8435:10;8429:16;;:2;:16;;;8425:48;;8454:19;;;;;;;;;;;;;;8425:48;8486:64;8513:4;8519:5;8526:10;8538:11;8486:26;:64::i;:::-;8563:18;1436:129;8691:4;8714:2;8735:5;8759:10;8788:11;8818:5;8608:230;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8584:265;;;;;;8563:286;;8862:14;8879:28;8896:10;8879:16;:28::i;:::-;8862:45;;8918:14;8935:25;8944:6;8952:1;8955;8958;8935:8;:25::i;:::-;8918:42;;8987:4;8977:14;;:6;:14;;;8973:45;;9000:18;;;;;;;;;;;;;;8973:45;9031:35;9054:4;9060:5;9031:22;:35::i;:::-;9077:26;9087:4;9093:2;9097:5;9077:9;:26::i;:::-;8414:697;;;8155:956;;;;;;;;;:::o;11255:299::-;11363:1;11345:20;;:6;:20;;;11341:49;;11374:16;;;;;;;;;;;;;;11341:49;11424:1;11405:21;;:7;:21;;;11401:50;;11435:16;;;;;;;;;;;;;;11401:50;11493:5;11464:9;:17;11474:6;11464:17;;;;;;;;;;;;;;;:26;11482:7;11464:26;;;;;;;;;;;;;;;:34;;;;11531:7;11514:32;;11523:6;11514:32;;;11540:5;11514:32;;;;;;:::i;:::-;;;;;;;;11255:299;;;:::o;10835:412::-;10935:1;10919:18;;:4;:18;;;10915:47;;10946:16;;;;;;;;;;;;;;10915:47;10991:1;10977:16;;:2;:16;;;10973:45;;11002:16;;;;;;;;;;;;;;10973:45;11051:5;11033:9;:15;11043:4;11033:15;;;;;;;;;;;;;;;;:23;11029:57;;;11065:21;;;;;;;;;;;;;;11029:57;11143:5;11124:9;:15;11134:4;11124:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;11180:5;11163:9;:13;11173:2;11163:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;11229:2;11214:25;;11223:4;11214:25;;;11233:5;11214:25;;;;;;:::i;:::-;;;;;;;;10835:412;;;:::o;11562:173::-;11631:7;11697:16;11715:10;11668:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11658:69;;;;;;11651:76;;11562:173;;;:::o;11743:451::-;11831:7;11923:66;11918:1;11910:10;;:79;11906:137;;;12013:18;;;;;;;;;;;;;;11906:137;12055:14;12072:26;12082:6;12090:1;12093;12096;12072:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12055:43;;12131:1;12113:20;;:6;:20;;;12109:51;;12142:18;;;;;;;;;;;;;;12109:51;12180:6;12173:13;;;11743:451;;;;;;:::o;12202:421::-;12405:10;12386:15;:29;12382:68;;12424:26;;;;;;;;;;;;;;12382:68;12484:11;12465:15;:30;12461:65;;12504:22;;;;;;;;;;;;;;12461:65;12541:20;:32;12562:10;12541:32;;;;;;;;;;;;;;;:39;12574:5;12541:39;;;;;;;;;;;;;;;;;;;;;12537:78;;;12589:26;;;;;;;;;;;;;;12537:78;12202:421;;;;:::o;12631:193::-;12760:4;12718:20;:32;12739:10;12718:32;;;;;;;;;;;;;;;:39;12751:5;12718:39;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12810:5;12798:10;12780:36;;;;;;;;;;;;12631:193;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:126::-;2790:7;2830:42;2823:5;2819:54;2808:65;;2753:126;;;:::o;2885:96::-;2922:7;2951:24;2969:5;2951:24;:::i;:::-;2940:35;;2885:96;;;:::o;2987:122::-;3060:24;3078:5;3060:24;:::i;:::-;3053:5;3050:35;3040:63;;3099:1;3096;3089:12;3040:63;2987:122;:::o;3115:139::-;3161:5;3199:6;3186:20;3177:29;;3215:33;3242:5;3215:33;:::i;:::-;3115:139;;;;:::o;3260:77::-;3297:7;3326:5;3315:16;;3260:77;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:474::-;3684:6;3692;3741:2;3729:9;3720:7;3716:23;3712:32;3709:119;;;3747:79;;:::i;:::-;3709:119;3867:1;3892:53;3937:7;3928:6;3917:9;3913:22;3892:53;:::i;:::-;3882:63;;3838:117;3994:2;4020:53;4065:7;4056:6;4045:9;4041:22;4020:53;:::i;:::-;4010:63;;3965:118;3616:474;;;;;:::o;4096:118::-;4183:24;4201:5;4183:24;:::i;:::-;4178:3;4171:37;4096:118;;:::o;4220:222::-;4313:4;4351:2;4340:9;4336:18;4328:26;;4364:71;4432:1;4421:9;4417:17;4408:6;4364:71;:::i;:::-;4220:222;;;;:::o;4448:619::-;4525:6;4533;4541;4590:2;4578:9;4569:7;4565:23;4561:32;4558:119;;;4596:79;;:::i;:::-;4558:119;4716:1;4741:53;4786:7;4777:6;4766:9;4762:22;4741:53;:::i;:::-;4731:63;;4687:117;4843:2;4869:53;4914:7;4905:6;4894:9;4890:22;4869:53;:::i;:::-;4859:63;;4814:118;4971:2;4997:53;5042:7;5033:6;5022:9;5018:22;4997:53;:::i;:::-;4987:63;;4942:118;4448:619;;;;;:::o;5073:77::-;5110:7;5139:5;5128:16;;5073:77;;;:::o;5156:118::-;5243:24;5261:5;5243:24;:::i;:::-;5238:3;5231:37;5156:118;;:::o;5280:222::-;5373:4;5411:2;5400:9;5396:18;5388:26;;5424:71;5492:1;5481:9;5477:17;5468:6;5424:71;:::i;:::-;5280:222;;;;:::o;5508:86::-;5543:7;5583:4;5576:5;5572:16;5561:27;;5508:86;;;:::o;5600:112::-;5683:22;5699:5;5683:22;:::i;:::-;5678:3;5671:35;5600:112;;:::o;5718:214::-;5807:4;5845:2;5834:9;5830:18;5822:26;;5858:67;5922:1;5911:9;5907:17;5898:6;5858:67;:::i;:::-;5718:214;;;;:::o;5938:329::-;5997:6;6046:2;6034:9;6025:7;6021:23;6017:32;6014:119;;;6052:79;;:::i;:::-;6014:119;6172:1;6197:53;6242:7;6233:6;6222:9;6218:22;6197:53;:::i;:::-;6187:63;;6143:117;5938:329;;;;:::o;6273:122::-;6346:24;6364:5;6346:24;:::i;:::-;6339:5;6336:35;6326:63;;6385:1;6382;6375:12;6326:63;6273:122;:::o;6401:139::-;6447:5;6485:6;6472:20;6463:29;;6501:33;6528:5;6501:33;:::i;:::-;6401:139;;;;:::o;6546:118::-;6617:22;6633:5;6617:22;:::i;:::-;6610:5;6607:33;6597:61;;6654:1;6651;6644:12;6597:61;6546:118;:::o;6670:135::-;6714:5;6752:6;6739:20;6730:29;;6768:31;6793:5;6768:31;:::i;:::-;6670:135;;;;:::o;6811:907::-;6904:6;6912;6920;6928;6936;6985:3;6973:9;6964:7;6960:23;6956:33;6953:120;;;6992:79;;:::i;:::-;6953:120;7112:1;7137:53;7182:7;7173:6;7162:9;7158:22;7137:53;:::i;:::-;7127:63;;7083:117;7239:2;7265:53;7310:7;7301:6;7290:9;7286:22;7265:53;:::i;:::-;7255:63;;7210:118;7367:2;7393:51;7436:7;7427:6;7416:9;7412:22;7393:51;:::i;:::-;7383:61;;7338:116;7493:2;7519:53;7564:7;7555:6;7544:9;7540:22;7519:53;:::i;:::-;7509:63;;7464:118;7621:3;7648:53;7693:7;7684:6;7673:9;7669:22;7648:53;:::i;:::-;7638:63;;7592:119;6811:907;;;;;;;;:::o;7724:329::-;7783:6;7832:2;7820:9;7811:7;7807:23;7803:32;7800:119;;;7838:79;;:::i;:::-;7800:119;7958:1;7983:53;8028:7;8019:6;8008:9;8004:22;7983:53;:::i;:::-;7973:63;;7929:117;7724:329;;;;:::o;8059:1199::-;8170:6;8178;8186;8194;8202;8210;8218;8267:3;8255:9;8246:7;8242:23;8238:33;8235:120;;;8274:79;;:::i;:::-;8235:120;8394:1;8419:53;8464:7;8455:6;8444:9;8440:22;8419:53;:::i;:::-;8409:63;;8365:117;8521:2;8547:53;8592:7;8583:6;8572:9;8568:22;8547:53;:::i;:::-;8537:63;;8492:118;8649:2;8675:53;8720:7;8711:6;8700:9;8696:22;8675:53;:::i;:::-;8665:63;;8620:118;8777:2;8803:53;8848:7;8839:6;8828:9;8824:22;8803:53;:::i;:::-;8793:63;;8748:118;8905:3;8932:51;8975:7;8966:6;8955:9;8951:22;8932:51;:::i;:::-;8922:61;;8876:117;9032:3;9059:53;9104:7;9095:6;9084:9;9080:22;9059:53;:::i;:::-;9049:63;;9003:119;9161:3;9188:53;9233:7;9224:6;9213:9;9209:22;9188:53;:::i;:::-;9178:63;;9132:119;8059:1199;;;;;;;;;;:::o;9264:474::-;9332:6;9340;9389:2;9377:9;9368:7;9364:23;9360:32;9357:119;;;9395:79;;:::i;:::-;9357:119;9515:1;9540:53;9585:7;9576:6;9565:9;9561:22;9540:53;:::i;:::-;9530:63;;9486:117;9642:2;9668:53;9713:7;9704:6;9693:9;9689:22;9668:53;:::i;:::-;9658:63;;9613:118;9264:474;;;;;:::o;9744:1491::-;9873:6;9881;9889;9897;9905;9913;9921;9929;9937;9986:3;9974:9;9965:7;9961:23;9957:33;9954:120;;;9993:79;;:::i;:::-;9954:120;10113:1;10138:53;10183:7;10174:6;10163:9;10159:22;10138:53;:::i;:::-;10128:63;;10084:117;10240:2;10266:53;10311:7;10302:6;10291:9;10287:22;10266:53;:::i;:::-;10256:63;;10211:118;10368:2;10394:53;10439:7;10430:6;10419:9;10415:22;10394:53;:::i;:::-;10384:63;;10339:118;10496:2;10522:53;10567:7;10558:6;10547:9;10543:22;10522:53;:::i;:::-;10512:63;;10467:118;10624:3;10651:53;10696:7;10687:6;10676:9;10672:22;10651:53;:::i;:::-;10641:63;;10595:119;10753:3;10780:53;10825:7;10816:6;10805:9;10801:22;10780:53;:::i;:::-;10770:63;;10724:119;10882:3;10909:51;10952:7;10943:6;10932:9;10928:22;10909:51;:::i;:::-;10899:61;;10853:117;11009:3;11036:53;11081:7;11072:6;11061:9;11057:22;11036:53;:::i;:::-;11026:63;;10980:119;11138:3;11165:53;11210:7;11201:6;11190:9;11186:22;11165:53;:::i;:::-;11155:63;;11109:119;9744:1491;;;;;;;;;;;:::o;11241:474::-;11309:6;11317;11366:2;11354:9;11345:7;11341:23;11337:32;11334:119;;;11372:79;;:::i;:::-;11334:119;11492:1;11517:53;11562:7;11553:6;11542:9;11538:22;11517:53;:::i;:::-;11507:63;;11463:117;11619:2;11645:53;11690:7;11681:6;11670:9;11666:22;11645:53;:::i;:::-;11635:63;;11590:118;11241:474;;;;;:::o;11721:180::-;11769:77;11766:1;11759:88;11866:4;11863:1;11856:15;11890:4;11887:1;11880:15;11907:191;11947:3;11966:20;11984:1;11966:20;:::i;:::-;11961:25;;12000:20;12018:1;12000:20;:::i;:::-;11995:25;;12043:1;12040;12036:9;12029:16;;12064:3;12061:1;12058:10;12055:36;;;12071:18;;:::i;:::-;12055:36;11907:191;;;;:::o;12104:118::-;12191:24;12209:5;12191:24;:::i;:::-;12186:3;12179:37;12104:118;;:::o;12228:442::-;12377:4;12415:2;12404:9;12400:18;12392:26;;12428:71;12496:1;12485:9;12481:17;12472:6;12428:71;:::i;:::-;12509:72;12577:2;12566:9;12562:18;12553:6;12509:72;:::i;:::-;12591;12659:2;12648:9;12644:18;12635:6;12591:72;:::i;:::-;12228:442;;;;;;:::o;12676:233::-;12715:3;12738:24;12756:5;12738:24;:::i;:::-;12729:33;;12784:66;12777:5;12774:77;12771:103;;12854:18;;:::i;:::-;12771:103;12901:1;12894:5;12890:13;12883:20;;12676:233;;;:::o;12915:775::-;13148:4;13186:3;13175:9;13171:19;13163:27;;13200:71;13268:1;13257:9;13253:17;13244:6;13200:71;:::i;:::-;13281:72;13349:2;13338:9;13334:18;13325:6;13281:72;:::i;:::-;13363;13431:2;13420:9;13416:18;13407:6;13363:72;:::i;:::-;13445;13513:2;13502:9;13498:18;13489:6;13445:72;:::i;:::-;13527:73;13595:3;13584:9;13580:19;13571:6;13527:73;:::i;:::-;13610;13678:3;13667:9;13663:19;13654:6;13610:73;:::i;:::-;12915:775;;;;;;;;;:::o;13696:886::-;13957:4;13995:3;13984:9;13980:19;13972:27;;14009:71;14077:1;14066:9;14062:17;14053:6;14009:71;:::i;:::-;14090:72;14158:2;14147:9;14143:18;14134:6;14090:72;:::i;:::-;14172;14240:2;14229:9;14225:18;14216:6;14172:72;:::i;:::-;14254;14322:2;14311:9;14307:18;14298:6;14254:72;:::i;:::-;14336:73;14404:3;14393:9;14389:19;14380:6;14336:73;:::i;:::-;14419;14487:3;14476:9;14472:19;14463:6;14419:73;:::i;:::-;14502;14570:3;14559:9;14555:19;14546:6;14502:73;:::i;:::-;13696:886;;;;;;;;;;:::o;14588:148::-;14690:11;14727:3;14712:18;;14588:148;;;;:::o;14742:214::-;14882:66;14878:1;14870:6;14866:14;14859:90;14742:214;:::o;14962:400::-;15122:3;15143:84;15225:1;15220:3;15143:84;:::i;:::-;15136:91;;15236:93;15325:3;15236:93;:::i;:::-;15354:1;15349:3;15345:11;15338:18;;14962:400;;;:::o;15368:79::-;15407:7;15436:5;15425:16;;15368:79;;;:::o;15453:157::-;15558:45;15578:24;15596:5;15578:24;:::i;:::-;15558:45;:::i;:::-;15553:3;15546:58;15453:157;;:::o;15616:663::-;15857:3;15879:148;16023:3;15879:148;:::i;:::-;15872:155;;16037:75;16108:3;16099:6;16037:75;:::i;:::-;16137:2;16132:3;16128:12;16121:19;;16150:75;16221:3;16212:6;16150:75;:::i;:::-;16250:2;16245:3;16241:12;16234:19;;16270:3;16263:10;;15616:663;;;;;:::o;16285:545::-;16458:4;16496:3;16485:9;16481:19;16473:27;;16510:71;16578:1;16567:9;16563:17;16554:6;16510:71;:::i;:::-;16591:68;16655:2;16644:9;16640:18;16631:6;16591:68;:::i;:::-;16669:72;16737:2;16726:9;16722:18;16713:6;16669:72;:::i;:::-;16751;16819:2;16808:9;16804:18;16795:6;16751:72;:::i;:::-;16285:545;;;;;;;:::o
Swarm Source
ipfs://2d1981ac8b627283ef47a73c436d5ea8199b8284c468e11637b00f43da23b43b
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.
Add Token to MetaMask (Web3)