ERC-20
Overview
Max Total Supply
10,000,000 DON
Holders
595
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DON
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-20 */ /** *Submitted for verification at Etherscan.io on 2020-11-18 */ pragma solidity ^0.4.24; library HxSafeMath { //중요 1/3: 자식에서 compile문제로 SafeMath->HxSafeMath /** * @dev Multiplies two unsigned integers, reverts on 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-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } 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]; } } contract HxOwnable { //중요:자식에서 compile문제로 Ownable -> HxOwnable address public owner; address public newOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; newOwner = address(0); } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyNewOwner() { require(msg.sender != address(0)); require(msg.sender == newOwner); _; } function isOwner(address account) public view returns (bool) { if( account == owner ){ return true; } else { return false; } } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0)); newOwner = _newOwner; } function acceptOwnership() public onlyNewOwner returns(bool) { emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract PauserRole is HxOwnable{ 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)|| isOwner(msg.sender)); _; } function isPauser(address account) public view returns (bool) { return _pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function removePauser(address account) public onlyOwner { _removePauser(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); } } 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); } } interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract HxERC20 is IERC20 { //중요:자식에서 compile문제로 ERC20 -> HxERC20 using HxSafeMath for uint256; mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) internal _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * 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 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom(address from, address to, uint256 value) public returns (bool) { _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value); _transfer(from, to, value); emit Approval(from, msg.sender, _allowed[from][msg.sender]); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value); _burn(account, value); emit Approval(account, msg.sender, _allowed[account][msg.sender]); } } contract ERC20Pausable is HxERC20, Pausable { function transfer(address to, uint256 value) public whenNotPaused returns (bool) { return super.transfer(to, value); } function transferFrom(address from, address to, uint256 value) public whenNotPaused returns (bool) { return super.transferFrom(from, to, value); } /* * approve/increaseApprove/decreaseApprove can be set when Paused state */ /* * function approve(address spender, uint256 value) public whenNotPaused returns (bool) { * return super.approve(spender, value); * } * * function increaseAllowance(address spender, uint addedValue) public whenNotPaused returns (bool success) { * return super.increaseAllowance(spender, addedValue); * } * * function decreaseAllowance(address spender, uint subtractedValue) public whenNotPaused returns (bool success) { * return super.decreaseAllowance(spender, subtractedValue); * } */ } contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @return the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @return the symbol of the token. */ function symbol() public view returns (string memory) { return _symbol; } /** * @return the number of decimals of the token. */ function decimals() public view returns (uint8) { return _decimals; } } contract DON is ERC20Detailed, ERC20Pausable { struct LockInfo { uint256 _releaseTime; uint256 _amount; } address public implementation; mapping (address => LockInfo[]) public timelockList; mapping (address => bool) public frozenAccount; event Freeze(address indexed holder); event Unfreeze(address indexed holder); event Lock(address indexed holder, uint256 value, uint256 releaseTime); event Unlock(address indexed holder, uint256 value); modifier notFrozen(address _holder) { require(!frozenAccount[_holder]); _; } constructor() ERC20Detailed("Donnie.Finance", "DON", 18) payable public { _mint(msg.sender, 10000000 * (10 ** 18)); } function balanceOf(address owner) public view returns (uint256) { uint256 totalBalance = super.balanceOf(owner); if( timelockList[owner].length >0 ){ for(uint i=0; i<timelockList[owner].length;i++){ totalBalance = totalBalance.add(timelockList[owner][i]._amount); } } return totalBalance; } function transfer(address to, uint256 value) public notFrozen(msg.sender) returns (bool) { if (timelockList[msg.sender].length > 0 ) { _autoUnlock(msg.sender); } return super.transfer(to, value); } function transferFrom(address from, address to, uint256 value) public notFrozen(from) returns (bool) { if (timelockList[from].length > 0) { _autoUnlock(from); } return super.transferFrom(from, to, value); } function freezeAccount(address holder) public onlyPauser returns (bool) { require(!frozenAccount[holder]); frozenAccount[holder] = true; emit Freeze(holder); return true; } function unfreezeAccount(address holder) public onlyPauser returns (bool) { require(frozenAccount[holder]); frozenAccount[holder] = false; emit Unfreeze(holder); return true; } function lock(address holder, uint256 value, uint256 releaseTime) public onlyPauser returns (bool) { require(_balances[holder] >= value,"There is not enough balances of holder."); _lock(holder,value,releaseTime); return true; } function transferWithLock(address holder, uint256 value, uint256 releaseTime) public onlyPauser returns (bool) { _transfer(msg.sender, holder, value); _lock(holder,value,releaseTime); return true; } function unlock(address holder, uint256 idx) public onlyPauser returns (bool) { require( timelockList[holder].length > idx, "There is not lock info."); _unlock(holder,idx); return true; } function _lock(address holder, uint256 value, uint256 releaseTime) internal returns(bool) { require(releaseTime > now, "ReleaseTime is not greater then now"); _balances[holder] = _balances[holder].sub(value); timelockList[holder].push( LockInfo(releaseTime, value) ); emit Lock(holder, value, releaseTime); return true; } function _unlock(address holder, uint256 idx) internal returns(bool) { LockInfo storage lockinfo = timelockList[holder][idx]; require(lockinfo._releaseTime < now, "CurrentTime is not greater then releaseTime"); uint256 releaseAmount = lockinfo._amount; delete timelockList[holder][idx]; timelockList[holder][idx] = timelockList[holder][timelockList[holder].length.sub(1)]; timelockList[holder].length -=1; emit Unlock(holder, releaseAmount); _balances[holder] = _balances[holder].add(releaseAmount); return true; } function _autoUnlock(address holder) internal returns(bool) { for(uint256 idx =0; idx < timelockList[holder].length ; idx++ ) { if (timelockList[holder][idx]._releaseTime <= now) { // If lockupinfo was deleted, loop restart at same position. if( _unlock(holder, idx) ) { idx -=1; } } } return true; } function claimToken(address _to, uint256 _value) public onlyOwner returns (bool) { this.transfer(_to, _value); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"claimToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"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":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"}],"name":"unfreezeAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"},{"name":"idx","type":"uint256"}],"name":"unlock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"frozenAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"timelockList","outputs":[{"name":"_releaseTime","type":"uint256"},{"name":"_amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"},{"name":"value","type":"uint256"},{"name":"releaseTime","type":"uint256"}],"name":"transferWithLock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"},{"name":"value","type":"uint256"},{"name":"releaseTime","type":"uint256"}],"name":"lock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"}],"name":"freezeAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"}],"name":"Freeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"}],"name":"Unfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"releaseTime","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Unlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60806040526040805190810160405280600e81526020017f446f6e6e69652e46696e616e63650000000000000000000000000000000000008152506040805190810160405280600381526020017f444f4e0000000000000000000000000000000000000000000000000000000000815250601282600090805190602001906200008a92919062000501565b508160019080519060200190620000a392919062000501565b5080600260006101000a81548160ff021916908360ff16021790555050505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200015f33620001a6640100000000026401000000009004565b6000600960006101000a81548160ff021916908315150217905550620001a0336a084595161401484a00000062000210640100000000026401000000009004565b620005b0565b620001ca816008620003876401000000000262003065179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200024d57600080fd5b62000272816005546200044a64010000000002620023d5179091906401000000009004565b600581905550620002da81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200044a64010000000002620023d5179091906401000000009004565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620003c457600080fd5b620003df82826200046c640100000000026401000000009004565b151515620003ec57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008082840190508381101515156200046257600080fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620004aa57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200054457805160ff191683800117855562000575565b8280016001018555821562000575579182015b828111156200057457825182559160200191906001019062000557565b5b50905062000584919062000588565b5090565b620005ad91905b80821115620005a95760008160009055506001016200058f565b5090565b90565b6131b980620005c06000396000f300608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461019b578063095ea7b31461022b5780631698755f1461029057806318160ddd146102f557806323b872dd146103205780632f54bf6e146103a5578063313ce5671461040057806339509351146104315780633f4ba83a1461049657806346fbf68e146104ad5780635c60da1b146105085780635c975abb1461055f5780636b2c0f551461058e5780636ef8d66d146105d157806370a08231146105e8578063788649ea1461063f57806379ba50971461069a5780637eee288d146106c957806382dc1ec41461072e5780638456cb59146107715780638da5cb5b1461078857806395d89b41146107df578063a457c2d71461086f578063a9059cbb146108d4578063b414d4b614610939578063d26c4a7614610994578063d4ee1d90146109fc578063dd62ed3e14610a53578063de6baccb14610aca578063e2ab691d14610b39578063f26c159f14610ba8578063f2fde38b14610c03575b600080fd5b3480156101a757600080fd5b506101b0610c46565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f05780820151818401526020810190506101d5565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023757600080fd5b50610276600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ce8565b604051808215151515815260200191505060405180910390f35b34801561029c57600080fd5b506102db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e15565b604051808215151515815260200191505060405180910390f35b34801561030157600080fd5b5061030a610f5c565b6040518082815260200191505060405180910390f35b34801561032c57600080fd5b5061038b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f66565b604051808215151515815260200191505060405180910390f35b3480156103b157600080fd5b506103e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102d565b604051808215151515815260200191505060405180910390f35b34801561040c57600080fd5b50610415611098565b604051808260ff1660ff16815260200191505060405180910390f35b34801561043d57600080fd5b5061047c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110af565b604051808215151515815260200191505060405180910390f35b3480156104a257600080fd5b506104ab6112e6565b005b3480156104b957600080fd5b506104ee600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a5565b604051808215151515815260200191505060405180910390f35b34801561051457600080fd5b5061051d6113c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056b57600080fd5b506105746113e8565b604051808215151515815260200191505060405180910390f35b34801561059a57600080fd5b506105cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ff565b005b3480156105dd57600080fd5b506105e6611467565b005b3480156105f457600080fd5b50610629600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611472565b6040518082815260200191505060405180910390f35b34801561064b57600080fd5b50610680600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a6565b604051808215151515815260200191505060405180910390f35b3480156106a657600080fd5b506106af6116c8565b604051808215151515815260200191505060405180910390f35b3480156106d557600080fd5b50610714600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118a7565b604051808215151515815260200191505060405180910390f35b34801561073a57600080fd5b5061076f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061199b565b005b34801561077d57600080fd5b506107866119cb565b005b34801561079457600080fd5b5061079d611a8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107eb57600080fd5b506107f4611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610834578082015181840152602081019050610819565b50505050905090810190601f1680156108615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561087b57600080fd5b506108ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b53565b604051808215151515815260200191505060405180910390f35b3480156108e057600080fd5b5061091f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d8a565b604051808215151515815260200191505060405180910390f35b34801561094557600080fd5b5061097a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e4f565b604051808215151515815260200191505060405180910390f35b3480156109a057600080fd5b506109df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e6f565b604051808381526020018281526020019250505060405180910390f35b348015610a0857600080fd5b50610a11611eaf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5f57600080fd5b50610ab4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed5565b6040518082815260200191505060405180910390f35b348015610ad657600080fd5b50610b1f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611f5c565b604051808215151515815260200191505060405180910390f35b348015610b4557600080fd5b50610b8e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611fa4565b604051808215151515815260200191505060405180910390f35b348015610bb457600080fd5b50610be9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120be565b604051808215151515815260200191505060405180910390f35b348015610c0f57600080fd5b50610c44600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121e1565b005b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d2557600080fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e7357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f1657600080fd5b505af1158015610f2a573d6000803e3d6000fd5b505050506040513d6020811015610f4057600080fd5b8101908080519060200190929190505050506001905092915050565b6000600554905090565b600083600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515610fc257600080fd5b6000600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111561101857611016856122bd565b505b6110238585856123a3565b9150509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561108e5760019050611093565b600090505b919050565b6000600260009054906101000a900460ff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156110ec57600080fd5b61117b82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d590919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6112ef336113a5565b806112ff57506112fe3361102d565b5b151561130a57600080fd5b600960009054906101000a900460ff16151561132557600080fd5b6000600960006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006113bb8260086123f690919063ffffffff16565b9050919050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900460ff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145b57600080fd5b6114648161248a565b50565b6114703361248a565b565b6000806000611480846124e4565b91506000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111561159c57600090505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561159b5761158c600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561156b57fe5b906000526020600020906002020160010154836123d590919063ffffffff16565b915080806001019150506114d2565b5b8192505050919050565b60006115b1336113a5565b806115c157506115c03361102d565b5b15156115cc57600080fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561162457600080fd5b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fca5069937e68fd197927055037f59d7c90bf75ac104e6e375539ef480c3ad6ee60405160405180910390a260019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561170557600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561176157600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090565b60006118b2336113a5565b806118c257506118c13361102d565b5b15156118cd57600080fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111515611986576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5468657265206973206e6f74206c6f636b20696e666f2e00000000000000000081525060200191505060405180910390fd5b611990838361252d565b506001905092915050565b6119a4336113a5565b806119b457506119b33361102d565b5b15156119bf57600080fd5b6119c881612908565b50565b6119d4336113a5565b806119e457506119e33361102d565b5b15156119ef57600080fd5b600960009054906101000a900460ff16151515611a0b57600080fd5b6001600960006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b495780601f10611b1e57610100808354040283529160200191611b49565b820191906000526020600020905b815481529060010190602001808311611b2c57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9057600080fd5b611c1f82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600033600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611de657600080fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115611e3c57611e3a336122bd565b505b611e468484612983565b91505092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600a60205281600052604060002081815481101515611e8a57fe5b9060005260206000209060020201600091509150508060000154908060010154905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611f67336113a5565b80611f775750611f763361102d565b5b1515611f8257600080fd5b611f8d3385856129b3565b611f98848484612b83565b50600190509392505050565b6000611faf336113a5565b80611fbf5750611fbe3361102d565b5b1515611fca57600080fd5b82600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156120a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f5468657265206973206e6f7420656e6f7567682062616c616e636573206f662081526020017f686f6c6465722e0000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6120b2848484612b83565b50600190509392505050565b60006120c9336113a5565b806120d957506120d83361102d565b5b15156120e457600080fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561213d57600080fd5b6001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167faf85b60d26151edd11443b704d424da6c43d0468f2235ebae3d1904dbc32304960405160405180910390a260019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561223d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561227957600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600090505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156123995742600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561235c57fe5b90600052602060002090600202016000015411151561238c5761237f838261252d565b1561238b576001810390505b5b80806001019150506122c5565b6001915050919050565b6000600960009054906101000a900460ff161515156123c157600080fd5b6123cc848484612dae565b90509392505050565b60008082840190508381101515156123ec57600080fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561243357600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249e816008612fb690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561257e57fe5b9060005260206000209060020201915042826000015410151561262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f43757272656e7454696d65206973206e6f742067726561746572207468656e2081526020017f72656c6561736554696d6500000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600101549050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561268257fe5b906000526020600020906002020160008082016000905560018201600090555050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127386001600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061296290919063ffffffff16565b81548110151561274457fe5b9060005260206000209060020201600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110151561279e57fe5b906000526020600020906002020160008201548160000155600182015481600101559050506001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081818054905003915081612818919061312c565b508473ffffffffffffffffffffffffffffffffffffffff167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1826040518082815260200191505060405180910390a26128b981600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d590919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019250505092915050565b61291c81600861306590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b60008083831115151561297457600080fd5b82840390508091505092915050565b6000600960009054906101000a900460ff161515156129a157600080fd5b6129ab8383613115565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156129ef57600080fd5b612a4181600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60004282111515612c22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f52656c6561736554696d65206973206e6f742067726561746572207468656e2081526020017f6e6f77000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612c7483600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040805190810160405280848152602001858152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508373ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b8484604051808381526020018281526020019250505060405180910390a2600190509392505050565b6000612e3f82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eca8484846129b3565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612ff257600080fd5b612ffc82826123f6565b151561300757600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156130a157600080fd5b6130ab82826123f6565b1515156130b757600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006131223384846129b3565b6001905092915050565b81548183558181111561315957600202816002028360005260206000209182019101613158919061315e565b5b505050565b61318a91905b8082111561318657600080820160009055600182016000905550600201613164565b5090565b905600a165627a7a72305820b7b581b5ca33d23654c972d2ccbff2f776cccb7294cc64861da575f09faf16b20029
Deployed Bytecode
0x608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461019b578063095ea7b31461022b5780631698755f1461029057806318160ddd146102f557806323b872dd146103205780632f54bf6e146103a5578063313ce5671461040057806339509351146104315780633f4ba83a1461049657806346fbf68e146104ad5780635c60da1b146105085780635c975abb1461055f5780636b2c0f551461058e5780636ef8d66d146105d157806370a08231146105e8578063788649ea1461063f57806379ba50971461069a5780637eee288d146106c957806382dc1ec41461072e5780638456cb59146107715780638da5cb5b1461078857806395d89b41146107df578063a457c2d71461086f578063a9059cbb146108d4578063b414d4b614610939578063d26c4a7614610994578063d4ee1d90146109fc578063dd62ed3e14610a53578063de6baccb14610aca578063e2ab691d14610b39578063f26c159f14610ba8578063f2fde38b14610c03575b600080fd5b3480156101a757600080fd5b506101b0610c46565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f05780820151818401526020810190506101d5565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023757600080fd5b50610276600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ce8565b604051808215151515815260200191505060405180910390f35b34801561029c57600080fd5b506102db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e15565b604051808215151515815260200191505060405180910390f35b34801561030157600080fd5b5061030a610f5c565b6040518082815260200191505060405180910390f35b34801561032c57600080fd5b5061038b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f66565b604051808215151515815260200191505060405180910390f35b3480156103b157600080fd5b506103e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102d565b604051808215151515815260200191505060405180910390f35b34801561040c57600080fd5b50610415611098565b604051808260ff1660ff16815260200191505060405180910390f35b34801561043d57600080fd5b5061047c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110af565b604051808215151515815260200191505060405180910390f35b3480156104a257600080fd5b506104ab6112e6565b005b3480156104b957600080fd5b506104ee600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a5565b604051808215151515815260200191505060405180910390f35b34801561051457600080fd5b5061051d6113c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056b57600080fd5b506105746113e8565b604051808215151515815260200191505060405180910390f35b34801561059a57600080fd5b506105cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ff565b005b3480156105dd57600080fd5b506105e6611467565b005b3480156105f457600080fd5b50610629600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611472565b6040518082815260200191505060405180910390f35b34801561064b57600080fd5b50610680600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a6565b604051808215151515815260200191505060405180910390f35b3480156106a657600080fd5b506106af6116c8565b604051808215151515815260200191505060405180910390f35b3480156106d557600080fd5b50610714600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118a7565b604051808215151515815260200191505060405180910390f35b34801561073a57600080fd5b5061076f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061199b565b005b34801561077d57600080fd5b506107866119cb565b005b34801561079457600080fd5b5061079d611a8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107eb57600080fd5b506107f4611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610834578082015181840152602081019050610819565b50505050905090810190601f1680156108615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561087b57600080fd5b506108ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b53565b604051808215151515815260200191505060405180910390f35b3480156108e057600080fd5b5061091f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d8a565b604051808215151515815260200191505060405180910390f35b34801561094557600080fd5b5061097a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e4f565b604051808215151515815260200191505060405180910390f35b3480156109a057600080fd5b506109df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e6f565b604051808381526020018281526020019250505060405180910390f35b348015610a0857600080fd5b50610a11611eaf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5f57600080fd5b50610ab4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed5565b6040518082815260200191505060405180910390f35b348015610ad657600080fd5b50610b1f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611f5c565b604051808215151515815260200191505060405180910390f35b348015610b4557600080fd5b50610b8e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611fa4565b604051808215151515815260200191505060405180910390f35b348015610bb457600080fd5b50610be9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120be565b604051808215151515815260200191505060405180910390f35b348015610c0f57600080fd5b50610c44600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121e1565b005b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d2557600080fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e7357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f1657600080fd5b505af1158015610f2a573d6000803e3d6000fd5b505050506040513d6020811015610f4057600080fd5b8101908080519060200190929190505050506001905092915050565b6000600554905090565b600083600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515610fc257600080fd5b6000600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111561101857611016856122bd565b505b6110238585856123a3565b9150509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561108e5760019050611093565b600090505b919050565b6000600260009054906101000a900460ff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156110ec57600080fd5b61117b82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d590919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6112ef336113a5565b806112ff57506112fe3361102d565b5b151561130a57600080fd5b600960009054906101000a900460ff16151561132557600080fd5b6000600960006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006113bb8260086123f690919063ffffffff16565b9050919050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900460ff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145b57600080fd5b6114648161248a565b50565b6114703361248a565b565b6000806000611480846124e4565b91506000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111561159c57600090505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561159b5761158c600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561156b57fe5b906000526020600020906002020160010154836123d590919063ffffffff16565b915080806001019150506114d2565b5b8192505050919050565b60006115b1336113a5565b806115c157506115c03361102d565b5b15156115cc57600080fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561162457600080fd5b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fca5069937e68fd197927055037f59d7c90bf75ac104e6e375539ef480c3ad6ee60405160405180910390a260019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561170557600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561176157600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090565b60006118b2336113a5565b806118c257506118c13361102d565b5b15156118cd57600080fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111515611986576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5468657265206973206e6f74206c6f636b20696e666f2e00000000000000000081525060200191505060405180910390fd5b611990838361252d565b506001905092915050565b6119a4336113a5565b806119b457506119b33361102d565b5b15156119bf57600080fd5b6119c881612908565b50565b6119d4336113a5565b806119e457506119e33361102d565b5b15156119ef57600080fd5b600960009054906101000a900460ff16151515611a0b57600080fd5b6001600960006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b495780601f10611b1e57610100808354040283529160200191611b49565b820191906000526020600020905b815481529060010190602001808311611b2c57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9057600080fd5b611c1f82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600033600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611de657600080fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115611e3c57611e3a336122bd565b505b611e468484612983565b91505092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600a60205281600052604060002081815481101515611e8a57fe5b9060005260206000209060020201600091509150508060000154908060010154905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611f67336113a5565b80611f775750611f763361102d565b5b1515611f8257600080fd5b611f8d3385856129b3565b611f98848484612b83565b50600190509392505050565b6000611faf336113a5565b80611fbf5750611fbe3361102d565b5b1515611fca57600080fd5b82600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156120a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f5468657265206973206e6f7420656e6f7567682062616c616e636573206f662081526020017f686f6c6465722e0000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6120b2848484612b83565b50600190509392505050565b60006120c9336113a5565b806120d957506120d83361102d565b5b15156120e457600080fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561213d57600080fd5b6001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167faf85b60d26151edd11443b704d424da6c43d0468f2235ebae3d1904dbc32304960405160405180910390a260019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561223d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561227957600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600090505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156123995742600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561235c57fe5b90600052602060002090600202016000015411151561238c5761237f838261252d565b1561238b576001810390505b5b80806001019150506122c5565b6001915050919050565b6000600960009054906101000a900460ff161515156123c157600080fd5b6123cc848484612dae565b90509392505050565b60008082840190508381101515156123ec57600080fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561243357600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249e816008612fb690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561257e57fe5b9060005260206000209060020201915042826000015410151561262f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f43757272656e7454696d65206973206e6f742067726561746572207468656e2081526020017f72656c6561736554696d6500000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600101549050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561268257fe5b906000526020600020906002020160008082016000905560018201600090555050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127386001600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061296290919063ffffffff16565b81548110151561274457fe5b9060005260206000209060020201600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110151561279e57fe5b906000526020600020906002020160008201548160000155600182015481600101559050506001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081818054905003915081612818919061312c565b508473ffffffffffffffffffffffffffffffffffffffff167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1826040518082815260200191505060405180910390a26128b981600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d590919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019250505092915050565b61291c81600861306590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b60008083831115151561297457600080fd5b82840390508091505092915050565b6000600960009054906101000a900460ff161515156129a157600080fd5b6129ab8383613115565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156129ef57600080fd5b612a4181600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60004282111515612c22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f52656c6561736554696d65206973206e6f742067726561746572207468656e2081526020017f6e6f77000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612c7483600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040805190810160405280848152602001858152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101555050508373ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b8484604051808381526020018281526020019250505060405180910390a2600190509392505050565b6000612e3f82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eca8484846129b3565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612ff257600080fd5b612ffc82826123f6565b151561300757600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156130a157600080fd5b6130ab82826123f6565b1515156130b757600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006131223384846129b3565b6001905092915050565b81548183558181111561315957600202816002028360005260206000209182019101613158919061315e565b5b505050565b61318a91905b8082111561318657600080820160009055600182016000905550600201613164565b5090565b905600a165627a7a72305820b7b581b5ca33d23654c972d2ccbff2f776cccb7294cc64861da575f09faf16b20029
Deployed Bytecode Sourcemap
15821:4431:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15415:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15415:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;15415:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9041:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9041:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20101:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20101:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7200:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7200:91:0;;;;;;;;;;;;;;;;;;;;;;;17225:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17225:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3393:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3393:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15731:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15731:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10572:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10572:323:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6046:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6046:118:0;;;;;;4332:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4332:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15964:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15964:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5299:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4549:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4549:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4654:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4654:77:0;;;;;;16589:378;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16589:378:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17705:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17705:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3747:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3747:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18439:219;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18439:219:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4449:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4449:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5835:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5835:116:0;;;;;;2920:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2920:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15565:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15565:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;15565:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11415:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11415:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16975:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16975:242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16060:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16060:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16002:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16002:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2947:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7952:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7952:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18201:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18201:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17930:263;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17930:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17484:213;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17484:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3594:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3594:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15415:83;15452:6;15485:5;15478:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15415:83;:::o;9041:244::-;9106:4;9150:1;9131:21;;:7;:21;;;;9123:30;;;;;;;;9198:5;9166:8;:20;9175:10;9166:20;;;;;;;;;;;;;;;:29;9187:7;9166:29;;;;;;;;;;;;;;;:37;;;;9240:7;9219:36;;9228:10;9219:36;;;9249:5;9219:36;;;;;;;;;;;;;;;;;;9273:4;9266:11;;9041:244;;;;:::o;20101:148::-;20176:4;3223:5;;;;;;;;;;;3209:19;;:10;:19;;;3201:28;;;;;;;;20193:4;:13;;;20207:3;20212:6;20193:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20193:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20193:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20193:26:0;;;;;;;;;;;;;;;;;20237:4;20230:11;;20101:148;;;;:::o;7200:91::-;7244:7;7271:12;;7264:19;;7200:91;:::o;17225:251::-;17320:4;17305;16396:13;:22;16410:7;16396:22;;;;;;;;;;;;;;;;;;;;;;;;;16395:23;16387:32;;;;;;;;17369:1;17341:12;:18;17354:4;17341:18;;;;;;;;;;;;;;;:25;;;;:29;17337:79;;;17387:17;17399:4;17387:11;:17::i;:::-;;17337:79;17433:35;17452:4;17458:2;17462:5;17433:18;:35::i;:::-;17426:42;;17225:251;;;;;;:::o;3393:193::-;3448:4;3480:5;;;;;;;;;;;3469:16;;:7;:16;;;3465:114;;;3509:4;3502:11;;;;3465:114;3562:5;3555:12;;3393:193;;;;:::o;15731:83::-;15772:5;15797:9;;;;;;;;;;;15790:16;;15731:83;:::o;10572:323::-;10652:4;10696:1;10677:21;;:7;:21;;;;10669:30;;;;;;;;10744:45;10778:10;10744:8;:20;10753:10;10744:20;;;;;;;;;;;;;;;:29;10765:7;10744:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;10712:8;:20;10721:10;10712:20;;;;;;;;;;;;;;;:29;10733:7;10712:29;;;;;;;;;;;;;;;:77;;;;10826:7;10805:60;;10814:10;10805:60;;;10835:8;:20;10844:10;10835:20;;;;;;;;;;;;;;;:29;10856:7;10835:29;;;;;;;;;;;;;;;;10805:60;;;;;;;;;;;;;;;;;;10883:4;10876:11;;10572:323;;;;:::o;6046:118::-;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;5715:7;;;;;;;;;;;5707:16;;;;;;;;6115:5;6105:7;;:15;;;;;;;;;;;;;;;;;;6136:20;6145:10;6136:20;;;;;;;;;;;;;;;;;;;;;;6046:118::o;4332:109::-;4388:4;4412:21;4425:7;4412:8;:12;;:21;;;;:::i;:::-;4405:28;;4332:109;;;:::o;15964:29::-;;;;;;;;;;;;;:::o;5299:78::-;5338:4;5362:7;;;;;;;;;;;5355:14;;5299:78;:::o;4549:97::-;3223:5;;;;;;;;;;;3209:19;;:10;:19;;;3201:28;;;;;;;;4616:22;4630:7;4616:13;:22::i;:::-;4549:97;:::o;4654:77::-;4698:25;4712:10;4698:13;:25::i;:::-;4654:77::o;16589:378::-;16644:7;16666:20;16776:6;16689:22;16705:5;16689:15;:22::i;:::-;16666:45;;16754:1;16726:12;:19;16739:5;16726:19;;;;;;;;;;;;;;;:26;;;;:29;16722:206;;;16783:1;16776:8;;16772:145;16788:12;:19;16801:5;16788:19;;;;;;;;;;;;;;;:26;;;;16786:1;:28;16772:145;;;16853:48;16870:12;:19;16883:5;16870:19;;;;;;;;;;;;;;;16890:1;16870:22;;;;;;;;;;;;;;;;;;;;:30;;;16853:12;:16;;:48;;;;:::i;:::-;16838:63;;16815:3;;;;;;;16772:145;;;16722:206;16947:12;16940:19;;16589:378;;;;;:::o;17705:217::-;17773:4;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;17798:13;:21;17812:6;17798:21;;;;;;;;;;;;;;;;;;;;;;;;;17790:30;;;;;;;;17855:5;17831:13;:21;17845:6;17831:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;17885:6;17876:16;;;;;;;;;;;;17910:4;17903:11;;17705:217;;;:::o;3747:181::-;3802:4;3320:1;3298:24;;:10;:24;;;;3290:33;;;;;;;;3356:8;;;;;;;;;;;3342:22;;:10;:22;;;3334:31;;;;;;;;3852:8;;;;;;;;;;;3824:37;;3845:5;;;;;;;;;;;3824:37;;;;;;;;;;;;3880:8;;;;;;;;;;;3872:5;;:16;;;;;;;;;;;;;;;;;;3918:1;3899:8;;:21;;;;;;;;;;;;;;;;;;3747:181;:::o;18439:219::-;18511:4;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;18567:3;18537:12;:20;18550:6;18537:20;;;;;;;;;;;;;;;:27;;;;:33;18528:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18609:19;18617:6;18624:3;18609:7;:19::i;:::-;;18646:4;18639:11;;18439:219;;;;:::o;4449:92::-;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;4514:19;4525:7;4514:10;:19::i;:::-;4449:92;:::o;5835:116::-;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;5536:7;;;;;;;;;;;5535:8;5527:17;;;;;;;;5905:4;5895:7;;:14;;;;;;;;;;;;;;;;;;5925:18;5932:10;5925:18;;;;;;;;;;;;;;;;;;;;;;5835:116::o;2920:20::-;;;;;;;;;;;;;:::o;15565:87::-;15604:6;15637:7;15630:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15565:87;:::o;11415:333::-;11500:4;11544:1;11525:21;;:7;:21;;;;11517:30;;;;;;;;11592:50;11626:15;11592:8;:20;11601:10;11592:20;;;;;;;;;;;;;;;:29;11613:7;11592:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;11560:8;:20;11569:10;11560:20;;;;;;;;;;;;;;;:29;11581:7;11560:29;;;;;;;;;;;;;;;:82;;;;11679:7;11658:60;;11667:10;11658:60;;;11688:8;:20;11697:10;11688:20;;;;;;;;;;;;;;;:29;11709:7;11688:29;;;;;;;;;;;;;;;;11658:60;;;;;;;;;;;;;;;;;;11736:4;11729:11;;11415:333;;;;:::o;16975:242::-;17058:4;17037:10;16396:13;:22;16410:7;16396:22;;;;;;;;;;;;;;;;;;;;;;;;;16395:23;16387:32;;;;;;;;17113:1;17079:12;:24;17092:10;17079:24;;;;;;;;;;;;;;;:31;;;;:35;17075:92;;;17132:23;17144:10;17132:11;:23::i;:::-;;17075:92;17184:25;17199:2;17203:5;17184:14;:25::i;:::-;17177:32;;16975:242;;;;;:::o;16060:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;16002:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2947:23::-;;;;;;;;;;;;;:::o;7952:131::-;8024:7;8051:8;:15;8060:5;8051:15;;;;;;;;;;;;;;;:24;8067:7;8051:24;;;;;;;;;;;;;;;;8044:31;;7952:131;;;;:::o;18201:230::-;18306:4;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;18323:36;18333:10;18345:6;18353:5;18323:9;:36::i;:::-;18370:31;18376:6;18383:5;18389:11;18370:5;:31::i;:::-;;18419:4;18412:11;;18201:230;;;;;:::o;17930:263::-;18023:4;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;18069:5;18048:9;:17;18058:6;18048:17;;;;;;;;;;;;;;;;:26;;18040:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18128:31;18134:6;18141:5;18147:11;18128:5;:31::i;:::-;;18181:4;18174:11;;17930:263;;;;;:::o;17484:213::-;17550:4;4261:20;4270:10;4261:8;:20::i;:::-;:42;;;;4284:19;4292:10;4284:7;:19::i;:::-;4261:42;4253:51;;;;;;;;17576:13;:21;17590:6;17576:21;;;;;;;;;;;;;;;;;;;;;;;;;17575:22;17567:31;;;;;;;;17633:4;17609:13;:21;17623:6;17609:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;17660:6;17653:14;;;;;;;;;;;;17685:4;17678:11;;17484:213;;;:::o;3594:145::-;3223:5;;;;;;;;;;;3209:19;;:10;:19;;;3201:28;;;;;;;;3697:1;3676:23;;:9;:23;;;;3668:32;;;;;;;;3722:9;3711:8;;:20;;;;;;;;;;;;;;;;;;3594:145;:::o;19663:430::-;19717:4;19738:11;19751:1;19738:14;;19734:330;19760:12;:20;19773:6;19760:20;;;;;;;;;;;;;;;:27;;;;19754:3;:33;19734:330;;;19859:3;19817:12;:20;19830:6;19817:20;;;;;;;;;;;;;;;19838:3;19817:25;;;;;;;;;;;;;;;;;;;;:38;;;:45;;19813:240;;;19965:20;19973:6;19981:3;19965:7;:20::i;:::-;19961:77;;;20017:1;20011:7;;;;19961:77;19813:240;19790:5;;;;;;;19734:330;;;20081:4;20074:11;;19663:430;;;;:::o;14212:160::-;14305:4;5536:7;;;;;;;;;;;5535:8;5527:17;;;;;;;;14329:35;14348:4;14354:2;14358:5;14329:18;:35::i;:::-;14322:42;;14212:160;;;;;:::o;1515:150::-;1573:7;1593:9;1609:1;1605;:5;1593:17;;1634:1;1629;:6;;1621:15;;;;;;;;1656:1;1649:8;;1515:150;;;;;:::o;2661:165::-;2733:4;2777:1;2758:21;;:7;:21;;;;2750:30;;;;;;;;2798:4;:11;;:20;2810:7;2798:20;;;;;;;;;;;;;;;;;;;;;;;;;2791:27;;2661:165;;;;:::o;4869:130::-;4929:24;4945:7;4929:8;:15;;:24;;;;:::i;:::-;4983:7;4969:22;;;;;;;;;;;;4869:130;:::o;7507:106::-;7562:7;7589:9;:16;7599:5;7589:16;;;;;;;;;;;;;;;;7582:23;;7507:106;;;:::o;19047:608::-;19110:4;19129:25;19287:21;19157:12;:20;19170:6;19157:20;;;;;;;;;;;;;;;19178:3;19157:25;;;;;;;;;;;;;;;;;;;;19129:53;;19225:3;19201:8;:21;;;:27;19193:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19311:8;:16;;;19287:40;;19347:12;:20;19360:6;19347:20;;;;;;;;;;;;;;;19368:3;19347:25;;;;;;;;;;;;;;;;;;;;;19340:32;;;;;;;;;;;;;;19411:12;:20;19424:6;19411:20;;;;;;;;;;;;;;;19432:34;19464:1;19432:12;:20;19445:6;19432:20;;;;;;;;;;;;;;;:27;;;;:31;;:34;;;;:::i;:::-;19411:56;;;;;;;;;;;;;;;;;;;;19383:12;:20;19396:6;19383:20;;;;;;;;;;;;;;;19404:3;19383:25;;;;;;;;;;;;;;;;;;;;:84;;;;;;;;;;;;;;;;;;;19508:1;19478:12;:20;19491:6;19478:20;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;:::i;:::-;;19534:6;19527:29;;;19542:13;19527:29;;;;;;;;;;;;;;;;;;19587:36;19609:13;19587:9;:17;19597:6;19587:17;;;;;;;;;;;;;;;;:21;;:36;;;;:::i;:::-;19567:9;:17;19577:6;19567:17;;;;;;;;;;;;;;;:56;;;;19643:4;19636:11;;19047:608;;;;;;:::o;4739:122::-;4796:21;4809:7;4796:8;:12;;:21;;;;:::i;:::-;4845:7;4833:20;;;;;;;;;;;;4739:122;:::o;1279:150::-;1337:7;1383:9;1370:1;1365;:6;;1357:15;;;;;;;;1399:1;1395;:5;1383:17;;1420:1;1413:8;;1279:150;;;;;:::o;14072:132::-;14147:4;5536:7;;;;;;;;;;;5535:8;5527:17;;;;;;;;14171:25;14186:2;14190:5;14171:14;:25::i;:::-;14164:32;;14072:132;;;;:::o;11970:262::-;12072:1;12058:16;;:2;:16;;;;12050:25;;;;;;;;12106:26;12126:5;12106:9;:15;12116:4;12106:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;12088:9;:15;12098:4;12088:15;;;;;;;;;;;;;;;:44;;;;12159:24;12177:5;12159:9;:13;12169:2;12159:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;12143:9;:13;12153:2;12143:13;;;;;;;;;;;;;;;:40;;;;12214:2;12199:25;;12208:4;12199:25;;;12218:5;12199:25;;;;;;;;;;;;;;;;;;11970:262;;;:::o;18666:373::-;18750:4;18789:3;18775:11;:17;18767:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18863:28;18885:5;18863:9;:17;18873:6;18863:17;;;;;;;;;;;;;;;;:21;;:28;;;;:::i;:::-;18843:9;:17;18853:6;18843:17;;;;;;;;;;;;;;;:48;;;;18902:12;:20;18915:6;18902:20;;;;;;;;;;;;;;;18929:28;;;;;;;;;18938:11;18929:28;;;;18951:5;18929:28;;;18902:57;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;18902:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18982:6;18977:32;;;18990:5;18997:11;18977:32;;;;;;;;;;;;;;;;;;;;;;;;19027:4;19020:11;;18666:373;;;;;:::o;9758:299::-;9837:4;9883:37;9914:5;9883:8;:14;9892:4;9883:14;;;;;;;;;;;;;;;:26;9898:10;9883:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;9854:8;:14;9863:4;9854:14;;;;;;;;;;;;;;;:26;9869:10;9854:26;;;;;;;;;;;;;;;:66;;;;9931:26;9941:4;9947:2;9951:5;9931:9;:26::i;:::-;9988:10;9973:54;;9982:4;9973:54;;;10000:8;:14;10009:4;10000:14;;;;;;;;;;;;;;;:26;10015:10;10000:26;;;;;;;;;;;;;;;;9973:54;;;;;;;;;;;;;;;;;;10045:4;10038:11;;9758:299;;;;;:::o;2378:189::-;2477:1;2458:21;;:7;:21;;;;2450:30;;;;;;;;2499:18;2503:4;2509:7;2499:3;:18::i;:::-;2491:27;;;;;;;;2554:5;2531:4;:11;;:20;2543:7;2531:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2378:189;;:::o;2113:186::-;2209:1;2190:21;;:7;:21;;;;2182:30;;;;;;;;2232:18;2236:4;2242:7;2232:3;:18::i;:::-;2231:19;2223:28;;;;;;;;2287:4;2264;:11;;:20;2276:7;2264:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;2113:186;;:::o;8254:140::-;8315:4;8332:32;8342:10;8354:2;8358:5;8332:9;:32::i;:::-;8382:4;8375:11;;8254:140;;;;:::o;15821:4431::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://b7b581b5ca33d23654c972d2ccbff2f776cccb7294cc64861da575f09faf16b2
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.