ERC-20
Source Code
Overview
Max Total Supply
370,000,000 STON
Holders
51
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
StonToken
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity Multiple files format)
pragma solidity >=0.5.8 <0.7.0;
import "./MinimeToken.sol";
contract StonToken is MiniMeToken {
uint256 public constant maxSupply = 370 * 10**6 * 10**8;
bool public mintingDone = false;
// whitelist state
address public whitelistManager;
mapping(address => bool) public whitelist;
event WhitelistEdit(address indexed subject, bool indexed status);
event WhitelistManagerChange(address indexed manager);
constructor() public MiniMeToken(
address(0), // no parent token
0, // no snapshot block number
"STON", // token name
8, // decimals
"STON", // symbol
false // disable transfers for minting
) {
whitelistManager = msg.sender;
emit WhitelistManagerChange(msg.sender);
}
// minting functionality
function mint(address[] memory _recipients, uint256[] memory _amounts) public onlyOwner {
require(!mintingDone);
require(_recipients.length == _amounts.length);
require(_recipients.length < 255);
for (uint8 i = 0; i < _recipients.length; i++) {
address recipient = _recipients[i];
uint256 amount = _amounts[i];
require(generateTokens(recipient, amount));
}
}
function finishMinting() public onlyOwner {
require(!mintingDone);
// check hard cap
assert(totalSupply() <= maxSupply);
enableTransfers(true);
mintingDone = true;
}
// whitelist functionality
function addWhitelist(address _subject) public returns (bool) {
return modifyWhitelist(_subject, true);
}
function removeWhitelist(address _subject) public returns (bool) {
return modifyWhitelist(_subject, false);
}
function modifyWhitelist(address _subject, bool _status) internal returns (bool) {
require(msg.sender == whitelistManager, "Only the whitelist manager can edit it.");
if (_status == whitelist[_subject]) {
// no change to whitelist
return false;
}
whitelist[_subject] = _status;
emit WhitelistEdit(_subject, _status);
return true;
}
function modifyWhitelistMultiple(address[] memory _subjects, bool _status) public {
require(msg.sender == whitelistManager, "Only the whitelist manager can edit it.");
require(_subjects.length < 255);
for (uint8 i = 0; i < _subjects.length; i++) {
address subject = _subjects[i];
// note: does not check the current whitelist state (like modifyWhitelist)
// to save gas - consequently the function always emits an event, even
// if the whitelist status of an address does not change
whitelist[subject] = _status;
emit WhitelistEdit(subject, _status);
}
}
function changeWhitelistManager(address _manager) public onlyOwner {
whitelistManager = _manager;
emit WhitelistManagerChange(_manager);
}
}
pragma solidity >=0.5.8 <0.7.0;
/*
Adapted version of the MinimeToken (commit ea04d950eea153a04c51fa510b068b9dded390cb):
https://github.com/Giveth/minime
Upgraded to be compatible to solidity 0.5.8 (use of address/address payable,
explicit types, emit events, view instead of constant, etc.). In addition,
some functional changes were made:
- Remove token factory and clone method, as they are not necessary to create
clones.
- Remove fallback function.
- Use OpenZeppelin Ownable instead of controller.
- Remove token controller conditionless transfer rights.
- Remove approve and call functionality.
- Remove burn function and mark generateTokens internal.
*/
/*
Copyright 2016, Jordi Baylina
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import "./Ownable.sol";
contract ERC20 {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/// @title MiniMeToken Contract
/// @author Jordi Baylina
/// @dev This token contract's goal is to make it easy for anyone to clone this
/// token using the token distribution at a given block, this will allow DAO's
/// and DApps to upgrade their features in a decentralized manner without
/// affecting the original token
/// @dev It is ERC20 compliant, but still needs to under go further testing.
/// @dev The actual token contract, the default controller is the msg.sender
/// that deploys the contract, so usually this token will be deployed by a
/// token controller contract, which Giveth will call a "Campaign"
contract MiniMeToken is ERC20, Ownable {
string public name; //The Token's name: e.g. DigixDAO Tokens
uint8 public decimals; //Number of decimals of the smallest unit
string public symbol; //An identifier: e.g. REP
string public version = "MMT_0.2"; //An arbitrary versioning scheme
/// @dev `Checkpoint` is the structure that attaches a block number to a
/// given value, the block number attached is the one that last changed the
/// value
struct Checkpoint {
// `fromBlock` is the block number that the value was generated from
uint128 fromBlock;
// `value` is the amount of tokens at a specific block number
uint128 value;
}
// `parentToken` is the Token address that was cloned to produce this token;
// it will be 0x0 for a token that was not cloned
MiniMeToken public parentToken;
// `parentSnapShotBlock` is the block number from the Parent Token that was
// used to determine the initial distribution of the Clone Token
uint256 public parentSnapShotBlock;
// `creationBlock` is the block number that the Clone Token was created
uint256 public creationBlock;
// `balances` is the map that tracks the balance of each address, in this
// contract when the balance changes the block number that the change
// occurred is also included in the map
mapping (address => Checkpoint[]) balances;
// `allowed` tracks any extra transfer rights as in all ERC20 tokens
mapping (address => mapping (address => uint256)) allowed;
// Tracks the history of the `totalSupply` of the token
Checkpoint[] totalSupplyHistory;
// Flag that determines if the token is transferable or not.
bool public transfersEnabled;
////////////////
// Constructor
////////////////
/// @notice Constructor to create a MiniMeToken
/// @param _parentToken Address of the parent token, set to 0x0 if it is a
/// new token
/// @param _parentSnapShotBlock Block of the parent token that will
/// determine the initial distribution of the clone token, set to 0 if it
/// is a new token
/// @param _tokenName Name of the new token
/// @param _decimalUnits Number of decimals of the new token
/// @param _tokenSymbol Token Symbol for the new token
/// @param _transfersEnabled If true, tokens will be able to be transferred
constructor(
address _parentToken,
uint256 _parentSnapShotBlock,
string memory _tokenName,
uint8 _decimalUnits,
string memory _tokenSymbol,
bool _transfersEnabled
) public {
name = _tokenName; // Set the name
decimals = _decimalUnits; // Set the decimals
symbol = _tokenSymbol; // Set the symbol
parentToken = MiniMeToken(_parentToken);
parentSnapShotBlock = _parentSnapShotBlock;
transfersEnabled = _transfersEnabled;
creationBlock = block.number;
}
///////////////////
// ERC20 Methods
///////////////////
/// @notice Send `_amount` tokens to `_to` from `msg.sender`
/// @param _to The address of the recipient
/// @param _amount The amount of tokens to be transferred
/// @return Whether the transfer was successful or not
function transfer(address _to, uint256 _amount) public returns (bool success) {
require(transfersEnabled);
doTransfer(msg.sender, _to, _amount);
return true;
}
/// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
/// is approved by `_from`
/// @param _from The address holding the tokens being transferred
/// @param _to The address of the recipient
/// @param _amount The amount of tokens to be transferred
/// @return True if the transfer was successful
function transferFrom(address _from, address _to, uint256 _amount
) public returns (bool success) {
require(transfersEnabled);
require(allowed[_from][msg.sender] >= _amount);
allowed[_from][msg.sender] -= _amount;
doTransfer(_from, _to, _amount);
return true;
}
/// @dev This is the actual transfer function in the token contract, it can
/// only be called by other functions in this contract.
/// @param _from The address holding the tokens being transferred
/// @param _to The address of the recipient
/// @param _amount The amount of tokens to be transferred
/// @return True if the transfer was successful
function doTransfer(address _from, address _to, uint256 _amount
) internal {
if (_amount == 0) {
emit Transfer(_from, _to, _amount); // Follow the spec to log the event when transfer 0
return;
}
require(parentSnapShotBlock < block.number);
// Do not allow transfer to 0x0 or the token contract itself
require((_to != address(0)) && (_to != address(this)));
// If the amount being transfered is more than the balance of the
// account the transfer throws
uint256 previousBalanceFrom = balanceOfAt(_from, block.number);
require(previousBalanceFrom >= _amount);
// First update the balance array with the new value for the address
// sending the tokens
updateValueAtNow(balances[_from], previousBalanceFrom - _amount);
// Then update the balance array with the new value for the address
// receiving the tokens
uint256 previousBalanceTo = balanceOfAt(_to, block.number);
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
updateValueAtNow(balances[_to], previousBalanceTo + _amount);
// An event to make the transfer easy to find on the blockchain
emit Transfer(_from, _to, _amount);
}
/// @param _owner The address that's balance is being requested
/// @return The balance of `_owner` at the current block
function balanceOf(address _owner) public view returns (uint256 balance) {
return balanceOfAt(_owner, block.number);
}
/// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
/// its behalf. This is a modified version of the ERC20 approve function
/// to be a little bit safer
/// @param _spender The address of the account able to transfer the tokens
/// @param _amount The amount of tokens to be approved for transfer
/// @return True if the approval was successful
function approve(address _spender, uint256 _amount) public returns (bool success) {
require(transfersEnabled);
// To change the approve amount you first have to reduce the addresses`
// allowance to zero by calling `approve(_spender,0)` if it is not
// already 0 to mitigate the race condition described here:
// https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
require((_amount == 0) || (allowed[msg.sender][_spender] == 0));
allowed[msg.sender][_spender] = _amount;
emit Approval(msg.sender, _spender, _amount);
return true;
}
/// @dev This function makes it easy to read the `allowed[]` map
/// @param _owner The address of the account that owns the token
/// @param _spender The address of the account able to transfer the tokens
/// @return Amount of remaining tokens of _owner that _spender is allowed
/// to spend
function allowance(address _owner, address _spender
) public view returns (uint256 remaining) {
return allowed[_owner][_spender];
}
/// @dev This function makes it easy to get the total number of tokens
/// @return The total number of tokens
function totalSupply() public view returns (uint256) {
return totalSupplyAt(block.number);
}
////////////////
// Query balance and totalSupply in History
////////////////
/// @dev Queries the balance of `_owner` at a specific `_blockNumber`
/// @param _owner The address from which the balance will be retrieved
/// @param _blockNumber The block number when the balance is queried
/// @return The balance at `_blockNumber`
function balanceOfAt(address _owner, uint256 _blockNumber) public view
returns (uint256) {
// These next few lines are used when the balance of the token is
// requested before a check point was ever created for this token, it
// requires that the `parentToken.balanceOfAt` be queried at the
// genesis block for that token as this contains initial balance of
// this token
if ((balances[_owner].length == 0)
|| (balances[_owner][0].fromBlock > _blockNumber)) {
if (address(parentToken) != address(0)) {
return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));
} else {
// Has no parent
return 0;
}
// This will return the expected balance during normal situations
} else {
return getValueAt(balances[_owner], _blockNumber);
}
}
/// @notice Total amount of tokens at a specific `_blockNumber`.
/// @param _blockNumber The block number when the totalSupply is queried
/// @return The total amount of tokens at `_blockNumber`
function totalSupplyAt(uint256 _blockNumber) public view returns(uint256) {
// These next few lines are used when the totalSupply of the token is
// requested before a check point was ever created for this token, it
// requires that the `parentToken.totalSupplyAt` be queried at the
// genesis block for this token as that contains totalSupply of this
// token at this block number.
if ((totalSupplyHistory.length == 0)
|| (totalSupplyHistory[0].fromBlock > _blockNumber)) {
if (address(parentToken) != address(0)) {
return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));
} else {
return 0;
}
// This will return the expected totalSupply during normal situations
} else {
return getValueAt(totalSupplyHistory, _blockNumber);
}
}
////////////////
// Mint tokens
////////////////
/// @notice Generates `_amount` tokens that are assigned to `_owner`
/// @param _owner The address that will be assigned the new tokens
/// @param _amount The quantity of tokens generated
/// @return True if the tokens are generated correctly
function generateTokens(address _owner, uint256 _amount
) internal returns (bool) {
uint256 curTotalSupply = totalSupply();
require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
uint256 previousBalanceTo = balanceOf(_owner);
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
updateValueAtNow(balances[_owner], previousBalanceTo + _amount);
emit Transfer(address(0), _owner, _amount);
return true;
}
////////////////
// Enable tokens transfers
////////////////
/// @notice Enables token holders to transfer their tokens freely if true
/// @param _transfersEnabled True if transfers are allowed in the clone
function enableTransfers(bool _transfersEnabled) public onlyOwner {
transfersEnabled = _transfersEnabled;
}
////////////////
// Internal helper functions to query and set a value in a snapshot array
////////////////
/// @dev `getValueAt` retrieves the number of tokens at a given block number
/// @param checkpoints The history of values being queried
/// @param _block The block number to retrieve the value at
/// @return The number of tokens being queried
function getValueAt(Checkpoint[] storage checkpoints, uint256 _block
) view internal returns (uint256) {
if (checkpoints.length == 0) return 0;
// Shortcut for the actual value
if (_block >= checkpoints[checkpoints.length-1].fromBlock)
return checkpoints[checkpoints.length-1].value;
if (_block < checkpoints[0].fromBlock) return 0;
// Binary search of the value in the array
uint256 min = 0;
uint256 max = checkpoints.length-1;
while (max > min) {
uint256 mid = (max + min + 1) / 2;
if (checkpoints[mid].fromBlock <= _block) {
min = mid;
} else {
max = mid - 1;
}
}
return checkpoints[min].value;
}
/// @dev `updateValueAtNow` used to update the `balances` map and the
/// `totalSupplyHistory`
/// @param checkpoints The history of data being updated
/// @param _value The new number of tokens
function updateValueAtNow(Checkpoint[] storage checkpoints, uint256 _value
) internal {
if ((checkpoints.length == 0) || (checkpoints[checkpoints.length - 1].fromBlock < block.number)) {
Checkpoint storage newCheckPoint = checkpoints[checkpoints.length++];
newCheckPoint.fromBlock = uint128(block.number);
newCheckPoint.value = uint128(_value);
} else {
Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
oldCheckPoint.value = uint128(_value);
}
}
/// @dev Helper function to return a min betwen the two uints
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
//////////
// Safety Methods
//////////
/// @notice This method can be used by the controller to extract mistakenly
/// sent tokens to this contract.
/// @param _token The address of the token contract that you want to recover
/// set to 0 in case you want to extract ether.
function claimTokens(address _token) public onlyOwner {
if (_token == address(0x0)) {
owner().transfer(address(this).balance);
return;
}
MiniMeToken token = MiniMeToken(_token);
uint256 balance = token.balanceOf(address(this));
token.transfer(owner(), balance);
emit ClaimedTokens(_token, owner(), balance);
}
////////////////
// Events
////////////////
event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount);
event Transfer(address indexed _from, address indexed _to, uint256 _amount);
event Approval(
address indexed _owner,
address indexed _spender,
uint256 _amount
);
}pragma solidity ^0.5.0;
/*
From OpenZeppelin (commit 7934612):
https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol
*/
/**
* @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.
*
* 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 {
address payable private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address payable) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return msg.sender == _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 payable newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address payable newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_subjects","type":"address[]"},{"name":"_status","type":"bool"}],"name":"modifyWhitelistMultiple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_subject","type":"address"}],"name":"removeWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingDone","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"changeWhitelistManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipients","type":"address[]"},{"name":"_amounts","type":"uint256[]"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_subject","type":"address"}],"name":"addWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"subject","type":"address"},{"indexed":true,"name":"status","type":"bool"}],"name":"WhitelistEdit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"}],"name":"WhitelistManagerChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]Contract Creation Code
60806040526040518060400160405280600781526020017f4d4d545f302e32000000000000000000000000000000000000000000000000008152506004908051906020019062000051929190620002f0565b506000600b60016101000a81548160ff0219169083151502179055503480156200007a57600080fd5b506000806040518060400160405280600481526020017f53544f4e0000000000000000000000000000000000000000000000000000000081525060086040518060400160405280600481526020017f53544f4e000000000000000000000000000000000000000000000000000000008152506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38360019080519060200190620001c2929190620002f0565b5082600260006101000a81548160ff021916908360ff1602179055508160039080519060200190620001f6929190620002f0565b5085600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460068190555080600b60006101000a81548160ff0219169083151502179055504360078190555050505050505033600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f50011196c7abadb88a32e166ff96a5a8ecec239bbeb40a8a1366479c88b60b4b60405160405180910390a26200039f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200033357805160ff191683800117855562000364565b8280016001018555821562000364579182015b828111156200036357825182559160200191906001019062000346565b5b50905062000373919062000377565b5090565b6200039c91905b80821115620003985760008160009055506001016200037e565b5090565b90565b612c0a80620003af6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638e2ae5641161010f578063c5bcc4f1116100a2578063e467f7e011610071578063e467f7e014610a3c578063f2fde38b14610b88578063f41e60c514610bcc578063f80f5dd514610bfc576101f0565b8063c5bcc4f114610944578063d5abeb0114610962578063dd62ed3e14610980578063df8de3e7146109f8576101f0565b80639b19251a116100de5780639b19251a1461081c578063a9059cbb14610878578063bef97c87146108de578063c49fc0d114610900576101f0565b80638e2ae564146107135780638f32d59b1461073557806395d89b4114610757578063981b24d0146107da576101f0565b80634ee2cd7e1161018757806378c8cda71161015657806378c8cda7146106195780637d64bcb41461067557806380a540011461067f5780638da5cb5b146106c9576101f0565b80634ee2cd7e146104d257806354fd4d501461053457806370a08231146105b7578063715018a61461060f576101f0565b806323b872dd116101c357806323b872dd1461031a57806326563b40146103a0578063313ce567146103ea5780634d24c8291461040e576101f0565b806306fdde03146101f5578063095ea7b31461027857806317634514146102de57806318160ddd146102fc575b600080fd5b6101fd610c58565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c46004803603604081101561028e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cf6565b604051808215151515815260200191505060405180910390f35b6102e6610e95565b6040518082815260200191505060405180910390f35b610304610e9b565b6040518082815260200191505060405180910390f35b6103866004803603606081101561033057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eab565b604051808215151515815260200191505060405180910390f35b6103a8610fef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f2611015565b604051808260ff1660ff16815260200191505060405180910390f35b6104d06004803603604081101561042457600080fd5b810190808035906020019064010000000081111561044157600080fd5b82018360208201111561045357600080fd5b8035906020019184602083028401116401000000008311171561047557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803515159060200190929190505050611028565b005b61051e600480360360408110156104e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111b9565b6040518082815260200191505060405180910390f35b61053c611439565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057c578082015181840152602081019050610561565b50505050905090810190601f1680156105a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105f9600480360360208110156105cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114d7565b6040518082815260200191505060405180910390f35b6106176114ea565b005b61065b6004803603602081101561062f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611623565b604051808215151515815260200191505060405180910390f35b61067d611637565b005b61068761170a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d1611730565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61071b611759565b604051808215151515815260200191505060405180910390f35b61073d61176c565b604051808215151515815260200191505060405180910390f35b61075f6117c3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561079f578082015181840152602081019050610784565b50505050905090810190601f1680156107cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610806600480360360208110156107f057600080fd5b8101908080359060200190929190505050611861565b6040518082815260200191505060405180910390f35b61085e6004803603602081101561083257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119f5565b604051808215151515815260200191505060405180910390f35b6108c46004803603604081101561088e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a15565b604051808215151515815260200191505060405180910390f35b6108e6611a45565b604051808215151515815260200191505060405180910390f35b6109426004803603602081101561091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a58565b005b61094c611b59565b6040518082815260200191505060405180910390f35b61096a611b5f565b6040518082815260200191505060405180910390f35b6109e26004803603604081101561099657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b6a565b6040518082815260200191505060405180910390f35b610a3a60048036036020811015610a0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bf1565b005b610b8660048036036040811015610a5257600080fd5b8101908080359060200190640100000000811115610a6f57600080fd5b820183602082011115610a8157600080fd5b80359060200191846020830284011164010000000083111715610aa357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b0357600080fd5b820183602082011115610b1557600080fd5b80359060200191846020830284011164010000000083111715610b3757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611f07565b005b610bca60048036036020811015610b9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612026565b005b610bfa60048036036020811015610be257600080fd5b810190808035151590602001909291905050506120ac565b005b610c3e60048036036020811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612143565b604051808215151515815260200191505060405180910390f35b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cee5780601f10610cc357610100808354040283529160200191610cee565b820191906000526020600020905b815481529060010190602001808311610cd157829003601f168201915b505050505081565b6000600b60009054906101000a900460ff16610d1157600080fd5b6000821480610d9c57506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610da557600080fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60075481565b6000610ea643611861565b905090565b6000600b60009054906101000a900460ff16610ec657600080fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f4f57600080fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550610fe4848484612157565b600190509392505050565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900460ff1681565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612bb86027913960400191505060405180910390fd5b60ff8251106110dc57600080fd5b60008090505b82518160ff1610156111b4576000838260ff16815181106110ff57fe5b6020026020010151905082600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508215158173ffffffffffffffffffffffffffffffffffffffff167f67652629ee6670392739cc4dfdd74c00b3f827d485878c85a1358995f8eb35cb60405160405180910390a35080806001019150506110e2565b505050565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501480611290575081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154811061125257fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16115b156113e857600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113df57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e8461133685600654612383565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561139d57600080fd5b505afa1580156113b1573d6000803e3d6000fd5b505050506040513d60208110156113c757600080fd5b81019080805190602001909291905050509050611433565b60009050611433565b611430600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208361239c565b90505b92915050565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114cf5780601f106114a4576101008083540402835291602001916114cf565b820191906000526020600020905b8154815290600101906020018083116114b257829003601f168201915b505050505081565b60006114e382436111b9565b9050919050565b6114f261176c565b611564576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061163082600061259b565b9050919050565b61163f61176c565b6116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60019054906101000a900460ff16156116cb57600080fd5b6683734dd0b080006116db610e9b565b11156116e357fe5b6116ed60016120ac565b6001600b60016101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118595780601f1061182e57610100808354040283529160200191611859565b820191906000526020600020905b81548152906001019060200180831161183c57829003601f168201915b505050505081565b600080600a8054905014806118be575081600a60008154811061188057fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16115b156119e257600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d957600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663981b24d061196384600654612383565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b810190808051906020019092919050505090506119f0565b600090506119f0565b6119ed600a8361239c565b90505b919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600b60009054906101000a900460ff16611a3057600080fd5b611a3b338484612157565b6001905092915050565b600b60009054906101000a900460ff1681565b611a6061176c565b611ad2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f50011196c7abadb88a32e166ff96a5a8ecec239bbeb40a8a1366479c88b60b4b60405160405180910390a250565b60065481565b6683734dd0b0800081565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bf961176c565b611c6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d0a57611ca8611730565b73ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611d04573d6000803e3d6000fd5b50611f04565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d8e57600080fd5b505afa158015611da2573d6000803e3d6000fd5b505050506040513d6020811015611db857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611def611730565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e5957600080fd5b505af1158015611e6d573d6000803e3d6000fd5b505050506040513d6020811015611e8357600080fd5b810190808051906020019092919050505050611e9d611730565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c836040518082815260200191505060405180910390a350505b50565b611f0f61176c565b611f81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60019054906101000a900460ff1615611f9b57600080fd5b8051825114611fa957600080fd5b60ff825110611fb757600080fd5b60008090505b82518160ff161015612021576000838260ff1681518110611fda57fe5b602002602001015190506000838360ff1681518110611ff557fe5b60200260200101519050612009828261274c565b61201257600080fd5b50508080600101915050611fbd565b505050565b61202e61176c565b6120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6120a98161284d565b50565b6120b461176c565b612126576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600061215082600161259b565b9050919050565b60008114156121ca578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a361237e565b43600654106121d857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561224157503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61224a57600080fd5b600061225684436111b9565b90508181101561226557600080fd5b6122af600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838303612991565b60006122bb84436111b9565b90508083820110156122cc57600080fd5b612316600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848301612991565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505b505050565b60008183106123925781612394565b825b905092915050565b600080838054905014156123b35760009050612595565b826001848054905003815481106123c657fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16821061245e578260018480549050038154811061241b57fe5b9060005260206000200160000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050612595565b8260008154811061246b57fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168210156124b75760009050612595565b60008090506000600185805490500390505b818111156125485760006002600184840101816124e257fe5b049050848682815481106124f257fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161161253b57809250612542565b6001810391505b506124c9565b84828154811061255457fe5b9060005260206000200160000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16925050505b92915050565b6000600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612643576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612bb86027913960400191505060405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156126a45760009050612746565b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508115158373ffffffffffffffffffffffffffffffffffffffff167f67652629ee6670392739cc4dfdd74c00b3f827d485878c85a1358995f8eb35cb60405160405180910390a3600190505b92915050565b600080612757610e9b565b905080838201101561276857600080fd5b6000612773856114d7565b905080848201101561278457600080fd5b612791600a858401612991565b6127db600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858301612991565b8473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612b926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000828054905014806129f1575043826001848054905003815481106129b357fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16105b15612a9e57600082838054809190600101612a0c9190612b00565b81548110612a1657fe5b906000526020600020019050438160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550818160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050612afc565b600082600184805490500381548110612ab357fe5b906000526020600020019050818160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b5050565b815481835581811115612b2757818360005260206000209182019101612b269190612b2c565b5b505050565b612b8e91905b80821115612b8a57600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff021916905550600101612b32565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c79207468652077686974656c697374206d616e616765722063616e20656469742069742ea165627a7a7230582006bdde6a48232f612b2f661446c8259abb33dcb045991bc95ac84cbba45e3b8f0029
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80638e2ae5641161010f578063c5bcc4f1116100a2578063e467f7e011610071578063e467f7e014610a3c578063f2fde38b14610b88578063f41e60c514610bcc578063f80f5dd514610bfc576101f0565b8063c5bcc4f114610944578063d5abeb0114610962578063dd62ed3e14610980578063df8de3e7146109f8576101f0565b80639b19251a116100de5780639b19251a1461081c578063a9059cbb14610878578063bef97c87146108de578063c49fc0d114610900576101f0565b80638e2ae564146107135780638f32d59b1461073557806395d89b4114610757578063981b24d0146107da576101f0565b80634ee2cd7e1161018757806378c8cda71161015657806378c8cda7146106195780637d64bcb41461067557806380a540011461067f5780638da5cb5b146106c9576101f0565b80634ee2cd7e146104d257806354fd4d501461053457806370a08231146105b7578063715018a61461060f576101f0565b806323b872dd116101c357806323b872dd1461031a57806326563b40146103a0578063313ce567146103ea5780634d24c8291461040e576101f0565b806306fdde03146101f5578063095ea7b31461027857806317634514146102de57806318160ddd146102fc575b600080fd5b6101fd610c58565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c46004803603604081101561028e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cf6565b604051808215151515815260200191505060405180910390f35b6102e6610e95565b6040518082815260200191505060405180910390f35b610304610e9b565b6040518082815260200191505060405180910390f35b6103866004803603606081101561033057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eab565b604051808215151515815260200191505060405180910390f35b6103a8610fef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f2611015565b604051808260ff1660ff16815260200191505060405180910390f35b6104d06004803603604081101561042457600080fd5b810190808035906020019064010000000081111561044157600080fd5b82018360208201111561045357600080fd5b8035906020019184602083028401116401000000008311171561047557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803515159060200190929190505050611028565b005b61051e600480360360408110156104e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111b9565b6040518082815260200191505060405180910390f35b61053c611439565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057c578082015181840152602081019050610561565b50505050905090810190601f1680156105a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105f9600480360360208110156105cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114d7565b6040518082815260200191505060405180910390f35b6106176114ea565b005b61065b6004803603602081101561062f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611623565b604051808215151515815260200191505060405180910390f35b61067d611637565b005b61068761170a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d1611730565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61071b611759565b604051808215151515815260200191505060405180910390f35b61073d61176c565b604051808215151515815260200191505060405180910390f35b61075f6117c3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561079f578082015181840152602081019050610784565b50505050905090810190601f1680156107cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610806600480360360208110156107f057600080fd5b8101908080359060200190929190505050611861565b6040518082815260200191505060405180910390f35b61085e6004803603602081101561083257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119f5565b604051808215151515815260200191505060405180910390f35b6108c46004803603604081101561088e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a15565b604051808215151515815260200191505060405180910390f35b6108e6611a45565b604051808215151515815260200191505060405180910390f35b6109426004803603602081101561091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a58565b005b61094c611b59565b6040518082815260200191505060405180910390f35b61096a611b5f565b6040518082815260200191505060405180910390f35b6109e26004803603604081101561099657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b6a565b6040518082815260200191505060405180910390f35b610a3a60048036036020811015610a0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bf1565b005b610b8660048036036040811015610a5257600080fd5b8101908080359060200190640100000000811115610a6f57600080fd5b820183602082011115610a8157600080fd5b80359060200191846020830284011164010000000083111715610aa357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b0357600080fd5b820183602082011115610b1557600080fd5b80359060200191846020830284011164010000000083111715610b3757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611f07565b005b610bca60048036036020811015610b9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612026565b005b610bfa60048036036020811015610be257600080fd5b810190808035151590602001909291905050506120ac565b005b610c3e60048036036020811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612143565b604051808215151515815260200191505060405180910390f35b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cee5780601f10610cc357610100808354040283529160200191610cee565b820191906000526020600020905b815481529060010190602001808311610cd157829003601f168201915b505050505081565b6000600b60009054906101000a900460ff16610d1157600080fd5b6000821480610d9c57506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610da557600080fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60075481565b6000610ea643611861565b905090565b6000600b60009054906101000a900460ff16610ec657600080fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f4f57600080fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550610fe4848484612157565b600190509392505050565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900460ff1681565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612bb86027913960400191505060405180910390fd5b60ff8251106110dc57600080fd5b60008090505b82518160ff1610156111b4576000838260ff16815181106110ff57fe5b6020026020010151905082600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508215158173ffffffffffffffffffffffffffffffffffffffff167f67652629ee6670392739cc4dfdd74c00b3f827d485878c85a1358995f8eb35cb60405160405180910390a35080806001019150506110e2565b505050565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501480611290575081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154811061125257fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16115b156113e857600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113df57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e8461133685600654612383565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561139d57600080fd5b505afa1580156113b1573d6000803e3d6000fd5b505050506040513d60208110156113c757600080fd5b81019080805190602001909291905050509050611433565b60009050611433565b611430600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208361239c565b90505b92915050565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114cf5780601f106114a4576101008083540402835291602001916114cf565b820191906000526020600020905b8154815290600101906020018083116114b257829003601f168201915b505050505081565b60006114e382436111b9565b9050919050565b6114f261176c565b611564576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061163082600061259b565b9050919050565b61163f61176c565b6116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60019054906101000a900460ff16156116cb57600080fd5b6683734dd0b080006116db610e9b565b11156116e357fe5b6116ed60016120ac565b6001600b60016101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118595780601f1061182e57610100808354040283529160200191611859565b820191906000526020600020905b81548152906001019060200180831161183c57829003601f168201915b505050505081565b600080600a8054905014806118be575081600a60008154811061188057fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16115b156119e257600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d957600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663981b24d061196384600654612383565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b810190808051906020019092919050505090506119f0565b600090506119f0565b6119ed600a8361239c565b90505b919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600b60009054906101000a900460ff16611a3057600080fd5b611a3b338484612157565b6001905092915050565b600b60009054906101000a900460ff1681565b611a6061176c565b611ad2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f50011196c7abadb88a32e166ff96a5a8ecec239bbeb40a8a1366479c88b60b4b60405160405180910390a250565b60065481565b6683734dd0b0800081565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bf961176c565b611c6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d0a57611ca8611730565b73ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611d04573d6000803e3d6000fd5b50611f04565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d8e57600080fd5b505afa158015611da2573d6000803e3d6000fd5b505050506040513d6020811015611db857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611def611730565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e5957600080fd5b505af1158015611e6d573d6000803e3d6000fd5b505050506040513d6020811015611e8357600080fd5b810190808051906020019092919050505050611e9d611730565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c836040518082815260200191505060405180910390a350505b50565b611f0f61176c565b611f81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60019054906101000a900460ff1615611f9b57600080fd5b8051825114611fa957600080fd5b60ff825110611fb757600080fd5b60008090505b82518160ff161015612021576000838260ff1681518110611fda57fe5b602002602001015190506000838360ff1681518110611ff557fe5b60200260200101519050612009828261274c565b61201257600080fd5b50508080600101915050611fbd565b505050565b61202e61176c565b6120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6120a98161284d565b50565b6120b461176c565b612126576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600061215082600161259b565b9050919050565b60008114156121ca578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a361237e565b43600654106121d857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561224157503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61224a57600080fd5b600061225684436111b9565b90508181101561226557600080fd5b6122af600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838303612991565b60006122bb84436111b9565b90508083820110156122cc57600080fd5b612316600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848301612991565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505b505050565b60008183106123925781612394565b825b905092915050565b600080838054905014156123b35760009050612595565b826001848054905003815481106123c657fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16821061245e578260018480549050038154811061241b57fe5b9060005260206000200160000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050612595565b8260008154811061246b57fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168210156124b75760009050612595565b60008090506000600185805490500390505b818111156125485760006002600184840101816124e257fe5b049050848682815481106124f257fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161161253b57809250612542565b6001810391505b506124c9565b84828154811061255457fe5b9060005260206000200160000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16925050505b92915050565b6000600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612643576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612bb86027913960400191505060405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156126a45760009050612746565b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508115158373ffffffffffffffffffffffffffffffffffffffff167f67652629ee6670392739cc4dfdd74c00b3f827d485878c85a1358995f8eb35cb60405160405180910390a3600190505b92915050565b600080612757610e9b565b905080838201101561276857600080fd5b6000612773856114d7565b905080848201101561278457600080fd5b612791600a858401612991565b6127db600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858301612991565b8473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612b926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000828054905014806129f1575043826001848054905003815481106129b357fe5b9060005260206000200160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16105b15612a9e57600082838054809190600101612a0c9190612b00565b81548110612a1657fe5b906000526020600020019050438160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550818160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050612afc565b600082600184805490500381548110612ab357fe5b906000526020600020019050818160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b5050565b815481835581811115612b2757818360005260206000209182019101612b269190612b2c565b5b505050565b612b8e91905b80821115612b8a57600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff021916905550600101612b32565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c79207468652077686974656c697374206d616e616765722063616e20656469742069742ea165627a7a7230582006bdde6a48232f612b2f661446c8259abb33dcb045991bc95ac84cbba45e3b8f0029
Deployed Bytecode Sourcemap
63:2987:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;63:2987:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2736:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2736:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9265:626;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9265:626:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3877:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10481:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6603:311;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6603:311:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;226:31:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2816:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2209:675:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2209:675:2;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2209:675:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2209:675:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2209:675:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2209:675:2;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10938:949:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10938:949:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2962:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2962:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8736:130;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8736:130:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1765:137:1;;;:::i;:::-;;1667:121:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1667:121:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1295:211;;;:::i;:::-;;3573:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;972:85:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;165:31:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1331:90:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2897:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2897:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12100:920;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12100:920:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;263:41:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;263:41:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6066:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6066:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4459:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2890:158:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2890:158:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;3760:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;103:55:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10210:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10210:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16670:386;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16670:386:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;849:440:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;849:440:2;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;849:440:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;849:440:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;849:440:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;849:440:2;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;849:440:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;849:440:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;849:440:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;849:440:2;;;;;;;;;;;;;;;:::i;:::-;;2051:115:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2051:115:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;14143:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14143:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;1544:117:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1544:117:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2736:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9265:626::-;9333:12;9365:16;;;;;;;;;;;9357:25;;;;;;9716:1;9705:7;:12;9704:54;;;;9756:1;9723:7;:19;9731:10;9723:19;;;;;;;;;;;;;;;:29;9743:8;9723:29;;;;;;;;;;;;;;;;:34;9704:54;9696:63;;;;;;9802:7;9770;:19;9778:10;9770:19;;;;;;;;;;;;;;;:29;9790:8;9770:29;;;;;;;;;;;;;;;:39;;;;9845:8;9824:39;;9833:10;9824:39;;;9855:7;9824:39;;;;;;;;;;;;;;;;;;9880:4;9873:11;;9265:626;;;;:::o;3877:28::-;;;;:::o;10481:104::-;10525:7;10551:27;10565:12;10551:13;:27::i;:::-;10544:34;;10481:104;:::o;6603:311::-;6691:12;6723:16;;;;;;;;;;;6715:25;;;;;;6789:7;6759;:14;6767:5;6759:14;;;;;;;;;;;;;;;:26;6774:10;6759:26;;;;;;;;;;;;;;;;:37;;6751:46;;;;;;6837:7;6807;:14;6815:5;6807:14;;;;;;;;;;;;;;;:26;6822:10;6807:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;6855:31;6866:5;6873:3;6878:7;6855:10;:31::i;:::-;6903:4;6896:11;;6603:311;;;;;:::o;226:31:2:-;;;;;;;;;;;;;:::o;2816:21:0:-;;;;;;;;;;;;;:::o;2209:675:2:-;2323:16;;;;;;;;;;;2309:30;;:10;:30;;;2301:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2420:3;2401:9;:16;:22;2393:31;;;;;;2440:7;2450:1;2440:11;;2435:443;2457:9;:16;2453:1;:20;;;2435:443;;;2494:15;2512:9;2522:1;2512:12;;;;;;;;;;;;;;;;2494:30;;2810:7;2789:9;:18;2799:7;2789:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2859:7;2836:31;;2850:7;2836:31;;;;;;;;;;;;2435:443;2475:3;;;;;;;2435:443;;;;2209:675;;:::o;10938:949:0:-;11026:7;11405:1;11378:8;:16;11387:6;11378:16;;;;;;;;;;;;;;;:23;;;;:28;11377:92;;;;11456:12;11424:8;:16;11433:6;11424:16;;;;;;;;;;;;;;;11441:1;11424:19;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:44;;;11377:92;11373:508;;;11521:1;11489:34;;11497:11;;;;;;;;;;;11489:34;;;11485:231;;11550:11;;;;;;;;;;;:23;;;11574:6;11582:38;11586:12;11600:19;;11582:3;:38::i;:::-;11550:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11550:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11550:71:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11550:71:0;;;;;;;;;;;;;;;;11543:78;;;;11485:231;11700:1;11693:8;;;;11373:508;11828:42;11839:8;:16;11848:6;11839:16;;;;;;;;;;;;;;;11857:12;11828:10;:42::i;:::-;11821:49;;10938:949;;;;;:::o;2962:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8736:130::-;8792:15;8826:33;8838:6;8846:12;8826:11;:33::i;:::-;8819:40;;8736:130;;;:::o;1765:137:1:-;1184:9;:7;:9::i;:::-;1176:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1863:1;1826:40;;1847:6;;;;;;;;;;;1826:40;;;;;;;;;;;;1893:1;1876:6;;:19;;;;;;;;;;;;;;;;;;1765:137::o;1667:121:2:-;1726:4;1749:32;1765:8;1775:5;1749:15;:32::i;:::-;1742:39;;1667:121;;;:::o;1295:211::-;1184:9:1;:7;:9::i;:::-;1176:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1356:11:2;;;;;;;;;;;1355:12;1347:21;;;;;;139:19;1412:13;:11;:13::i;:::-;:26;;1405:34;;;;1450:21;1466:4;1450:15;:21::i;:::-;1495:4;1481:11;;:18;;;;;;;;;;;;;;;;;;1295:211::o;3573:30:0:-;;;;;;;;;;;;;:::o;972:85:1:-;1010:15;1044:6;;;;;;;;;;;1037:13;;972:85;:::o;165:31:2:-;;;;;;;;;;;;;:::o;1331:90:1:-;1371:4;1408:6;;;;;;;;;;;1394:20;;:10;:20;;;1387:27;;1331:90;:::o;2897:20:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12100:920::-;12165:7;12569:1;12540:18;:25;;;;:30;12539:96;;;;12622:12;12588:18;12607:1;12588:21;;;;;;;;;;;;;;;:31;;;;;;;;;;;;:46;;;12539:96;12535:479;;;12687:1;12655:34;;12663:11;;;;;;;;;;;12655:34;;;12651:192;;12716:11;;;;;;;;;;;:25;;;12742:38;12746:12;12760:19;;12742:3;:38::i;:::-;12716:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12716:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12716:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12716:65:0;;;;;;;;;;;;;;;;12709:72;;;;12651:192;12827:1;12820:8;;;;12535:479;12959:44;12970:18;12990:12;12959:10;:44::i;:::-;12952:51;;12100:920;;;;:::o;263:41:2:-;;;;;;;;;;;;;;;;;;;;;;:::o;6066:187:0:-;6130:12;6162:16;;;;;;;;;;;6154:25;;;;;;6189:36;6200:10;6212:3;6217:7;6189:10;:36::i;:::-;6242:4;6235:11;;6066:187;;;;:::o;4459:28::-;;;;;;;;;;;;;:::o;2890:158:2:-;1184:9:1;:7;:9::i;:::-;1176:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2986:8:2;2967:16;;:27;;;;;;;;;;;;;;;;;;3032:8;3009:32;;;;;;;;;;;;2890:158;:::o;3760:34:0:-;;;;:::o;103:55:2:-;139:19;103:55;:::o;10210:147:0:-;10289:17;10325:7;:15;10333:6;10325:15;;;;;;;;;;;;;;;:25;10341:8;10325:25;;;;;;;;;;;;;;;;10318:32;;10210:147;;;;:::o;16670:386::-;1184:9:1;:7;:9::i;:::-;1176:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16756:3:0;16738:22;;:6;:22;;;16734:112;;;16776:7;:5;:7::i;:::-;:16;;:39;16801:4;16793:21;;;16776:39;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16776:39:0;16829:7;;16734:112;16856:17;16888:6;16856:39;;16905:15;16923:5;:15;;;16947:4;16923:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16923:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16923:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16923:30:0;;;;;;;;;;;;;;;;16905:48;;16963:5;:14;;;16978:7;:5;:7::i;:::-;16987;16963:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16963:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16963:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16963:32:0;;;;;;;;;;;;;;;;;17032:7;:5;:7::i;:::-;17010:39;;17024:6;17010:39;;;17041:7;17010:39;;;;;;;;;;;;;;;;;;1240:1:1;;;16670:386:0;:::o;849:440:2:-;1184:9:1;:7;:9::i;:::-;1176:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;956:11:2;;;;;;;;;;;955:12;947:21;;;;;;1008:8;:15;986:11;:18;:37;978:46;;;;;;1063:3;1042:11;:18;:24;1034:33;;;;;;1083:7;1093:1;1083:11;;1078:205;1100:11;:18;1096:1;:22;;;1078:205;;;1139:17;1159:11;1171:1;1159:14;;;;;;;;;;;;;;;;1139:34;;1187:14;1204:8;1213:1;1204:11;;;;;;;;;;;;;;;;1187:28;;1238:33;1253:9;1264:6;1238:14;:33::i;:::-;1230:42;;;;;;1078:205;;1120:3;;;;;;;1078:205;;;;849:440;;:::o;2051:115:1:-;1184:9;:7;:9::i;:::-;1176:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:28;2150:8;2131:18;:28::i;:::-;2051:115;:::o;14143:119:0:-;1184:9:1;:7;:9::i;:::-;1176:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14238:17:0;14219:16;;:36;;;;;;;;;;;;;;;;;;14143:119;:::o;1544:117:2:-;1600:4;1623:31;1639:8;1649:4;1623:15;:31::i;:::-;1616:38;;1544:117;;;:::o;7293:1308:0:-;7397:1;7386:7;:12;7382:152;;;7435:3;7419:29;;7428:5;7419:29;;;7440:7;7419:29;;;;;;;;;;;;;;;;;;7517:7;;7382:152;7574:12;7552:19;;:34;7544:43;;;;;;7691:1;7676:17;;:3;:17;;;;7675:45;;;;;7714:4;7699:20;;:3;:20;;;;7675:45;7667:54;;;;;;7846:27;7876:32;7888:5;7895:12;7876:11;:32::i;:::-;7846:62;;7949:7;7926:19;:30;;7918:39;;;;;;8076:64;8093:8;:15;8102:5;8093:15;;;;;;;;;;;;;;;8132:7;8110:19;:29;8076:16;:64::i;:::-;8260:25;8288:30;8300:3;8305:12;8288:11;:30::i;:::-;8260:58;;8367:17;8356:7;8336:17;:27;:48;;8328:57;;;;;;8417:60;8434:8;:13;8443:3;8434:13;;;;;;;;;;;;;;;8469:7;8449:17;:27;8417:16;:60::i;:::-;8581:3;8565:29;;8574:5;8565:29;;;8586:7;8565:29;;;;;;;;;;;;;;;;;;7293:1308;;;;;;:::o;16266:104::-;16324:7;16354:1;16350;:5;:13;;16362:1;16350:13;;;16358:1;16350:13;16343:20;;16266:104;;;;:::o;14636:781::-;14734:7;14779:1;14757:11;:18;;;;:23;14753:37;;;14789:1;14782:8;;;;14753:37;14856:11;14887:1;14868:11;:18;;;;:20;14856:33;;;;;;;;;;;;;;;:43;;;;;;;;;;;;14846:53;;:6;:53;14842:117;;14920:11;14951:1;14932:11;:18;;;;:20;14920:33;;;;;;;;;;;;;;;:39;;;;;;;;;;;;14913:46;;;;;;14842:117;14982:11;14994:1;14982:14;;;;;;;;;;;;;;;:24;;;;;;;;;;;;14973:33;;:6;:33;14969:47;;;15015:1;15008:8;;;;14969:47;15078:11;15092:1;15078:15;;15103:11;15136:1;15117:11;:18;;;;:20;15103:34;;15147:225;15160:3;15154;:9;15147:225;;;15179:11;15211:1;15206;15200:3;15194;:9;:13;15193:19;;;;;;15179:33;;15260:6;15230:11;15242:3;15230:16;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:36;;;15226:136;;15292:3;15286:9;;15226:136;;;15346:1;15340:3;:7;15334:13;;15226:136;15147:225;;;;15388:11;15400:3;15388:16;;;;;;;;;;;;;;;:22;;;;;;;;;;;;15381:29;;;;;;14636:781;;;;;:::o;1794:409:2:-;1869:4;1907:16;;;;;;;;;;;1893:30;;:10;:30;;;1885:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1993:9;:19;2003:8;1993:19;;;;;;;;;;;;;;;;;;;;;;;;;1982:30;;:7;:30;;;1978:111;;;2073:5;2066:12;;;;1978:111;2121:7;2099:9;:19;2109:8;2099:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;2167:7;2143:32;;2157:8;2143:32;;;;;;;;;;;;2192:4;2185:11;;1794:409;;;;;:::o;13335:586:0:-;13415:4;13431:22;13456:13;:11;:13::i;:::-;13431:38;;13515:14;13504:7;13487:14;:24;:42;;13479:51;;;;;;13562:25;13590:17;13600:6;13590:9;:17::i;:::-;13562:45;;13656:17;13645:7;13625:17;:27;:48;;13617:57;;;;;;13706:62;13723:18;13760:7;13743:14;:24;13706:16;:62::i;:::-;13778:63;13795:8;:16;13804:6;13795:16;;;;;;;;;;;;;;;13833:7;13813:17;:27;13778:16;:63::i;:::-;13877:6;13856:37;;13873:1;13856:37;;;13885:7;13856:37;;;;;;;;;;;;;;;;;;13910:4;13903:11;;;;13335:586;;;;:::o;2267:233:1:-;2368:1;2348:22;;:8;:22;;;;2340:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2457:8;2428:38;;2449:6;;;;;;;;;;;2428:38;;;;;;;;;;;;2485:8;2476:6;;:17;;;;;;;;;;;;;;;;;;2267:233;:::o;15635:559:0:-;15763:1;15741:11;:18;;;;:23;15740:91;;;;15818:12;15770:11;15803:1;15782:11;:18;;;;:22;15770:35;;;;;;;;;;;;;;;:45;;;;;;;;;;;;:60;;;15740:91;15736:452;;;15847:32;15882:11;15894;:20;;;;;;;;;;;:::i;:::-;15882:33;;;;;;;;;;;;;;;15847:68;;15963:12;15929:13;:23;;;:47;;;;;;;;;;;;;;;;;;16020:6;15990:13;:19;;;:37;;;;;;;;;;;;;;;;;;15736:452;;;;16058:32;16093:11;16124:1;16105:11;:18;;;;:20;16093:33;;;;;;;;;;;;;;;16058:68;;16170:6;16140:13;:19;;;:37;;;;;;;;;;;;;;;;;;15736:452;;15635:559;;:::o;63:2987:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://06bdde6a48232f612b2f661446c8259abb33dcb045991bc95ac84cbba45e3b8f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)