ERC-20
Gaming
Overview
Max Total Supply
999,230,770 MGG
Holders
326 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH (+4.96%)
Onchain Market Cap
$1,482,248.93
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MGG
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-05 */ pragma solidity 0.5.16; pragma experimental ABIEncoderV2; // From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol // Subject to the MIT license. /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, errorMessage); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction underflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, errorMessage); return c; } /** * @dev Returns the integer division of two unsigned integers. * Reverts on division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. * Reverts with custom message on division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an account access to this role */ function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } /** * @dev remove an account's access to this role */ function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } /** * @dev check if an account has this role * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0)); return role.bearer[account]; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public; } contract PauserRole { using Roles for Roles.Role; event PauserAdded(address indexed account); event PauserRemoved(address indexed account); Roles.Role private _pausers; constructor () internal { _addPauser(msg.sender); } modifier onlyPauser() { require(isPauser(msg.sender)); _; } function isPauser(address account) public view returns (bool) { return _pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function renouncePauser() public { _removePauser(msg.sender); } function _addPauser(address account) internal { _pausers.add(account); emit PauserAdded(account); } function _removePauser(address account) internal { _pausers.remove(account); emit PauserRemoved(account); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is PauserRole { event Paused(address account); event Unpaused(address account); bool private _paused; constructor () internal { _paused = false; } /** * @return true if the contract is paused, false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(msg.sender); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(msg.sender); } } contract MGG is Ownable, Pausable { /// @notice EIP-20 token name for this token string public constant name = "MetaGaming Guild"; /// @notice EIP-20 token symbol for this token string public constant symbol = "MGG"; /// @notice EIP-20 token decimals for this token uint8 public constant decimals = 18; /// @notice Total number of tokens in circulation uint public totalSupply = 1_000_000_000e18; // 1 billion MGG /// @notice Allowance amounts on behalf of others mapping (address => mapping (address => uint96)) internal allowances; /// @notice Official record of token balances for each account mapping (address => uint96) internal balances; /// @notice A record of each accounts delegate mapping (address => address) public delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint96 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice The EIP-712 typehash for the permit struct used by the contract bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /// @notice The standard EIP-20 transfer event event Transfer(address indexed from, address indexed to, uint256 amount); /// @notice The standard EIP-20 approval event event Approval(address indexed owner, address indexed spender, uint256 amount); /// @notice The Admin Token Recovery event event AdminTokenRecovery(address tokenRecovered, uint256 amount); /// @notice The standard EIP-20 burn event event Burn(address indexed from, uint256 value); /** * @notice Construct a new DGG token * @param account The initial account to grant all the tokens */ constructor(address account) public { balances[account] = uint96(totalSupply); _moveDelegates(address(0), account, uint96(totalSupply)); emit Transfer(address(0), account, totalSupply); } /** * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` * @param account The address of the account holding the funds * @param spender The address of the account spending the funds * @return The number of tokens approved */ function allowance(address account, address spender) external view returns (uint) { return allowances[account][spender]; } /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param rawAmount The number of tokens that are approved (2^256-1 means infinite) * @return Whether or not the approval succeeded */ function approve(address spender, uint rawAmount) external whenNotPaused returns (bool) { uint96 amount; if (rawAmount == uint(-1)) { amount = uint96(-1); } else { amount = safe96(rawAmount, "MGG::approve: amount exceeds 96 bits"); } allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } /** * @notice Triggers an approval from owner to spends * @param owner The address to approve from * @param spender The address to be approved * @param rawAmount The number of tokens that are approved (2^256-1 means infinite) * @param deadline The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function permit(address owner, address spender, uint rawAmount, uint deadline, uint8 v, bytes32 r, bytes32 s) external { uint96 amount; if (rawAmount == uint(-1)) { amount = uint96(-1); } else { amount = safe96(rawAmount, "MGG::permit: amount exceeds 96 bits"); } bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this))); bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, rawAmount, nonces[owner]++, deadline)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "MGG::permit: invalid signature"); require(signatory == owner, "MGG::permit: unauthorized"); require(now <= deadline, "MGG::permit: signature expired"); allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @notice Get the number of tokens held by the `account` * @param account The address of the account to get the balance of * @return The number of tokens held */ function balanceOf(address account) external view returns (uint) { return balances[account]; } /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param rawAmount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transfer(address dst, uint rawAmount) external whenNotPaused returns (bool) { uint96 amount = safe96(rawAmount, "MGG::transfer: amount exceeds 96 bits"); _transferTokens(msg.sender, dst, amount); return true; } /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param rawAmount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transferFrom(address src, address dst, uint rawAmount) external whenNotPaused returns (bool) { address spender = msg.sender; uint96 spenderAllowance = allowances[src][spender]; uint96 amount = safe96(rawAmount, "MGG::transferFrom: amount exceeds 96 bits"); if (spender != src && spenderAllowance != uint96(-1)) { uint96 newAllowance = sub96(spenderAllowance, amount, "MGG::transferFrom: transfer amount exceeds spender allowance"); allowances[src][spender] = newAllowance; emit Approval(src, spender, newAllowance); } _transferTokens(src, dst, amount); return true; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) public { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public { bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this))); bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "MGG::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "MGG::delegateBySig: invalid nonce"); require(now <= expiry, "MGG::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint96) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) public view returns (uint96) { require(blockNumber < block.number, "MGG::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = delegates[delegator]; uint96 delegatorBalance = balances[delegator]; delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _transferTokens(address src, address dst, uint96 amount) internal { require(src != address(0), "MGG::_transferTokens: cannot transfer from the zero address"); require(dst != address(0), "MGG::_transferTokens: cannot transfer to the zero address"); balances[src] = sub96(balances[src], amount, "MGG::_transferTokens: transfer amount exceeds balance"); balances[dst] = add96(balances[dst], amount, "MGG::_transferTokens: transfer amount overflows"); emit Transfer(src, dst, amount); _moveDelegates(delegates[src], delegates[dst], amount); } function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { uint32 srcRepNum = numCheckpoints[srcRep]; uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint96 srcRepNew = sub96(srcRepOld, amount, "MGG::_moveDelegates: vote amount underflows"); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { uint32 dstRepNum = numCheckpoints[dstRep]; uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint96 dstRepNew = add96(dstRepOld, amount, "MGG::_moveDelegates: vote amount overflows"); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal { uint32 blockNumber = safe32(block.number, "MGG::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function safe96(uint n, string memory errorMessage) internal pure returns (uint96) { require(n < 2**96, errorMessage); return uint96(n); } function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) { uint96 c = a + b; require(c >= a, errorMessage); return c; } function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) { require(b <= a, errorMessage); return a - b; } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } /** * @notice It allows the admin to retrieve lost tokens sent to the contract * @param _tokenAddress: the address of the token to withdraw * @param _tokenAmount: the number of tokens to withdraw * @dev This function is only callable by admin. */ function retrieveLostTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner { require(_tokenAddress != address(0), "MGG::retrieveLostTokens: Invalid _tokenAddress"); IERC20(_tokenAddress).transfer(address(msg.sender), _tokenAmount); emit AdminTokenRecovery(_tokenAddress, _tokenAmount); } function burn(uint rawAmount) public returns (bool success) { uint96 amount = safe96(rawAmount, "MGG::burn: amount exceeds 96 bits"); require(balances[msg.sender] >= amount, "MGG::burn: not enough balance"); // Check if the sender has enough balances[msg.sender] = sub96(balances[msg.sender], amount, "MGG::burn: burn amount exceeds balance"); // Subtract from the sender totalSupply = SafeMath.sub(totalSupply, rawAmount); // Updates totalSupply _moveDelegates(msg.sender, address(0), amount); emit Burn(msg.sender, rawAmount); return true; } /** * @notice Token owner can approve for spender to transferFrom(...) tokens from the token owner's account. The spender contract function receiveApproval(...) is then executed * @param spender address The address which will spend the funds * @param rawAmount uint256 The amount of tokens to be spent * @param data bytes Additional data with no specified format, sent in call to `spender` */ function approveAndCall(address spender, uint rawAmount, bytes memory data) public returns (bool success) { uint96 amount = safe96(rawAmount, "MGG::approveAndCall: amount exceeds 96 bits"); allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, rawAmount, address(this), data); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenRecovered","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminTokenRecovery","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"retrieveLostTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526b033b2e3c9fd0803ce80000006003553480156200002157600080fd5b5060405162003598380380620035988339810160408190526200004491620006a9565b6000620000596001600160e01b036200016216565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000b7336001600160e01b036200016616565b6002805460ff19169055600380546001600160a01b038316600090815260056020526040812080546001600160601b0319166001600160601b039093169290921790915590546200010b91908390620001b8565b806001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60035460405162000153919062000741565b60405180910390a35062000802565b3390565b620001818160016200038b60201b62001cac1790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b816001600160a01b0316836001600160a01b031614158015620001e457506000816001600160601b0316115b1562000386576001600160a01b03831615620002b8576001600160a01b03831660009081526008602052604081205463ffffffff1690816200022857600062000268565b6001600160a01b0385166000908152600760209081526040808320600019860163ffffffff16845290915290205464010000000090046001600160601b03165b905060006200029b82856040518060600160405280602b81526020016200353a602b91396001600160e01b03620003e416565b9050620002b4868484846001600160e01b036200043416565b5050505b6001600160a01b0382161562000386576001600160a01b03821660009081526008602052604081205463ffffffff169081620002f657600062000336565b6001600160a01b0384166000908152600760209081526040808320600019860163ffffffff16845290915290205464010000000090046001600160601b03165b905060006200036982856040518060600160405280602a815260200162003510602a91396001600160e01b03620005f016565b905062000382858484846001600160e01b036200043416565b5050505b505050565b6001600160a01b0381166200039f57600080fd5b620003b482826001600160e01b036200062f16565b15620003bf57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000836001600160601b0316836001600160601b031611158290620004275760405162461bcd60e51b81526004016200041e91906200072e565b60405180910390fd5b50508183035b9392505050565b6000620004644360405180606001604052806033815260200162003565603391396001600160e01b036200066916565b905060008463ffffffff16118015620004ae57506001600160a01b038516600090815260076020908152604080832063ffffffff6000198901811685529252909120548282169116145b156200050a576001600160a01b0385166000908152600760209081526040808320600019880163ffffffff16845290915290208054600160201b600160801b0319166401000000006001600160601b03851602179055620005a4565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600783528781208c87168252835287812096518754945190951664010000000002600160201b600160801b031995871663ffffffff19958616179590951694909417909555938252600890935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051620005e192919062000751565b60405180910390a25050505050565b6000838301826001600160601b038087169083161015620006265760405162461bcd60e51b81526004016200041e91906200072e565b50949350505050565b60006001600160a01b0382166200064557600080fd5b506001600160a01b03811660009081526020839052604090205460ff165b92915050565b6000816401000000008410620006945760405162461bcd60e51b81526004016200041e91906200072e565b509192915050565b80516200066381620007e8565b600060208284031215620006bc57600080fd5b6000620006ca84846200069c565b949350505050565b6000620006df8262000770565b620006eb818562000774565b9350620006fd818560208601620007ab565b6200070881620007de565b9093019392505050565b6200071d816200078f565b82525050565b6200071d816200079e565b602080825281016200042d8184620006d2565b6020810162000663828462000712565b6040810162000761828562000723565b6200042d602083018462000723565b5190565b90815260200190565b60006001600160a01b03821662000663565b90565b6001600160601b031690565b6000620006638262000792565b60005b83811015620007c8578181015183820152602001620007ae565b83811115620007d8576000848401525b50505050565b601f01601f191690565b620007f3816200077d565b8114620007ff57600080fd5b50565b612cfe80620008126000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063b4b5ea57116100ad578063d660b6511161007c578063d660b651146103f6578063dd62ed3e14610409578063e7a324dc1461041c578063f1127ed814610424578063f2fde38b14610445576101fb565b8063b4b5ea57146103aa578063c3cda520146103bd578063cae9ca51146103d0578063d505accf146103e3576101fb565b80638456cb59116100e95780638456cb591461037f5780638da5cb5b1461038757806395d89b411461038f578063a9059cbb14610397576101fb565b8063715018a614610331578063782d6fe1146103395780637ecebe001461035957806382dc1ec41461036c576101fb565b806342966c68116101925780635c975abb116101615780635c975abb146102ee5780636ef8d66d146102f65780636fcfff45146102fe57806370a082311461031e576101fb565b806342966c681461029557806346fbf68e146102a8578063587cde1e146102bb5780635c19a95c146102db576101fb565b806323b872dd116101ce57806323b872dd1461025b57806330adf81f1461026e578063313ce567146102765780633f4ba83a1461028b576101fb565b806306fdde0314610200578063095ea7b31461021e57806318160ddd1461023e57806320606b7014610253575b600080fd5b610208610458565b60405161021591906127ec565b60405180910390f35b61023161022c366004611f0a565b610484565b60405161021591906126e8565b610246610543565b60405161021591906126f6565b610246610549565b610231610269366004611e21565b610560565b6102466106a8565b61027e6106b4565b60405161021591906128f6565b6102936106b9565b005b6102316102a336600461206a565b61071e565b6102316102b6366004611dc1565b61085f565b6102ce6102c9366004611dc1565b610872565b604051610215919061265f565b6102936102e9366004611dc1565b61088d565b61023161089a565b6102936108a3565b61031161030c366004611dc1565b6108ae565b60405161021591906128cd565b61024661032c366004611dc1565b6108c6565b6102936108ea565b61034c610347366004611f0a565b610969565b6040516102159190612912565b610246610367366004611dc1565b610b77565b61029361037a366004611dc1565b610b89565b610293610ba4565b6102ce610c03565b610208610c12565b6102316103a5366004611f0a565b610c31565b61034c6103b8366004611dc1565b610c7f565b6102936103cb366004611f95565b610cef565b6102316103de366004611f3a565b610ee1565b6102936103f1366004611e6e565b610fdc565b610293610404366004611f0a565b6112be565b610246610417366004611de7565b6113d7565b61024661140b565b61043761043236600461201c565b611417565b6040516102159291906128db565b610293610453366004611dc1565b61144c565b6040518060400160405280601081526020016f13595d1851d85b5a5b99c811dd5a5b1960821b81525081565b60025460009060ff161561049757600080fd5b60006000198314156104ac57506000196104d1565b6104ce83604051806060016040528060248152602001612bad6024913961148a565b90505b3360008181526004602090815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b0386161790559051909190600080516020612c548339815191529061052f908590612904565b60405180910390a360019150505b92915050565b60035481565b60405161055590612649565b604051809103902081565b60025460009060ff161561057357600080fd5b6001600160a01b03841660009081526004602090815260408083203380855290835281842054825160608101909352602980845291946001600160601b039091169390926105c9928892612b139083013961148a565b9050866001600160a01b0316836001600160a01b0316141580156105f657506001600160601b0382811614155b1561068e57600061062083836040518060600160405280603c8152602001612b3c603c91396114b9565b6001600160a01b038981166000818152600460209081526040808320948a16808452949091529081902080546001600160601b0319166001600160601b038616179055519293509091600080516020612c5483398151915290610684908590612904565b60405180910390a3505b6106998787836114f8565b600193505050505b9392505050565b6040516105559061263e565b601281565b6106c23361085f565b6106cb57600080fd5b60025460ff166106da57600080fd5b6002805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9061071490339061266d565b60405180910390a1565b60008061074383604051806060016040528060218152602001612bd16021913961148a565b336000908152600560205260409020549091506001600160601b038083169116101561078a5760405162461bcd60e51b81526004016107819061285d565b60405180910390fd5b336000908152600560209081526040918290205482516060810190935260268084526107cc936001600160601b039092169285929190612a97908301396114b9565b33600090815260056020526040902080546001600160601b0319166001600160601b039290921691909117905560035461080690846116a3565b600355610815336000836116e5565b336001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58460405161084e91906126f6565b60405180910390a250600192915050565b600061053d60018363ffffffff61187716565b6006602052600090815260409020546001600160a01b031681565b61089733826118ac565b50565b60025460ff1690565b6108ac33611936565b565b60086020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600560205260409020546001600160601b031690565b6108f261197e565b6000546001600160a01b0390811691161461091f5760405162461bcd60e51b81526004016107819061289d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600043821061098a5760405162461bcd60e51b8152600401610781906128ad565b6001600160a01b03831660009081526008602052604090205463ffffffff16806109b857600091505061053d565b6001600160a01b038416600090815260076020908152604080832063ffffffff600019860181168552925290912054168310610a34576001600160a01b03841660009081526007602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b0316905061053d565b6001600160a01b038416600090815260076020908152604080832083805290915290205463ffffffff16831015610a6f57600091505061053d565b600060001982015b8163ffffffff168163ffffffff161115610b3257600282820363ffffffff16048103610aa1611d1f565b506001600160a01b038716600090815260076020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415610b0d5760200151945061053d9350505050565b805163ffffffff16871115610b2457819350610b2b565b6001820392505b5050610a77565b506001600160a01b038516600090815260076020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60096020526000908152604090205481565b610b923361085f565b610b9b57600080fd5b61089781611982565b610bad3361085f565b610bb657600080fd5b60025460ff1615610bc657600080fd5b6002805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589061071490339061266d565b6000546001600160a01b031690565b604051806040016040528060038152602001624d474760e81b81525081565b60025460009060ff1615610c4457600080fd5b6000610c6883604051806060016040528060258152602001612c976025913961148a565b9050610c753385836114f8565b5060019392505050565b6001600160a01b03811660009081526008602052604081205463ffffffff1680610caa5760006106a1565b6001600160a01b0383166000908152600760209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b6000604051610cfd90612649565b60408051918290038220828201909152601082526f13595d1851d85b5a5b99c811dd5a5b1960821b6020909201919091527f12717300686a489488a90080f7cc7f090152151e495ab76cbbcbd3c2c220e1b8610d576119ca565b30604051602001610d6b949392919061279c565b6040516020818303038152906040528051906020012090506000604051610d9190612654565b604051908190038120610dac918a908a908a9060200161275e565b60405160208183030381529060405280519060200120905060008282604051602001610dd992919061260d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e1694939291906127d1565b6020604051602081039080840390855afa158015610e38573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e6b5760405162461bcd60e51b81526004016107819061287d565b6001600160a01b03811660009081526009602052604090208054600181019091558914610eaa5760405162461bcd60e51b81526004016107819061283d565b87421115610eca5760405162461bcd60e51b81526004016107819061280d565b610ed4818b6118ac565b505050505b505050505050565b600080610f06846040518060600160405280602b8152602001612ae8602b913961148a565b3360008181526004602090815260408083206001600160a01b038b1680855292529182902080546001600160601b0319166001600160601b038616179055905192935091600080516020612c5483398151915290610f65908590612904565b60405180910390a3604051638f4ffcb160e01b81526001600160a01b03861690638f4ffcb190610f9f903390889030908990600401612696565b600060405180830381600087803b158015610fb957600080fd5b505af1158015610fcd573d6000803e3d6000fd5b50600198975050505050505050565b6000600019861415610ff15750600019611016565b61101386604051806060016040528060238152602001612c746023913961148a565b90505b600060405161102490612649565b60408051918290038220828201909152601082526f13595d1851d85b5a5b99c811dd5a5b1960821b6020909201919091527f12717300686a489488a90080f7cc7f090152151e495ab76cbbcbd3c2c220e1b861107e6119ca565b30604051602001611092949392919061279c565b60405160208183030381529060405280519060200120905060006040516110b89061263e565b604080519182900382206001600160a01b038d166000908152600960209081529290208054600181019091556110fa9391928e928e928e9290918e9101612704565b6040516020818303038152906040528051906020012090506000828260405160200161112792919061260d565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161116494939291906127d1565b6020604051602081039080840390855afa158015611186573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166111b95760405162461bcd60e51b8152600401610781906127fd565b8b6001600160a01b0316816001600160a01b0316146111ea5760405162461bcd60e51b81526004016107819061286d565b8842111561120a5760405162461bcd60e51b81526004016107819061284d565b84600460008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b0316600080516020612c54833981519152876040516112a89190612904565b60405180910390a3505050505050505050505050565b6112c661197e565b6000546001600160a01b039081169116146112f35760405162461bcd60e51b81526004016107819061289d565b6001600160a01b0382166113195760405162461bcd60e51b81526004016107819061288d565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611347903390859060040161267b565b602060405180830381600087803b15801561136157600080fd5b505af1158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611399919081019061204c565b507f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab7812982826040516113cb9291906126da565b60405180910390a15050565b6001600160a01b0391821660009081526004602090815260408083209390941682529190915220546001600160601b031690565b60405161055590612654565b600760209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b61145461197e565b6000546001600160a01b039081169116146114815760405162461bcd60e51b81526004016107819061289d565b610897816119ce565b600081600160601b84106114b15760405162461bcd60e51b815260040161078191906127ec565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114f05760405162461bcd60e51b815260040161078191906127ec565b505050900390565b6001600160a01b03831661151e5760405162461bcd60e51b8152600401610781906128bd565b6001600160a01b0382166115445760405162461bcd60e51b81526004016107819061281d565b6001600160a01b03831660009081526005602090815260409182902054825160608101909352603580845261158f936001600160601b039092169285929190612b78908301396114b9565b6001600160a01b03848116600090815260056020908152604080832080546001600160601b0319166001600160601b0396871617905592861682529082902054825160608101909352602f8084526115f79491909116928592909190612c2590830139611a4f565b6001600160a01b038381166000818152600560205260409081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611664908590612904565b60405180910390a36001600160a01b0380841660009081526006602052604080822054858416835291205461169e929182169116836116e5565b505050565b60006106a183836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250611a8b565b816001600160a01b0316836001600160a01b03161415801561171057506000816001600160601b0316115b1561169e576001600160a01b038316156117c8576001600160a01b03831660009081526008602052604081205463ffffffff16908161175057600061178f565b6001600160a01b0385166000908152600760209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006117b682856040518060600160405280602b8152602001612abd602b91396114b9565b90506117c486848484611aaf565b5050505b6001600160a01b0382161561169e576001600160a01b03821660009081526008602052604081205463ffffffff169081611803576000611842565b6001600160a01b0384166000908152600760209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061186982856040518060600160405280602a8152602001612a6d602a9139611a4f565b9050610ed985848484611aaf565b60006001600160a01b03821661188c57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b03808316600081815260066020818152604080842080546005845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46119308284836116e5565b50505050565b61194760018263ffffffff611c6416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b3390565b61199360018263ffffffff611cac16565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b4690565b6001600160a01b0381166119f45760405162461bcd60e51b81526004016107819061282d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000838301826001600160601b038087169083161015611a825760405162461bcd60e51b815260040161078191906127ec565b50949350505050565b600081848411156114f05760405162461bcd60e51b815260040161078191906127ec565b6000611ad343604051806060016040528060338152602001612bf260339139611cf8565b905060008463ffffffff16118015611b1c57506001600160a01b038516600090815260076020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611b7b576001600160a01b0385166000908152600760209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055611c1a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600783528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600890935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611c55929190612920565b60405180910390a25050505050565b6001600160a01b038116611c7757600080fd5b611c818282611877565b611c8a57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116611cbf57600080fd5b611cc98282611877565b15611cd357600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600081600160201b84106114b15760405162461bcd60e51b815260040161078191906127ec565b604080518082019091526000808252602082015290565b803561053d81612a34565b805161053d81612a48565b803561053d81612a51565b600082601f830112611d6857600080fd5b8135611d7b611d7682612962565b61293b565b91508082526020830160208301858383011115611d9757600080fd5b611da28382846129f2565b50505092915050565b803561053d81612a5a565b803561053d81612a63565b600060208284031215611dd357600080fd5b6000611ddf8484611d36565b949350505050565b60008060408385031215611dfa57600080fd5b6000611e068585611d36565b9250506020611e1785828601611d36565b9150509250929050565b600080600060608486031215611e3657600080fd5b6000611e428686611d36565b9350506020611e5386828701611d36565b9250506040611e6486828701611d4c565b9150509250925092565b600080600080600080600060e0888a031215611e8957600080fd5b6000611e958a8a611d36565b9750506020611ea68a828b01611d36565b9650506040611eb78a828b01611d4c565b9550506060611ec88a828b01611d4c565b9450506080611ed98a828b01611db6565b93505060a0611eea8a828b01611d4c565b92505060c0611efb8a828b01611d4c565b91505092959891949750929550565b60008060408385031215611f1d57600080fd5b6000611f298585611d36565b9250506020611e1785828601611d4c565b600080600060608486031215611f4f57600080fd5b6000611f5b8686611d36565b9350506020611f6c86828701611d4c565b925050604084013567ffffffffffffffff811115611f8957600080fd5b611e6486828701611d57565b60008060008060008060c08789031215611fae57600080fd5b6000611fba8989611d36565b9650506020611fcb89828a01611d4c565b9550506040611fdc89828a01611d4c565b9450506060611fed89828a01611db6565b9350506080611ffe89828a01611d4c565b92505060a061200f89828a01611d4c565b9150509295509295509295565b6000806040838503121561202f57600080fd5b600061203b8585611d36565b9250506020611e1785828601611dab565b60006020828403121561205e57600080fd5b6000611ddf8484611d41565b60006020828403121561207c57600080fd5b6000611ddf8484611d4c565b612091816129d6565b82525050565b6120918161299c565b612091816129a7565b612091816129ac565b6120916120be826129ac565b6129ac565b60006120ce8261298a565b6120d8818561298e565b93506120e88185602086016129fe565b6120f181612a2a565b9093019392505050565b6000612108601e8361298e565b7f4d47473a3a7065726d69743a20696e76616c6964207369676e61747572650000815260200192915050565b600061214160258361298e565b7f4d47473a3a64656c656761746542795369673a207369676e61747572652065788152641c1a5c995960da1b602082015260400192915050565b600061218860398361298e565b7f4d47473a3a5f7472616e73666572546f6b656e733a2063616e6e6f742074726181527f6e7366657220746f20746865207a65726f206164647265737300000000000000602082015260400192915050565b60006121e760268361298e565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061222f60218361298e565b7f4d47473a3a64656c656761746542795369673a20696e76616c6964206e6f6e638152606560f81b602082015260400192915050565b6000612272600283612997565b61190160f01b815260020192915050565b6000612290601e8361298e565b7f4d47473a3a7065726d69743a207369676e617475726520657870697265640000815260200192915050565b60006122c9601d8361298e565b7f4d47473a3a6275726e3a206e6f7420656e6f7567682062616c616e6365000000815260200192915050565b600061230260198361298e565b7f4d47473a3a7065726d69743a20756e617574686f72697a656400000000000000815260200192915050565b600061233b605283612997565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63656020820152712c75696e7432353620646561646c696e652960701b604082015260520192915050565b60006123b560258361298e565b7f4d47473a3a64656c656761746542795369673a20696e76616c6964207369676e815264617475726560d81b602082015260400192915050565b60006123fc602e8361298e565b7f4d47473a3a72657472696576654c6f7374546f6b656e733a20496e76616c696481526d205f746f6b656e4164647265737360901b602082015260400192915050565b600061244c604383612997565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b60006124b760208361298e565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006124f060268361298e565b7f4d47473a3a6765745072696f72566f7465733a206e6f742079657420646574658152651c9b5a5b995960d21b602082015260400192915050565b6000612538603b8361298e565b7f4d47473a3a5f7472616e73666572546f6b656e733a2063616e6e6f742074726181527f6e736665722066726f6d20746865207a65726f20616464726573730000000000602082015260400192915050565b6000612597603a83612997565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0192915050565b612091816129bb565b612091816129c4565b612091816129e7565b612091816129ca565b600061261882612265565b915061262482856120b2565b60208201915061263482846120b2565b5060200192915050565b600061053d8261232e565b600061053d8261243f565b600061053d8261258a565b6020810161053d8284612097565b6020810161053d8284612088565b604081016126898285612088565b6106a160208301846120a9565b608081016126a48287612088565b6126b160208301866120a9565b6126be6040830185612097565b81810360608301526126d081846120c3565b9695505050505050565b604081016126898285612097565b6020810161053d82846120a0565b6020810161053d82846120a9565b60c0810161271282896120a9565b61271f6020830188612097565b61272c6040830187612097565b61273960608301866120a9565b61274660808301856120a9565b61275360a08301846120a9565b979650505050505050565b6080810161276c82876120a9565b6127796020830186612097565b61278660408301856120a9565b61279360608301846120a9565b95945050505050565b608081016127aa82876120a9565b6127b760208301866120a9565b6127c460408301856120a9565b6127936060830184612097565b608081016127df82876120a9565b61277960208301866125f2565b602080825281016106a181846120c3565b6020808252810161053d816120fb565b6020808252810161053d81612134565b6020808252810161053d8161217b565b6020808252810161053d816121da565b6020808252810161053d81612222565b6020808252810161053d81612283565b6020808252810161053d816122bc565b6020808252810161053d816122f5565b6020808252810161053d816123a8565b6020808252810161053d816123ef565b6020808252810161053d816124aa565b6020808252810161053d816124e3565b6020808252810161053d8161252b565b6020810161053d82846125e9565b604081016128e982856125e9565b6106a16020830184612604565b6020810161053d82846125f2565b6020810161053d82846125fb565b6020810161053d8284612604565b6040810161292e82856125fb565b6106a160208301846125fb565b60405181810167ffffffffffffffff8111828210171561295a57600080fd5b604052919050565b600067ffffffffffffffff82111561297957600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b919050565b600061053d826129af565b151590565b90565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6001600160601b031690565b600061053d82600061053d8261299c565b600061053d826129ca565b82818337506000910152565b60005b83811015612a19578181015183820152602001612a01565b838111156119305750506000910152565b601f01601f191690565b612a3d8161299c565b811461089757600080fd5b612a3d816129a7565b612a3d816129ac565b612a3d816129bb565b612a3d816129c456fe4d47473a3a5f6d6f766544656c6567617465733a20766f746520616d6f756e74206f766572666c6f77734d47473a3a6275726e3a206275726e20616d6f756e7420657863656564732062616c616e63654d47473a3a5f6d6f766544656c6567617465733a20766f746520616d6f756e7420756e646572666c6f77734d47473a3a617070726f7665416e6443616c6c3a20616d6f756e74206578636565647320393620626974734d47473a3a7472616e7366657246726f6d3a20616d6f756e74206578636565647320393620626974734d47473a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654d47473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d47473a3a617070726f76653a20616d6f756e74206578636565647320393620626974734d47473a3a6275726e3a20616d6f756e74206578636565647320393620626974734d47473a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734d47473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77738c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254d47473a3a7065726d69743a20616d6f756e74206578636565647320393620626974734d47473a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473a365627a7a72315820f55612dac0e09f50606baaf0f9f43953cb4225efa8fba8c1419e31f5d33725ae6c6578706572696d656e74616cf564736f6c634300051000404d47473a3a5f6d6f766544656c6567617465733a20766f746520616d6f756e74206f766572666c6f77734d47473a3a5f6d6f766544656c6567617465733a20766f746520616d6f756e7420756e646572666c6f77734d47473a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974730000000000000000000000003ff9bda6bb59fb87853a25a07764dc241a5ca4eb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063b4b5ea57116100ad578063d660b6511161007c578063d660b651146103f6578063dd62ed3e14610409578063e7a324dc1461041c578063f1127ed814610424578063f2fde38b14610445576101fb565b8063b4b5ea57146103aa578063c3cda520146103bd578063cae9ca51146103d0578063d505accf146103e3576101fb565b80638456cb59116100e95780638456cb591461037f5780638da5cb5b1461038757806395d89b411461038f578063a9059cbb14610397576101fb565b8063715018a614610331578063782d6fe1146103395780637ecebe001461035957806382dc1ec41461036c576101fb565b806342966c68116101925780635c975abb116101615780635c975abb146102ee5780636ef8d66d146102f65780636fcfff45146102fe57806370a082311461031e576101fb565b806342966c681461029557806346fbf68e146102a8578063587cde1e146102bb5780635c19a95c146102db576101fb565b806323b872dd116101ce57806323b872dd1461025b57806330adf81f1461026e578063313ce567146102765780633f4ba83a1461028b576101fb565b806306fdde0314610200578063095ea7b31461021e57806318160ddd1461023e57806320606b7014610253575b600080fd5b610208610458565b60405161021591906127ec565b60405180910390f35b61023161022c366004611f0a565b610484565b60405161021591906126e8565b610246610543565b60405161021591906126f6565b610246610549565b610231610269366004611e21565b610560565b6102466106a8565b61027e6106b4565b60405161021591906128f6565b6102936106b9565b005b6102316102a336600461206a565b61071e565b6102316102b6366004611dc1565b61085f565b6102ce6102c9366004611dc1565b610872565b604051610215919061265f565b6102936102e9366004611dc1565b61088d565b61023161089a565b6102936108a3565b61031161030c366004611dc1565b6108ae565b60405161021591906128cd565b61024661032c366004611dc1565b6108c6565b6102936108ea565b61034c610347366004611f0a565b610969565b6040516102159190612912565b610246610367366004611dc1565b610b77565b61029361037a366004611dc1565b610b89565b610293610ba4565b6102ce610c03565b610208610c12565b6102316103a5366004611f0a565b610c31565b61034c6103b8366004611dc1565b610c7f565b6102936103cb366004611f95565b610cef565b6102316103de366004611f3a565b610ee1565b6102936103f1366004611e6e565b610fdc565b610293610404366004611f0a565b6112be565b610246610417366004611de7565b6113d7565b61024661140b565b61043761043236600461201c565b611417565b6040516102159291906128db565b610293610453366004611dc1565b61144c565b6040518060400160405280601081526020016f13595d1851d85b5a5b99c811dd5a5b1960821b81525081565b60025460009060ff161561049757600080fd5b60006000198314156104ac57506000196104d1565b6104ce83604051806060016040528060248152602001612bad6024913961148a565b90505b3360008181526004602090815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b0386161790559051909190600080516020612c548339815191529061052f908590612904565b60405180910390a360019150505b92915050565b60035481565b60405161055590612649565b604051809103902081565b60025460009060ff161561057357600080fd5b6001600160a01b03841660009081526004602090815260408083203380855290835281842054825160608101909352602980845291946001600160601b039091169390926105c9928892612b139083013961148a565b9050866001600160a01b0316836001600160a01b0316141580156105f657506001600160601b0382811614155b1561068e57600061062083836040518060600160405280603c8152602001612b3c603c91396114b9565b6001600160a01b038981166000818152600460209081526040808320948a16808452949091529081902080546001600160601b0319166001600160601b038616179055519293509091600080516020612c5483398151915290610684908590612904565b60405180910390a3505b6106998787836114f8565b600193505050505b9392505050565b6040516105559061263e565b601281565b6106c23361085f565b6106cb57600080fd5b60025460ff166106da57600080fd5b6002805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9061071490339061266d565b60405180910390a1565b60008061074383604051806060016040528060218152602001612bd16021913961148a565b336000908152600560205260409020549091506001600160601b038083169116101561078a5760405162461bcd60e51b81526004016107819061285d565b60405180910390fd5b336000908152600560209081526040918290205482516060810190935260268084526107cc936001600160601b039092169285929190612a97908301396114b9565b33600090815260056020526040902080546001600160601b0319166001600160601b039290921691909117905560035461080690846116a3565b600355610815336000836116e5565b336001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58460405161084e91906126f6565b60405180910390a250600192915050565b600061053d60018363ffffffff61187716565b6006602052600090815260409020546001600160a01b031681565b61089733826118ac565b50565b60025460ff1690565b6108ac33611936565b565b60086020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600560205260409020546001600160601b031690565b6108f261197e565b6000546001600160a01b0390811691161461091f5760405162461bcd60e51b81526004016107819061289d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600043821061098a5760405162461bcd60e51b8152600401610781906128ad565b6001600160a01b03831660009081526008602052604090205463ffffffff16806109b857600091505061053d565b6001600160a01b038416600090815260076020908152604080832063ffffffff600019860181168552925290912054168310610a34576001600160a01b03841660009081526007602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b0316905061053d565b6001600160a01b038416600090815260076020908152604080832083805290915290205463ffffffff16831015610a6f57600091505061053d565b600060001982015b8163ffffffff168163ffffffff161115610b3257600282820363ffffffff16048103610aa1611d1f565b506001600160a01b038716600090815260076020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415610b0d5760200151945061053d9350505050565b805163ffffffff16871115610b2457819350610b2b565b6001820392505b5050610a77565b506001600160a01b038516600090815260076020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60096020526000908152604090205481565b610b923361085f565b610b9b57600080fd5b61089781611982565b610bad3361085f565b610bb657600080fd5b60025460ff1615610bc657600080fd5b6002805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589061071490339061266d565b6000546001600160a01b031690565b604051806040016040528060038152602001624d474760e81b81525081565b60025460009060ff1615610c4457600080fd5b6000610c6883604051806060016040528060258152602001612c976025913961148a565b9050610c753385836114f8565b5060019392505050565b6001600160a01b03811660009081526008602052604081205463ffffffff1680610caa5760006106a1565b6001600160a01b0383166000908152600760209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b6000604051610cfd90612649565b60408051918290038220828201909152601082526f13595d1851d85b5a5b99c811dd5a5b1960821b6020909201919091527f12717300686a489488a90080f7cc7f090152151e495ab76cbbcbd3c2c220e1b8610d576119ca565b30604051602001610d6b949392919061279c565b6040516020818303038152906040528051906020012090506000604051610d9190612654565b604051908190038120610dac918a908a908a9060200161275e565b60405160208183030381529060405280519060200120905060008282604051602001610dd992919061260d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e1694939291906127d1565b6020604051602081039080840390855afa158015610e38573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e6b5760405162461bcd60e51b81526004016107819061287d565b6001600160a01b03811660009081526009602052604090208054600181019091558914610eaa5760405162461bcd60e51b81526004016107819061283d565b87421115610eca5760405162461bcd60e51b81526004016107819061280d565b610ed4818b6118ac565b505050505b505050505050565b600080610f06846040518060600160405280602b8152602001612ae8602b913961148a565b3360008181526004602090815260408083206001600160a01b038b1680855292529182902080546001600160601b0319166001600160601b038616179055905192935091600080516020612c5483398151915290610f65908590612904565b60405180910390a3604051638f4ffcb160e01b81526001600160a01b03861690638f4ffcb190610f9f903390889030908990600401612696565b600060405180830381600087803b158015610fb957600080fd5b505af1158015610fcd573d6000803e3d6000fd5b50600198975050505050505050565b6000600019861415610ff15750600019611016565b61101386604051806060016040528060238152602001612c746023913961148a565b90505b600060405161102490612649565b60408051918290038220828201909152601082526f13595d1851d85b5a5b99c811dd5a5b1960821b6020909201919091527f12717300686a489488a90080f7cc7f090152151e495ab76cbbcbd3c2c220e1b861107e6119ca565b30604051602001611092949392919061279c565b60405160208183030381529060405280519060200120905060006040516110b89061263e565b604080519182900382206001600160a01b038d166000908152600960209081529290208054600181019091556110fa9391928e928e928e9290918e9101612704565b6040516020818303038152906040528051906020012090506000828260405160200161112792919061260d565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161116494939291906127d1565b6020604051602081039080840390855afa158015611186573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166111b95760405162461bcd60e51b8152600401610781906127fd565b8b6001600160a01b0316816001600160a01b0316146111ea5760405162461bcd60e51b81526004016107819061286d565b8842111561120a5760405162461bcd60e51b81526004016107819061284d565b84600460008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b0316600080516020612c54833981519152876040516112a89190612904565b60405180910390a3505050505050505050505050565b6112c661197e565b6000546001600160a01b039081169116146112f35760405162461bcd60e51b81526004016107819061289d565b6001600160a01b0382166113195760405162461bcd60e51b81526004016107819061288d565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90611347903390859060040161267b565b602060405180830381600087803b15801561136157600080fd5b505af1158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611399919081019061204c565b507f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab7812982826040516113cb9291906126da565b60405180910390a15050565b6001600160a01b0391821660009081526004602090815260408083209390941682529190915220546001600160601b031690565b60405161055590612654565b600760209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b61145461197e565b6000546001600160a01b039081169116146114815760405162461bcd60e51b81526004016107819061289d565b610897816119ce565b600081600160601b84106114b15760405162461bcd60e51b815260040161078191906127ec565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114f05760405162461bcd60e51b815260040161078191906127ec565b505050900390565b6001600160a01b03831661151e5760405162461bcd60e51b8152600401610781906128bd565b6001600160a01b0382166115445760405162461bcd60e51b81526004016107819061281d565b6001600160a01b03831660009081526005602090815260409182902054825160608101909352603580845261158f936001600160601b039092169285929190612b78908301396114b9565b6001600160a01b03848116600090815260056020908152604080832080546001600160601b0319166001600160601b0396871617905592861682529082902054825160608101909352602f8084526115f79491909116928592909190612c2590830139611a4f565b6001600160a01b038381166000818152600560205260409081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611664908590612904565b60405180910390a36001600160a01b0380841660009081526006602052604080822054858416835291205461169e929182169116836116e5565b505050565b60006106a183836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250611a8b565b816001600160a01b0316836001600160a01b03161415801561171057506000816001600160601b0316115b1561169e576001600160a01b038316156117c8576001600160a01b03831660009081526008602052604081205463ffffffff16908161175057600061178f565b6001600160a01b0385166000908152600760209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006117b682856040518060600160405280602b8152602001612abd602b91396114b9565b90506117c486848484611aaf565b5050505b6001600160a01b0382161561169e576001600160a01b03821660009081526008602052604081205463ffffffff169081611803576000611842565b6001600160a01b0384166000908152600760209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061186982856040518060600160405280602a8152602001612a6d602a9139611a4f565b9050610ed985848484611aaf565b60006001600160a01b03821661188c57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b03808316600081815260066020818152604080842080546005845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46119308284836116e5565b50505050565b61194760018263ffffffff611c6416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b3390565b61199360018263ffffffff611cac16565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b4690565b6001600160a01b0381166119f45760405162461bcd60e51b81526004016107819061282d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000838301826001600160601b038087169083161015611a825760405162461bcd60e51b815260040161078191906127ec565b50949350505050565b600081848411156114f05760405162461bcd60e51b815260040161078191906127ec565b6000611ad343604051806060016040528060338152602001612bf260339139611cf8565b905060008463ffffffff16118015611b1c57506001600160a01b038516600090815260076020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611b7b576001600160a01b0385166000908152600760209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055611c1a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600783528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600890935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611c55929190612920565b60405180910390a25050505050565b6001600160a01b038116611c7757600080fd5b611c818282611877565b611c8a57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116611cbf57600080fd5b611cc98282611877565b15611cd357600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600081600160201b84106114b15760405162461bcd60e51b815260040161078191906127ec565b604080518082019091526000808252602082015290565b803561053d81612a34565b805161053d81612a48565b803561053d81612a51565b600082601f830112611d6857600080fd5b8135611d7b611d7682612962565b61293b565b91508082526020830160208301858383011115611d9757600080fd5b611da28382846129f2565b50505092915050565b803561053d81612a5a565b803561053d81612a63565b600060208284031215611dd357600080fd5b6000611ddf8484611d36565b949350505050565b60008060408385031215611dfa57600080fd5b6000611e068585611d36565b9250506020611e1785828601611d36565b9150509250929050565b600080600060608486031215611e3657600080fd5b6000611e428686611d36565b9350506020611e5386828701611d36565b9250506040611e6486828701611d4c565b9150509250925092565b600080600080600080600060e0888a031215611e8957600080fd5b6000611e958a8a611d36565b9750506020611ea68a828b01611d36565b9650506040611eb78a828b01611d4c565b9550506060611ec88a828b01611d4c565b9450506080611ed98a828b01611db6565b93505060a0611eea8a828b01611d4c565b92505060c0611efb8a828b01611d4c565b91505092959891949750929550565b60008060408385031215611f1d57600080fd5b6000611f298585611d36565b9250506020611e1785828601611d4c565b600080600060608486031215611f4f57600080fd5b6000611f5b8686611d36565b9350506020611f6c86828701611d4c565b925050604084013567ffffffffffffffff811115611f8957600080fd5b611e6486828701611d57565b60008060008060008060c08789031215611fae57600080fd5b6000611fba8989611d36565b9650506020611fcb89828a01611d4c565b9550506040611fdc89828a01611d4c565b9450506060611fed89828a01611db6565b9350506080611ffe89828a01611d4c565b92505060a061200f89828a01611d4c565b9150509295509295509295565b6000806040838503121561202f57600080fd5b600061203b8585611d36565b9250506020611e1785828601611dab565b60006020828403121561205e57600080fd5b6000611ddf8484611d41565b60006020828403121561207c57600080fd5b6000611ddf8484611d4c565b612091816129d6565b82525050565b6120918161299c565b612091816129a7565b612091816129ac565b6120916120be826129ac565b6129ac565b60006120ce8261298a565b6120d8818561298e565b93506120e88185602086016129fe565b6120f181612a2a565b9093019392505050565b6000612108601e8361298e565b7f4d47473a3a7065726d69743a20696e76616c6964207369676e61747572650000815260200192915050565b600061214160258361298e565b7f4d47473a3a64656c656761746542795369673a207369676e61747572652065788152641c1a5c995960da1b602082015260400192915050565b600061218860398361298e565b7f4d47473a3a5f7472616e73666572546f6b656e733a2063616e6e6f742074726181527f6e7366657220746f20746865207a65726f206164647265737300000000000000602082015260400192915050565b60006121e760268361298e565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061222f60218361298e565b7f4d47473a3a64656c656761746542795369673a20696e76616c6964206e6f6e638152606560f81b602082015260400192915050565b6000612272600283612997565b61190160f01b815260020192915050565b6000612290601e8361298e565b7f4d47473a3a7065726d69743a207369676e617475726520657870697265640000815260200192915050565b60006122c9601d8361298e565b7f4d47473a3a6275726e3a206e6f7420656e6f7567682062616c616e6365000000815260200192915050565b600061230260198361298e565b7f4d47473a3a7065726d69743a20756e617574686f72697a656400000000000000815260200192915050565b600061233b605283612997565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63656020820152712c75696e7432353620646561646c696e652960701b604082015260520192915050565b60006123b560258361298e565b7f4d47473a3a64656c656761746542795369673a20696e76616c6964207369676e815264617475726560d81b602082015260400192915050565b60006123fc602e8361298e565b7f4d47473a3a72657472696576654c6f7374546f6b656e733a20496e76616c696481526d205f746f6b656e4164647265737360901b602082015260400192915050565b600061244c604383612997565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b60006124b760208361298e565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006124f060268361298e565b7f4d47473a3a6765745072696f72566f7465733a206e6f742079657420646574658152651c9b5a5b995960d21b602082015260400192915050565b6000612538603b8361298e565b7f4d47473a3a5f7472616e73666572546f6b656e733a2063616e6e6f742074726181527f6e736665722066726f6d20746865207a65726f20616464726573730000000000602082015260400192915050565b6000612597603a83612997565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0192915050565b612091816129bb565b612091816129c4565b612091816129e7565b612091816129ca565b600061261882612265565b915061262482856120b2565b60208201915061263482846120b2565b5060200192915050565b600061053d8261232e565b600061053d8261243f565b600061053d8261258a565b6020810161053d8284612097565b6020810161053d8284612088565b604081016126898285612088565b6106a160208301846120a9565b608081016126a48287612088565b6126b160208301866120a9565b6126be6040830185612097565b81810360608301526126d081846120c3565b9695505050505050565b604081016126898285612097565b6020810161053d82846120a0565b6020810161053d82846120a9565b60c0810161271282896120a9565b61271f6020830188612097565b61272c6040830187612097565b61273960608301866120a9565b61274660808301856120a9565b61275360a08301846120a9565b979650505050505050565b6080810161276c82876120a9565b6127796020830186612097565b61278660408301856120a9565b61279360608301846120a9565b95945050505050565b608081016127aa82876120a9565b6127b760208301866120a9565b6127c460408301856120a9565b6127936060830184612097565b608081016127df82876120a9565b61277960208301866125f2565b602080825281016106a181846120c3565b6020808252810161053d816120fb565b6020808252810161053d81612134565b6020808252810161053d8161217b565b6020808252810161053d816121da565b6020808252810161053d81612222565b6020808252810161053d81612283565b6020808252810161053d816122bc565b6020808252810161053d816122f5565b6020808252810161053d816123a8565b6020808252810161053d816123ef565b6020808252810161053d816124aa565b6020808252810161053d816124e3565b6020808252810161053d8161252b565b6020810161053d82846125e9565b604081016128e982856125e9565b6106a16020830184612604565b6020810161053d82846125f2565b6020810161053d82846125fb565b6020810161053d8284612604565b6040810161292e82856125fb565b6106a160208301846125fb565b60405181810167ffffffffffffffff8111828210171561295a57600080fd5b604052919050565b600067ffffffffffffffff82111561297957600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b919050565b600061053d826129af565b151590565b90565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6001600160601b031690565b600061053d82600061053d8261299c565b600061053d826129ca565b82818337506000910152565b60005b83811015612a19578181015183820152602001612a01565b838111156119305750506000910152565b601f01601f191690565b612a3d8161299c565b811461089757600080fd5b612a3d816129a7565b612a3d816129ac565b612a3d816129bb565b612a3d816129c456fe4d47473a3a5f6d6f766544656c6567617465733a20766f746520616d6f756e74206f766572666c6f77734d47473a3a6275726e3a206275726e20616d6f756e7420657863656564732062616c616e63654d47473a3a5f6d6f766544656c6567617465733a20766f746520616d6f756e7420756e646572666c6f77734d47473a3a617070726f7665416e6443616c6c3a20616d6f756e74206578636565647320393620626974734d47473a3a7472616e7366657246726f6d3a20616d6f756e74206578636565647320393620626974734d47473a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654d47473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d47473a3a617070726f76653a20616d6f756e74206578636565647320393620626974734d47473a3a6275726e3a20616d6f756e74206578636565647320393620626974734d47473a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734d47473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77738c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254d47473a3a7065726d69743a20616d6f756e74206578636565647320393620626974734d47473a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473a365627a7a72315820f55612dac0e09f50606baaf0f9f43953cb4225efa8fba8c1419e31f5d33725ae6c6578706572696d656e74616cf564736f6c63430005100040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003ff9bda6bb59fb87853a25a07764dc241a5ca4eb
-----Decoded View---------------
Arg [0] : account (address): 0x3Ff9bda6bB59FB87853a25A07764dc241A5ca4eB
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003ff9bda6bb59fb87853a25a07764dc241a5ca4eb
Deployed Bytecode Sourcemap
16396:17080:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16396:17080:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16487:48;;;:::i;:::-;;;;;;;;;;;;;;;;20548:432;;;;;;;;;:::i;:::-;;;;;;;;16795:42;;;:::i;:::-;;;;;;;;17719:122;;;:::i;23656:689::-;;;;;;;;;:::i;18142:137::-;;;:::i;16696:35::-;;;:::i;:::-;;;;;;;;16271:118;;;:::i;:::-;;31986:615;;;;;;;;;:::i;14545:109::-;;;;;;;;;:::i;17169:45::-;;;;;;;;;:::i;:::-;;;;;;;;24493:102;;;;;;;;;:::i;15524:78::-;;;:::i;14762:77::-;;;:::i;17597:49::-;;;;;;;;;:::i;:::-;;;;;;;;22723:108;;;;;;;;;:::i;13057:140::-;;;:::i;26669:1217::-;;;;;;;;;:::i;:::-;;;;;;;;18360:39;;;;;;;;;:::i;14662:92::-;;;;;;;;;:::i;16060:116::-;;;:::i;12415:79::-;;;:::i;16596:37::-;;;:::i;23095:251::-;;;;;;;;;:::i;26016:222::-;;;;;;;;;:::i;25029:786::-;;;;;;;;;:::i;33040:433::-;;;;;;;;;:::i;21470:1050::-;;;;;;;;;:::i;31634:340::-;;;;;;;;;:::i;19934:136::-;;;;;;;;;:::i;17935:117::-;;;:::i;17458:70::-;;;;;;;;;:::i;:::-;;;;;;;;;13352:109;;;;;;;;;:::i;16487:48::-;;;;;;;;;;;;;;-1:-1:-1;;;16487:48:0;;;;:::o;20548:432::-;15761:7;;20630:4;;15761:7;;15760:8;15752:17;;;;;;20647:13;-1:-1:-1;;20675:9:0;:21;20671:172;;;-1:-1:-1;;;20671:172:0;;;20774:57;20781:9;20774:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;20765:66;;20671:172;20866:10;20855:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;20855:31:0;;;;;;;;;;;:40;;-1:-1:-1;;;;;;20855:40:0;-1:-1:-1;;;;;20855:40:0;;;;;20913:37;;20855:31;;20866:10;-1:-1:-1;;;;;;;;;;;20913:37:0;;;20855:40;;20913:37;;;;;;;;;;20968:4;20961:11;;;15780:1;20548:432;;;;:::o;16795:42::-;;;;:::o;17719:122::-;17761:80;;;;;;;;;;;;;;17719:122;:::o;23656:689::-;15761:7;;23752:4;;15761:7;;15760:8;15752:17;;;;;;-1:-1:-1;;;;;23834:15:0;;23769;23834;;;:10;:15;;;;;;;;23787:10;23834:24;;;;;;;;;;23885:62;;;;;;;;;;;;23787:10;;-1:-1:-1;;;;;23834:24:0;;;;23769:15;;23885:62;;23892:9;;23885:62;;;;;:6;:62::i;:::-;23869:78;;23975:3;-1:-1:-1;;;;;23964:14:0;:7;-1:-1:-1;;;;;23964:14:0;;;:48;;;;-1:-1:-1;;;;;;23982:30:0;;;;;23964:48;23960:310;;;24029:19;24051:95;24057:16;24075:6;24051:95;;;;;;;;;;;;;;;;;:5;:95::i;:::-;-1:-1:-1;;;;;24161:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;-1:-1:-1;;;;;;24161:39:0;-1:-1:-1;;;;;24161:39:0;;;;;24222:36;24161:39;;-1:-1:-1;24161:24:0;;-1:-1:-1;;;;;;;;;;;24222:36:0;;;24161:39;;24222:36;;;;;;;;;;23960:310;;24282:33;24298:3;24303;24308:6;24282:15;:33::i;:::-;24333:4;24326:11;;;;;15780:1;23656:689;;;;;:::o;18142:137::-;18184:95;;;;;;16696:35;16729:2;16696:35;:::o;16271:118::-;14496:20;14505:10;14496:8;:20::i;:::-;14488:29;;;;;;15940:7;;;;15932:16;;;;;;16330:7;:15;;-1:-1:-1;;16330:15:0;;;16361:20;;;;;;16370:10;;16361:20;;;;;;;;;;16271:118::o;31986:615::-;32032:12;32057:13;32073:54;32080:9;32073:54;;;;;;;;;;;;;;;;;:6;:54::i;:::-;32155:10;32146:20;;;;:8;:20;;;;;;32057:70;;-1:-1:-1;;;;;;32146:30:0;;;:20;;:30;;32138:72;;;;-1:-1:-1;;;32138:72:0;;;;;;;;;;;;;;;;;32295:10;32286:20;;;;:8;:20;;;;;;;;;;32280:77;;;;;;;;;;;;;;-1:-1:-1;;;;;32286:20:0;;;;32308:6;;32280:77;;;;;;;:5;:77::i;:::-;32266:10;32257:20;;;;:8;:20;;;;;:100;;-1:-1:-1;;;;;;32257:100:0;-1:-1:-1;;;;;32257:100:0;;;;;;;;;;32424:11;;32411:36;;32437:9;32411:12;:36::i;:::-;32397:11;:50;32482:46;32497:10;32517:1;32521:6;32482:14;:46::i;:::-;32549:10;-1:-1:-1;;;;;32544:27:0;;32561:9;32544:27;;;;;;;;;;;;;;;-1:-1:-1;32589:4:0;;31986:615;-1:-1:-1;;31986:615:0:o;14545:109::-;14601:4;14625:21;:8;14638:7;14625:21;:12;:21;:::i;17169:45::-;;;;;;;;;;;;-1:-1:-1;;;;;17169:45:0;;:::o;24493:102::-;24555:32;24565:10;24577:9;24555;:32::i;:::-;24493:102;:::o;15524:78::-;15587:7;;;;15524:78;:::o;14762:77::-;14806:25;14820:10;14806:13;:25::i;:::-;14762:77::o;17597:49::-;;;;;;;;;;;;;;;:::o;22723:108::-;-1:-1:-1;;;;;22806:17:0;22782:4;22806:17;;;:8;:17;;;;;;-1:-1:-1;;;;;22806:17:0;;22723:108::o;13057:140::-;12637:12;:10;:12::i;:::-;12627:6;;-1:-1:-1;;;;;12627:6:0;;;:22;;;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;;;13156:1;13140:6;;13119:40;;-1:-1:-1;;;;;13140:6:0;;;;13119:40;;13156:1;;13119:40;13187:1;13170:19;;-1:-1:-1;;;;;;13170:19:0;;;13057:140::o;26669:1217::-;26748:6;26789:12;26775:11;:26;26767:77;;;;-1:-1:-1;;;26767:77:0;;;;;;;;;-1:-1:-1;;;;;26879:23:0;;26857:19;26879:23;;;:14;:23;;;;;;;;26917:17;26913:58;;26958:1;26951:8;;;;;26913:58;-1:-1:-1;;;;;27031:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;27052:16:0;;27031:38;;;;;;;;;:48;;:63;-1:-1:-1;27027:147:0;;-1:-1:-1;;;;;27118:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;27139:16:0;;;;27118:38;;;;;;;;:44;-1:-1:-1;;;27118:44:0;;-1:-1:-1;;;;;27118:44:0;;-1:-1:-1;27111:51:0;;27027:147;-1:-1:-1;;;;;27235:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;27231:88:0;;;27306:1;27299:8;;;;;27231:88;27331:12;-1:-1:-1;;27373:16:0;;27400:428;27415:5;27407:13;;:5;:13;;;27400:428;;;27479:1;27462:13;;;27461:19;;;27453:27;;27522:20;;:::i;:::-;-1:-1:-1;;;;;;27545:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;27522:51;;;;;;;;;;;;;;;-1:-1:-1;;;27522:51:0;;;-1:-1:-1;;;;;27522:51:0;;;;;;;;;27592:27;;27588:229;;;27647:8;;;;-1:-1:-1;27640:15:0;;-1:-1:-1;;;;27640:15:0;27588:229;27681:12;;:26;;;-1:-1:-1;27677:140:0;;;27736:6;27728:14;;27677:140;;;27800:1;27791:6;:10;27783:18;;27677:140;27400:428;;;;;-1:-1:-1;;;;;;27845:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;-1:-1:-1;;;;;;;;27845:33:0;;;;;-1:-1:-1;;26669:1217:0;;;;:::o;18360:39::-;;;;;;;;;;;;;:::o;14662:92::-;14496:20;14505:10;14496:8;:20::i;:::-;14488:29;;;;;;14727:19;14738:7;14727:10;:19::i;16060:116::-;14496:20;14505:10;14496:8;:20::i;:::-;14488:29;;;;;;15761:7;;;;15760:8;15752:17;;;;;;16120:7;:14;;-1:-1:-1;;16120:14:0;16130:4;16120:14;;;16150:18;;;;;;16157:10;;16150:18;;12415:79;12453:7;12480:6;-1:-1:-1;;;;;12480:6:0;12415:79;:::o;16596:37::-;;;;;;;;;;;;;;-1:-1:-1;;;16596:37:0;;;;:::o;23095:251::-;15761:7;;23174:4;;15761:7;;15760:8;15752:17;;;;;;23191:13;23207:58;23214:9;23207:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;23191:74;;23276:40;23292:10;23304:3;23309:6;23276:15;:40::i;:::-;-1:-1:-1;23334:4:0;;23095:251;-1:-1:-1;;;23095:251:0:o;26016:222::-;-1:-1:-1;;;;;26122:23:0;;26081:6;26122:23;;;:14;:23;;;;;;;;26163:16;:67;;26229:1;26163:67;;;-1:-1:-1;;;;;26182:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;26203:16:0;;26182:38;;;;;;;;;:44;-1:-1:-1;;;26182:44:0;;-1:-1:-1;;;;;26182:44:0;26156:74;26016:222;-1:-1:-1;;;26016:222:0:o;25029:786::-;25145:23;17761:80;;;;;;;;;;;;;;;;25225:4;;;;;;;;;-1:-1:-1;;;25225:4:0;;;;;;;;25209:22;25233:12;:10;:12::i;:::-;25255:4;25181:80;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25181:80:0;;;25171:91;;;;;;25145:117;;25273:18;17981:71;;;;;;;;;;;;;;;25304:57;;25336:9;;25347:5;;25354:6;;25304:57;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25304:57:0;;;25294:68;;;;;;25273:89;;25373:14;25429:15;25446:10;25400:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25400:57:0;;;25390:68;;;;;;25373:85;;25469:17;25489:26;25499:6;25507:1;25510;25513;25489:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25489:26:0;;-1:-1:-1;;25489:26:0;;;-1:-1:-1;;;;;;;25534:23:0;;25526:73;;;;-1:-1:-1;;;25526:73:0;;;;;;;;;-1:-1:-1;;;;;25627:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;25618:28;;25610:74;;;;-1:-1:-1;;;25610:74:0;;;;;;;;;25710:6;25703:3;:13;;25695:63;;;;-1:-1:-1;;;25695:63:0;;;;;;;;;25776:31;25786:9;25797;25776;:31::i;:::-;25769:38;;;;25029:786;;;;;;;:::o;33040:433::-;33132:12;33157:13;33173:64;33180:9;33173:64;;;;;;;;;;;;;;;;;:6;:64::i;:::-;33259:10;33248:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;33248:31:0;;;;;;;;;;;:40;;-1:-1:-1;;;;;;33248:40:0;-1:-1:-1;;;;;33248:40:0;;;;;33304:37;;33248:40;;-1:-1:-1;33248:31:0;-1:-1:-1;;;;;;;;;;;33304:37:0;;;33248:40;;33304:37;;;;;;;;;;33352:91;;-1:-1:-1;;;33352:91:0;;-1:-1:-1;;;;;33352:47:0;;;;;:91;;33400:10;;33412:9;;33431:4;;33438;;33352:91;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33352:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;33461:4:0;;33040:433;-1:-1:-1;;;;;;;;33040:433:0:o;21470:1050::-;21600:13;-1:-1:-1;;21628:9:0;:21;21624:171;;;-1:-1:-1;;;21624:171:0;;;21727:56;21734:9;21727:56;;;;;;;;;;;;;;;;;:6;:56::i;:::-;21718:65;;21624:171;21807:23;17761:80;;;;;;;;;;;;;;;;21887:4;;;;;;;;;-1:-1:-1;;;21887:4:0;;;;;;;;21871:22;21895:12;:10;:12::i;:::-;21917:4;21843:80;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21843:80:0;;;21833:91;;;;;;21807:117;;21935:18;18184:95;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22021:13:0;;;;;;:6;:13;;;;;;;:15;;;;;;;;21966:81;;18184:95;;21994:5;;22001:7;;22010:9;;22021:15;;22038:8;;21966:81;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21966:81:0;;;21956:92;;;;;;21935:113;;22059:14;22115:15;22132:10;22086:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22086:57:0;;;22076:68;;;;;;22059:85;;22155:17;22175:26;22185:6;22193:1;22196;22199;22175:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22175:26:0;;-1:-1:-1;;22175:26:0;;;-1:-1:-1;;;;;;;22220:23:0;;22212:66;;;;-1:-1:-1;;;22212:66:0;;;;;;;;;22310:5;-1:-1:-1;;;;;22297:18:0;:9;-1:-1:-1;;;;;22297:18:0;;22289:56;;;;-1:-1:-1;;;22289:56:0;;;;;;;;;22371:8;22364:3;:15;;22356:58;;;;-1:-1:-1;;;22356:58:0;;;;;;;;;22456:6;22427:10;:17;22438:5;-1:-1:-1;;;;;22427:17:0;-1:-1:-1;;;;;22427:17:0;;;;;;;;;;;;:26;22445:7;-1:-1:-1;;;;;22427:26:0;-1:-1:-1;;;;;22427:26:0;;;;;;;;;;;;;:35;;;;;-1:-1:-1;;;;;22427:35:0;;;;;-1:-1:-1;;;;;22427:35:0;;;;;;22496:7;-1:-1:-1;;;;;22480:32:0;22489:5;-1:-1:-1;;;;;22480:32:0;-1:-1:-1;;;;;;;;;;;22505:6:0;22480:32;;;;;;;;;;;;;;;21470:1050;;;;;;;;;;;;:::o;31634:340::-;12637:12;:10;:12::i;:::-;12627:6;;-1:-1:-1;;;;;12627:6:0;;;:22;;;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;;;-1:-1:-1;;;;;31745:27:0;;31737:86;;;;-1:-1:-1;;;31737:86:0;;;;;;;;;31836:65;;-1:-1:-1;;;31836:65:0;;-1:-1:-1;;;;;31836:30:0;;;;;:65;;31875:10;;31888:12;;31836:65;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31836:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31836:65:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31836:65:0;;;;;;;;;;31919:47;31938:13;31953:12;31919:47;;;;;;;;;;;;;;;;31634:340;;:::o;19934:136::-;-1:-1:-1;;;;;20034:19:0;;;20010:4;20034:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;-1:-1:-1;;;;;20034:28:0;;19934:136::o;17935:117::-;17981:71;;;;;;17458:70;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17458:70:0;;-1:-1:-1;;;;;17458:70:0;;:::o;13352:109::-;12637:12;:10;:12::i;:::-;12627:6;;-1:-1:-1;;;;;12627:6:0;;;:22;;;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;;;13425:28;13444:8;13425:18;:28::i;30653:161::-;30728:6;30766:12;-1:-1:-1;;;30755:9:0;;30747:32;;;;-1:-1:-1;;;30747:32:0;;;;;;;;;;-1:-1:-1;30804:1:0;;30653:161;-1:-1:-1;;30653:161:0:o;31018:165::-;31104:6;31136:1;-1:-1:-1;;;;;31131:6:0;:1;-1:-1:-1;;;;;31131:6:0;;;31139:12;31123:29;;;;;-1:-1:-1;;;31123:29:0;;;;;;;;;;-1:-1:-1;;;31170:5:0;;;31018:165::o;28277:610::-;-1:-1:-1;;;;;28371:17:0;;28363:89;;;;-1:-1:-1;;;28363:89:0;;;;;;;;;-1:-1:-1;;;;;28471:17:0;;28463:87;;;;-1:-1:-1;;;28463:87:0;;;;;;;;;-1:-1:-1;;;;;28585:13:0;;;;;;:8;:13;;;;;;;;;;28579:85;;;;;;;;;;;;;;-1:-1:-1;;;;;28585:13:0;;;;28600:6;;28579:85;;;;;;;:5;:85::i;:::-;-1:-1:-1;;;;;28563:13:0;;;;;;;:8;:13;;;;;;;;:101;;-1:-1:-1;;;;;;28563:101:0;-1:-1:-1;;;;;28563:101:0;;;;;;28697:13;;;;;;;;;;28691:79;;;;;;;;;;;;;;28697:13;;;;;28712:6;;28691:79;;;;;;;;:5;:79::i;:::-;-1:-1:-1;;;;;28675:13:0;;;;;;;:8;:13;;;;;;;:95;;-1:-1:-1;;;;;;28675:95:0;-1:-1:-1;;;;;28675:95:0;;;;;;;;;;;28786:26;;;;;;;;;;28805:6;;28786:26;;;;;;;;;;-1:-1:-1;;;;;28840:14:0;;;;;;;:9;:14;;;;;;;28856;;;;;;;;28825:54;;28840:14;;;;28856;28872:6;28825:14;:54::i;:::-;28277:610;;;:::o;1913:137::-;1971:7;1998:44;2002:1;2005;1998:44;;;;;;;;;;;;;;;;;:3;:44::i;28895:945::-;29000:6;-1:-1:-1;;;;;28990:16:0;:6;-1:-1:-1;;;;;28990:16:0;;;:30;;;;;29019:1;29010:6;-1:-1:-1;;;;;29010:10:0;;28990:30;28986:847;;;-1:-1:-1;;;;;29041:20:0;;;29037:385;;-1:-1:-1;;;;;29101:22:0;;29082:16;29101:22;;;:14;:22;;;;;;;;;29161:13;:60;;29220:1;29161:60;;;-1:-1:-1;;;;;29177:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;29197:13:0;;29177:34;;;;;;;;;:40;-1:-1:-1;;;29177:40:0;;-1:-1:-1;;;;;29177:40:0;29161:60;29142:79;;29240:16;29259:71;29265:9;29276:6;29259:71;;;;;;;;;;;;;;;;;:5;:71::i;:::-;29240:90;;29349:57;29366:6;29374:9;29385;29396;29349:16;:57::i;:::-;29037:385;;;;-1:-1:-1;;;;;29442:20:0;;;29438:384;;-1:-1:-1;;;;;29502:22:0;;29483:16;29502:22;;;:14;:22;;;;;;;;;29562:13;:60;;29621:1;29562:60;;;-1:-1:-1;;;;;29578:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;29598:13:0;;29578:34;;;;;;;;;:40;-1:-1:-1;;;29578:40:0;;-1:-1:-1;;;;;29578:40:0;29562:60;29543:79;;29641:16;29660:70;29666:9;29677:6;29660:70;;;;;;;;;;;;;;;;;:5;:70::i;:::-;29641:89;;29749:57;29766:6;29774:9;29785;29796;29749:16;:57::i;7428:165::-;7500:4;-1:-1:-1;;;;;7525:21:0;;7517:30;;;;;;-1:-1:-1;;;;;;7565:20:0;:11;:20;;;;;;;;;;;;;;;7428:165::o;27894:375::-;-1:-1:-1;;;;;27997:20:0;;;27971:23;27997:20;;;:9;:20;;;;;;;;;;28054:8;:19;;;;;;28084:20;;;;:32;;;-1:-1:-1;;;;;;28084:32:0;;;;;;;28134:54;;27997:20;;;;;-1:-1:-1;;;;;28054:19:0;;;;28084:32;;27997:20;;;28134:54;;27971:23;28134:54;28201:60;28216:15;28233:9;28244:16;28201:14;:60::i;:::-;27894:375;;;;:::o;14977:130::-;15037:24;:8;15053:7;15037:24;:15;:24;:::i;:::-;15077:22;;-1:-1:-1;;;;;15077:22:0;;;;;;;;14977:130;:::o;11070:98::-;11150:10;11070:98;:::o;14847:122::-;14904:21;:8;14917:7;14904:21;:12;:21;:::i;:::-;14941:20;;-1:-1:-1;;;;;14941:20:0;;;;;;;;14847:122;:::o;31191:153::-;31301:9;31191:153;:::o;13567:229::-;-1:-1:-1;;;;;13641:22:0;;13633:73;;;;-1:-1:-1;;;13633:73:0;;;;;;;;;13743:6;;;13722:38;;-1:-1:-1;;;;;13722:38:0;;;;13743:6;;;13722:38;;;13771:6;:17;;-1:-1:-1;;;;;;13771:17:0;-1:-1:-1;;;;;13771:17:0;;;;;;;;;;13567:229::o;30822:188::-;30908:6;30938:5;;;30970:12;-1:-1:-1;;;;;30962:6:0;;;;;;;;30954:29;;;;-1:-1:-1;;;30954:29:0;;;;;;;;;;-1:-1:-1;31001:1:0;30822:188;-1:-1:-1;;;;30822:188:0:o;2339:192::-;2425:7;2461:12;2453:6;;;;2445:29;;;;-1:-1:-1;;;2445:29:0;;;;;;;;;29848:628;29966:18;29987:75;29994:12;29987:75;;;;;;;;;;;;;;;;;:6;:75::i;:::-;29966:96;;30092:1;30077:12;:16;;;:85;;;;-1:-1:-1;;;;;;30097:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;30120:16:0;;30097:40;;;;;;;;;:50;:65;;;:50;;:65;30077:85;30073:329;;;-1:-1:-1;;;;;30177:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;30200:16:0;;30177:40;;;;;;;;;:57;;-1:-1:-1;;30177:57:0;-1:-1:-1;;;;;;;;30177:57:0;;;;;;30073:329;;;30302:33;;;;;;;;;;;;;;-1:-1:-1;;;;;30302:33:0;;;;;;;;;;-1:-1:-1;;;;;30263:22:0;;-1:-1:-1;30263:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;-1:-1:-1;;;30263:72:0;-1:-1:-1;;30263:72:0;;;-1:-1:-1;;30263:72:0;;;;;;;;;;;;;;;30348:25;;;:14;:25;;;;;;;:44;;30263:72;30376:16;;30348:44;;;;;;;;;;;;;30073:329;30438:9;-1:-1:-1;;;;;30417:51:0;;30449:8;30459;30417:51;;;;;;;;;;;;;;;;29848:628;;;;;:::o;7145:189::-;-1:-1:-1;;;;;7225:21:0;;7217:30;;;;;;7266:18;7270:4;7276:7;7266:3;:18::i;:::-;7258:27;;;;;;-1:-1:-1;;;;;7298:20:0;7321:5;7298:20;;;;;;;;;;;:28;;-1:-1:-1;;7298:28:0;;;7145:189::o;6880:186::-;-1:-1:-1;;;;;6957:21:0;;6949:30;;;;;;6999:18;7003:4;7009:7;6999:3;:18::i;:::-;6998:19;6990:28;;;;;;-1:-1:-1;;;;;7031:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;7031:27:0;7054:4;7031:27;;;6880:186::o;30484:161::-;30559:6;30597:12;-1:-1:-1;;;30586:9:0;;30578:32;;;;-1:-1:-1;;;30578:32:0;;;;;;;;;16396:17080;;;;;;;;;;-1:-1:-1;16396:17080:0;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:128;217:13;;235:30;217:13;235:30;;277:130;344:20;;369:33;344:20;369:33;;415:440;;516:3;509:4;501:6;497:17;493:27;483:2;;534:1;531;524:12;483:2;571:6;558:20;593:64;608:48;649:6;608:48;;;593:64;;;584:73;;677:6;670:5;663:21;713:4;705:6;701:17;746:4;739:5;735:16;781:3;772:6;767:3;763:16;760:25;757:2;;;798:1;795;788:12;757:2;808:41;842:6;837:3;832;808:41;;;476:379;;;;;;;;1000:128;1066:20;;1091:32;1066:20;1091:32;;1135:126;1200:20;;1225:31;1200:20;1225:31;;1268:241;;1372:2;1360:9;1351:7;1347:23;1343:32;1340:2;;;1388:1;1385;1378:12;1340:2;1423:1;1440:53;1485:7;1465:9;1440:53;;;1430:63;1334:175;-1:-1;;;;1334:175;1516:366;;;1637:2;1625:9;1616:7;1612:23;1608:32;1605:2;;;1653:1;1650;1643:12;1605:2;1688:1;1705:53;1750:7;1730:9;1705:53;;;1695:63;;1667:97;1795:2;1813:53;1858:7;1849:6;1838:9;1834:22;1813:53;;;1803:63;;1774:98;1599:283;;;;;;1889:491;;;;2027:2;2015:9;2006:7;2002:23;1998:32;1995:2;;;2043:1;2040;2033:12;1995:2;2078:1;2095:53;2140:7;2120:9;2095:53;;;2085:63;;2057:97;2185:2;2203:53;2248:7;2239:6;2228:9;2224:22;2203:53;;;2193:63;;2164:98;2293:2;2311:53;2356:7;2347:6;2336:9;2332:22;2311:53;;;2301:63;;2272:98;1989:391;;;;;;2387:991;;;;;;;;2591:3;2579:9;2570:7;2566:23;2562:33;2559:2;;;2608:1;2605;2598:12;2559:2;2643:1;2660:53;2705:7;2685:9;2660:53;;;2650:63;;2622:97;2750:2;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;;;2758:63;;2729:98;2858:2;2876:53;2921:7;2912:6;2901:9;2897:22;2876:53;;;2866:63;;2837:98;2966:2;2984:53;3029:7;3020:6;3009:9;3005:22;2984:53;;;2974:63;;2945:98;3074:3;3093:51;3136:7;3127:6;3116:9;3112:22;3093:51;;;3083:61;;3053:97;3181:3;3200:53;3245:7;3236:6;3225:9;3221:22;3200:53;;;3190:63;;3160:99;3290:3;3309:53;3354:7;3345:6;3334:9;3330:22;3309:53;;;3299:63;;3269:99;2553:825;;;;;;;;;;;3385:366;;;3506:2;3494:9;3485:7;3481:23;3477:32;3474:2;;;3522:1;3519;3512:12;3474:2;3557:1;3574:53;3619:7;3599:9;3574:53;;;3564:63;;3536:97;3664:2;3682:53;3727:7;3718:6;3707:9;3703:22;3682:53;;3758:595;;;;3905:2;3893:9;3884:7;3880:23;3876:32;3873:2;;;3921:1;3918;3911:12;3873:2;3956:1;3973:53;4018:7;3998:9;3973:53;;;3963:63;;3935:97;4063:2;4081:53;4126:7;4117:6;4106:9;4102:22;4081:53;;;4071:63;;4042:98;4199:2;4188:9;4184:18;4171:32;4223:18;4215:6;4212:30;4209:2;;;4255:1;4252;4245:12;4209:2;4275:62;4329:7;4320:6;4309:9;4305:22;4275:62;;4360:865;;;;;;;4547:3;4535:9;4526:7;4522:23;4518:33;4515:2;;;4564:1;4561;4554:12;4515:2;4599:1;4616:53;4661:7;4641:9;4616:53;;;4606:63;;4578:97;4706:2;4724:53;4769:7;4760:6;4749:9;4745:22;4724:53;;;4714:63;;4685:98;4814:2;4832:53;4877:7;4868:6;4857:9;4853:22;4832:53;;;4822:63;;4793:98;4922:2;4940:51;4983:7;4974:6;4963:9;4959:22;4940:51;;;4930:61;;4901:96;5028:3;5047:53;5092:7;5083:6;5072:9;5068:22;5047:53;;;5037:63;;5007:99;5137:3;5156:53;5201:7;5192:6;5181:9;5177:22;5156:53;;;5146:63;;5116:99;4509:716;;;;;;;;;5232:364;;;5352:2;5340:9;5331:7;5327:23;5323:32;5320:2;;;5368:1;5365;5358:12;5320:2;5403:1;5420:53;5465:7;5445:9;5420:53;;;5410:63;;5382:97;5510:2;5528:52;5572:7;5563:6;5552:9;5548:22;5528:52;;5603:257;;5715:2;5703:9;5694:7;5690:23;5686:32;5683:2;;;5731:1;5728;5721:12;5683:2;5766:1;5783:61;5836:7;5816:9;5783:61;;5867:241;;5971:2;5959:9;5950:7;5946:23;5942:32;5939:2;;;5987:1;5984;5977:12;5939:2;6022:1;6039:53;6084:7;6064:9;6039:53;;6115:142;6206:45;6245:5;6206:45;;;6201:3;6194:58;6188:69;;;6264:113;6347:24;6365:5;6347:24;;6384:104;6461:21;6476:5;6461:21;;6495:113;6578:24;6596:5;6578:24;;6615:152;6716:45;6736:24;6754:5;6736:24;;;6716:45;;6774:343;;6884:38;6916:5;6884:38;;;6934:70;6997:6;6992:3;6934:70;;;6927:77;;7009:52;7054:6;7049:3;7042:4;7035:5;7031:16;7009:52;;;7082:29;7104:6;7082:29;;;7073:39;;;;6864:253;-1:-1;;;6864:253;7825:330;;7985:67;8049:2;8044:3;7985:67;;;8085:32;8065:53;;8146:2;8137:12;;7971:184;-1:-1;;7971:184;8164:374;;8324:67;8388:2;8383:3;8324:67;;;8424:34;8404:55;;-1:-1;;;8488:2;8479:12;;8472:29;8529:2;8520:12;;8310:228;-1:-1;;8310:228;8547:394;;8707:67;8771:2;8766:3;8707:67;;;8807:34;8787:55;;8876:27;8871:2;8862:12;;8855:49;8932:2;8923:12;;8693:248;-1:-1;;8693:248;8950:375;;9110:67;9174:2;9169:3;9110:67;;;9210:34;9190:55;;-1:-1;;;9274:2;9265:12;;9258:30;9316:2;9307:12;;9096:229;-1:-1;;9096:229;9334:370;;9494:67;9558:2;9553:3;9494:67;;;9594:34;9574:55;;-1:-1;;;9658:2;9649:12;;9642:25;9695:2;9686:12;;9480:224;-1:-1;;9480:224;9713:398;;9891:84;9973:1;9968:3;9891:84;;;-1:-1;;;9988:87;;10103:1;10094:11;;9877:234;-1:-1;;9877:234;10120:330;;10280:67;10344:2;10339:3;10280:67;;;10380:32;10360:53;;10441:2;10432:12;;10266:184;-1:-1;;10266:184;10459:329;;10619:67;10683:2;10678:3;10619:67;;;10719:31;10699:52;;10779:2;10770:12;;10605:183;-1:-1;;10605:183;10797:325;;10957:67;11021:2;11016:3;10957:67;;;11057:27;11037:48;;11113:2;11104:12;;10943:179;-1:-1;;10943:179;11131:492;;11309:85;11391:2;11386:3;11309:85;;;11427:34;11407:55;;11496:34;11491:2;11482:12;;11475:56;-1:-1;;;11560:2;11551:12;;11544:42;11614:2;11605:12;;11295:328;-1:-1;;11295:328;11632:374;;11792:67;11856:2;11851:3;11792:67;;;11892:34;11872:55;;-1:-1;;;11956:2;11947:12;;11940:29;11997:2;11988:12;;11778:228;-1:-1;;11778:228;12015:383;;12175:67;12239:2;12234:3;12175:67;;;12275:34;12255:55;;-1:-1;;;12339:2;12330:12;;12323:38;12389:2;12380:12;;12161:237;-1:-1;;12161:237;12407:477;;12585:85;12667:2;12662:3;12585:85;;;12703:34;12683:55;;12772:34;12767:2;12758:12;;12751:56;-1:-1;;;12836:2;12827:12;;12820:27;12875:2;12866:12;;12571:313;-1:-1;;12571:313;12893:332;;13053:67;13117:2;13112:3;13053:67;;;13153:34;13133:55;;13216:2;13207:12;;13039:186;-1:-1;;13039:186;13234:375;;13394:67;13458:2;13453:3;13394:67;;;13494:34;13474:55;;-1:-1;;;13558:2;13549:12;;13542:30;13600:2;13591:12;;13380:229;-1:-1;;13380:229;13618:396;;13778:67;13842:2;13837:3;13778:67;;;13878:34;13858:55;;13947:29;13942:2;13933:12;;13926:51;14005:2;13996:12;;13764:250;-1:-1;;13764:250;14023:431;;14201:85;14283:2;14278:3;14201:85;;;14319:34;14299:55;;14388:28;14383:2;14374:12;;14367:50;14445:2;14436:12;;14187:267;-1:-1;;14187:267;14582:110;14663:23;14680:5;14663:23;;14699:107;14778:22;14794:5;14778:22;;14813:124;14895:36;14925:5;14895:36;;14944:110;15025:23;15042:5;15025:23;;15061:650;;15316:148;15460:3;15316:148;;;15309:155;;15475:75;15546:3;15537:6;15475:75;;;15572:2;15567:3;15563:12;15556:19;;15586:75;15657:3;15648:6;15586:75;;;-1:-1;15683:2;15674:12;;15297:414;-1:-1;;15297:414;15718:372;;15917:148;16061:3;15917:148;;16097:372;;16296:148;16440:3;16296:148;;16476:372;;16675:148;16819:3;16675:148;;16855:213;16973:2;16958:18;;16987:71;16962:9;17031:6;16987:71;;17075:229;17201:2;17186:18;;17215:79;17190:9;17267:6;17215:79;;17311:340;17465:2;17450:18;;17479:79;17454:9;17531:6;17479:79;;;17569:72;17637:2;17626:9;17622:18;17613:6;17569:72;;17658:647;17886:3;17871:19;;17901:79;17875:9;17953:6;17901:79;;;17991:72;18059:2;18048:9;18044:18;18035:6;17991:72;;;18074;18142:2;18131:9;18127:18;18118:6;18074:72;;;18194:9;18188:4;18184:20;18179:2;18168:9;18164:18;18157:48;18219:76;18290:4;18281:6;18219:76;;;18211:84;17857:448;-1:-1;;;;;;17857:448;18312:324;18458:2;18443:18;;18472:71;18447:9;18516:6;18472:71;;18643:201;18755:2;18740:18;;18769:65;18744:9;18807:6;18769:65;;18851:213;18969:2;18954:18;;18983:71;18958:9;19027:6;18983:71;;19071:771;19329:3;19314:19;;19344:71;19318:9;19388:6;19344:71;;;19426:72;19494:2;19483:9;19479:18;19470:6;19426:72;;;19509;19577:2;19566:9;19562:18;19553:6;19509:72;;;19592;19660:2;19649:9;19645:18;19636:6;19592:72;;;19675:73;19743:3;19732:9;19728:19;19719:6;19675:73;;;19759;19827:3;19816:9;19812:19;19803:6;19759:73;;;19300:542;;;;;;;;;;19849:547;20051:3;20036:19;;20066:71;20040:9;20110:6;20066:71;;;20148:72;20216:2;20205:9;20201:18;20192:6;20148:72;;;20231;20299:2;20288:9;20284:18;20275:6;20231:72;;;20314;20382:2;20371:9;20367:18;20358:6;20314:72;;;20022:374;;;;;;;;20403:547;20605:3;20590:19;;20620:71;20594:9;20664:6;20620:71;;;20702:72;20770:2;20759:9;20755:18;20746:6;20702:72;;;20785;20853:2;20842:9;20838:18;20829:6;20785:72;;;20868;20936:2;20925:9;20921:18;20912:6;20868:72;;20957:539;21155:3;21140:19;;21170:71;21144:9;21214:6;21170:71;;;21252:68;21316:2;21305:9;21301:18;21292:6;21252:68;;21503:293;21637:2;21651:47;;;21622:18;;21712:74;21622:18;21772:6;21712:74;;22111:407;22302:2;22316:47;;;22287:18;;22377:131;22287:18;22377:131;;22525:407;22716:2;22730:47;;;22701:18;;22791:131;22701:18;22791:131;;22939:407;23130:2;23144:47;;;23115:18;;23205:131;23115:18;23205:131;;23353:407;23544:2;23558:47;;;23529:18;;23619:131;23529:18;23619:131;;23767:407;23958:2;23972:47;;;23943:18;;24033:131;23943:18;24033:131;;24181:407;24372:2;24386:47;;;24357:18;;24447:131;24357:18;24447:131;;24595:407;24786:2;24800:47;;;24771:18;;24861:131;24771:18;24861:131;;25009:407;25200:2;25214:47;;;25185:18;;25275:131;25185:18;25275:131;;25423:407;25614:2;25628:47;;;25599:18;;25689:131;25599:18;25689:131;;25837:407;26028:2;26042:47;;;26013:18;;26103:131;26013:18;26103:131;;26251:407;26442:2;26456:47;;;26427:18;;26517:131;26427:18;26517:131;;26665:407;26856:2;26870:47;;;26841:18;;26931:131;26841:18;26931:131;;27079:407;27270:2;27284:47;;;27255:18;;27345:131;27255:18;27345:131;;27713:209;27829:2;27814:18;;27843:69;27818:9;27885:6;27843:69;;27929:316;28071:2;28056:18;;28085:69;28060:9;28127:6;28085:69;;;28165:70;28231:2;28220:9;28216:18;28207:6;28165:70;;28252:205;28366:2;28351:18;;28380:67;28355:9;28420:6;28380:67;;28464:211;28581:2;28566:18;;28595:70;28570:9;28638:6;28595:70;;28682:209;28798:2;28783:18;;28812:69;28787:9;28854:6;28812:69;;28898:320;29042:2;29027:18;;29056:70;29031:9;29099:6;29056:70;;;29137:71;29204:2;29193:9;29189:18;29180:6;29137:71;;29225:256;29287:2;29281:9;29313:17;;;29388:18;29373:34;;29409:22;;;29370:62;29367:2;;;29445:1;29442;29435:12;29367:2;29461;29454:22;29265:216;;-1:-1;29265:216;29488:321;;29631:18;29623:6;29620:30;29617:2;;;29663:1;29660;29653:12;29617:2;-1:-1;29794:4;29730;29707:17;;;;-1:-1;;29703:33;29784:15;;29554:255;29816:121;29903:12;;29874:63;30199:162;30301:19;;;30350:4;30341:14;;30294:67;30542:145;30678:3;30656:31;-1:-1;30656:31;30695:91;;30757:24;30775:5;30757:24;;30793:85;30859:13;30852:21;;30835:43;30885:72;30947:5;30930:27;30964:121;-1:-1;;;;;31026:54;;31009:76;31171:88;31243:10;31232:22;;31215:44;31266:81;31337:4;31326:16;;31309:38;31354:104;-1:-1;;;;;31415:38;;31398:60;31465:129;;31552:37;31583:5;31601:121;31680:37;31711:5;31680:37;;31844:106;;31922:23;31939:5;31922:23;;31958:145;32039:6;32034:3;32029;32016:30;-1:-1;32095:1;32077:16;;32070:27;32009:94;32112:268;32177:1;32184:101;32198:6;32195:1;32192:13;32184:101;;;32265:11;;;32259:18;32246:11;;;32239:39;32220:2;32213:10;32184:101;;;32300:6;32297:1;32294:13;32291:2;;;-1:-1;;32365:1;32347:16;;32340:27;32161:219;32469:97;32557:2;32537:14;-1:-1;;32533:28;;32517:49;32574:117;32643:24;32661:5;32643:24;;;32636:5;32633:35;32623:2;;32682:1;32679;32672:12;32698:111;32764:21;32779:5;32764:21;;32816:117;32885:24;32903:5;32885:24;;33064:115;33132:23;33149:5;33132:23;;33186:113;33253:22;33269:5;33253:22;
Swarm Source
bzzr://f55612dac0e09f50606baaf0f9f43953cb4225efa8fba8c1419e31f5d33725ae
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.