ERC-20
Overview
Max Total Supply
496,574.6011 GR1NCH
Holders
12
Total Transfers
-
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:
GR1NCH
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-26 */ // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Ownable { address payable _owner; event OwnershipTransferred( address payable indexed previousOwner, address payable indexed newOwner ); constructor() { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } function owner() public view returns(address) { return _owner; } modifier onlyOwner() { require(isOwner(), "Not authorised for this operation"); _; } function isOwner() public view returns(bool) { return msg.sender == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address payable newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address payable newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function ceil(uint256 a, uint256 m) internal pure returns (uint256) { uint256 c = add(a,m); uint256 d = sub(c,1); return mul(div(d,m),m); } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract BasicToken is IERC20, Context{ using SafeMath for uint256; uint256 public _totalSupply; mapping(address => uint256) balances_; mapping(address => uint256) ethBalances; mapping (address => mapping (address => uint256)) internal _allowances; uint256 public startTime = block.timestamp; // ------| Deploy Timestamp |-------- uint256 public unlockDuration = 0 minutes; // ----| Lock transfers for non-owner |----------- function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return balances_[account]; } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function checkInvestedETH(address who) public view returns (uint256) { return ethBalances[who]; } } contract StandardToken is BasicToken, Ownable { using SafeMath for uint256; function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(block.timestamp >= startTime.add(unlockDuration) || _msgSender() == owner(), "Tokens not unlocked yet"); balances_[sender] = balances_[sender].sub(amount, "ERC20: transfer amount exceeds balance"); balances_[recipient] = balances_[recipient].add(amount); emit Transfer(sender, recipient, amount); uint256 tokensToBurn = findOnePercent(amount); uint256 tokensToTransfer = amount.sub(tokensToBurn); beforeTokenTransfer(sender, recipient, amount); burn(recipient, tokensToBurn); emit Transfer(sender, recipient, tokensToTransfer); } function findOnePercent(uint256 value) public pure returns (uint256) { uint256 basePercent = 7; // % of tokens to be burned from amount of transfer uint256 roundValue = value.ceil(basePercent); uint256 onePercent = roundValue.mul(basePercent).div(100); return onePercent; } function beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } function burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); beforeTokenTransfer(account, address(0), amount); balances_[account] = balances_[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } } contract Whitelist is StandardToken { mapping(address => bool) whitelist; event AddedToWhitelist(address indexed account); event AddedToWhitelistBulk(address indexed account); event RemovedFromWhitelist(address indexed account); modifier onlyWhitelisted() { require(isWhitelisted(_msgSender()), "This address is not whitelisted"); _; } // For multiple addresses to be added in the whitelist function addToWhitelistInBulk(address[] memory _address) public onlyOwner { for (uint8 loop = 0; loop < _address.length; loop++) { whitelist[_address[loop]] = true; } } // For single address to be added in whitelist function removeFromWhitelistSingle(address _address) public onlyOwner { whitelist[_address] = false; emit RemovedFromWhitelist(_address); } // For multiple addresses to be removed from the whitelist function removeFromWhitelistInBulk(address[] memory _address) public onlyOwner { for (uint8 loop = 0; loop < _address.length; loop++) { whitelist[_address[loop]] = false; } } // Check whether an address is whitelisted or not function isWhitelisted(address _address) public view returns(bool) { return whitelist[_address]; } } contract Configurable { uint256 public cap = 300000*10**18; //---------| 300k Tokens for Presale |--------- uint256 public basePrice = 5000*10**18; //-----| 1 ETH = 5000 Tokens |--------- uint256 public tokensSold = 0; uint256 public tokenReserve = 500000*10**18; //-----------| 500k Tokens Total Supply |------ uint256 public remainingTokens = 0; } contract CrowdsaleToken is Whitelist, Configurable { using SafeMath for uint256; enum Phases {none, start, end} Phases currentPhase; constructor() { currentPhase = Phases.none; balances_[owner()] = balances_[owner()].add(tokenReserve); _totalSupply = _totalSupply.add(tokenReserve); remainingTokens = cap; emit Transfer(address(this), owner(), tokenReserve); } receive() external payable { // require(isWhitelisted(_msgSender()) == true, "This address is not whitelisted"); require(currentPhase == Phases.start, "The coin offering has not started yet"); require(msg.value <= 2e18 && msg.value >= 3e17, "You can send at least 0.3 ETH but not more than 2 ETH"); require(remainingTokens > 0, "Presale token limit reached"); uint256 weiAmount = msg.value; uint256 tokens = weiAmount.mul(basePrice).div(1 ether); uint256 returnWei = 0; ethBalances[_msgSender()] = ethBalances[_msgSender()].add(weiAmount); ethBalances[address(this)] = ethBalances[address(this)].add(weiAmount); require(ethBalances[_msgSender()] <= 2e18, "Cannot send more than 2 ETH"); require(ethBalances[address(this)] <= 60e18, "Target amount of 60 ETH reached"); if(tokensSold.add(tokens) > cap){ revert("Exceeding limit of presale tokens"); } tokensSold = tokensSold.add(tokens); // counting tokens sold remainingTokens = cap.sub(tokensSold); if(returnWei > 0){ _msgSender().transfer(returnWei); emit Transfer(address(this), _msgSender(), returnWei); } uint256 tokensToBurn = tokens.mul(70).div(1000); // tokens burned with each pre-sale purchase balances_[owner()] = balances_[owner()].sub(tokens, "ERC20: transfer amount exceeds balance"); balances_[owner()] = balances_[owner()].sub(tokensToBurn, "ERC20: transfer amount exceeds balance"); _totalSupply = _totalSupply.sub(tokensToBurn, 'Overflow while burning tokens'); balances_[_msgSender()] = balances_[_msgSender()].add(tokens); emit Transfer(address(this), _msgSender(), tokens); emit Transfer(address(this), address(0x000000000000000000000000000000000000dEaD) , tokensToBurn); _owner.transfer(weiAmount); } function startCoinOffering() public onlyOwner { require(currentPhase != Phases.end, "The coin offering has ended"); currentPhase = Phases.start; } function endCoinOffering() internal { currentPhase = Phases.end; _owner.transfer(address(this).balance); } function finalizeCoinOffering() public onlyOwner { require(currentPhase != Phases.end, "The coin offering has ended"); endCoinOffering(); } } contract GR1NCH is CrowdsaleToken { string public name = "GR1NCHFY"; string public symbol = "GR1NCH"; uint32 public decimals = 18; uint256 public basePercent = 100; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AddedToWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AddedToWhitelistBulk","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address payable","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address payable","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RemovedFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"addToWhitelistInBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"checkInvestedETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeCoinOffering","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"findOnePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"removeFromWhitelistInBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromWhitelistSingle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startCoinOffering","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052426004556000600555693f870857a3e0e380000060085569010f0cf064dd592000006009556000600a556969e10de76676d0800000600b556000600c556040518060400160405280600881526020017f4752314e43484659000000000000000000000000000000000000000000000000815250600e90805190602001906200008e9291906200040d565b506040518060400160405280600681526020017f4752314e43480000000000000000000000000000000000000000000000000000815250600f9080519060200190620000dc9291906200040d565b506012601060006101000a81548163ffffffff021916908363ffffffff16021790555060646011553480156200011157600080fd5b5033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548160ff02191690836002811115620001f057fe5b02179055506200025f600b5460016000620002106200035a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200038460201b620016a81790919060201c565b60016000620002736200035a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002cf600b546000546200038460201b620016a81790919060201c565b600081905550600854600c81905550620002ee6200035a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a3620004c3565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008082840190508381101562000403576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000445576000855562000491565b82601f106200046057805160ff191683800117855562000491565b8280016001018555821562000491579182015b828111156200049057825182559160200191906001019062000473565b5b509050620004a09190620004a4565b5090565b5b80821115620004bf576000816000905550600101620004a5565b5090565b6131c980620004d36000396000f3fe6080604052600436106101e75760003560e01c80638a1fcd6011610102578063c5ac0ded11610095578063dcd9d7b111610064578063dcd9d7b11461141e578063dd62ed3e14611435578063ee39190e146114ba578063f2fde38b1461157f57610b93565b8063c5ac0ded1461134c578063c7876ea414611377578063cbcb3171146113a2578063d89f17ef146113cd57610b93565b8063a457c2d7116100d1578063a457c2d7146111f0578063a6a6860614611261578063a9059cbb146112b0578063bf5839031461132157610b93565b80638a1fcd60146110c75780638da5cb5b146110f25780638f32d59b1461113357806395d89b411461116057610b93565b80633af32abf1161017a578063518ab2a811610149578063518ab2a814610ff557806370a0823114611020578063715018a61461108557806378e979251461109c57610b93565b80633af32abf14610ee75780633c4badb014610f4e5780633eaaf86b14610fb35780634e8ee2e514610fde57610b93565b806323b872dd116101b657806323b872dd14610d89578063313ce56714610e1a578063355274ea14610e4b5780633950935114610e7657610b93565b806306fdde0314610b98578063095ea7b314610c28578063128c127e14610c9957806318160ddd14610d5e57610b93565b36610b9357600160028111156101f957fe5b600d60009054906101000a900460ff16600281111561021457fe5b1461026a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130416025913960400191505060405180910390fd5b671bc16d674ec80000341115801561028a5750670429d069189e00003410155b6102df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806130d06035913960400191505060405180910390fd5b6000600c5411610357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f50726573616c6520746f6b656e206c696d69742072656163686564000000000081525060200191505060405180910390fd5b6000349050600061038d670de0b6b3a764000061037f600954856115d090919063ffffffff16565b61165690919063ffffffff16565b905060006103ea83600260006103a16116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b600260006103f66116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061048683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550671bc16d674ec80000600260006104de6116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742073656e64206d6f7265207468616e203220455448000000000081525060200191505060405180910390fd5b680340aad21b3b700000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561064b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54617267657420616d6f756e74206f662036302045544820726561636865640081525060200191505060405180910390fd5b60085461066383600a546116a890919063ffffffff16565b11156106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130206021913960400191505060405180910390fd5b6106cf82600a546116a890919063ffffffff16565b600a819055506106ec600a5460085461173090919063ffffffff16565b600c8190555060008111156107b6576107036116a0565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610748573d6000803e3d6000fd5b506107516116a0565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b60006107e06103e86107d26046866115d090919063ffffffff16565b61165690919063ffffffff16565b905061085583604051806060016040528060268152602001612ffa602691396001600061080b61177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6001600061086161177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061091281604051806060016040528060268152602001612ffa60269139600160006108c861177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6001600061091e61177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506109a8816040518060400160405280601d81526020017f4f766572666c6f77207768696c65206275726e696e6720746f6b656e730000008152506000546117a49092919063ffffffff16565b600081905550610a0783600160006109be6116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b60016000610a136116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a596116a0565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a361dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015610b8c573d6000803e3d6000fd5b5050505050005b600080fd5b348015610ba457600080fd5b50610bad611864565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bed578082015181840152602081019050610bd2565b50505050905090810190601f168015610c1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3457600080fd5b50610c8160048036036040811015610c4b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611902565b60405180821515815260200191505060405180910390f35b348015610ca557600080fd5b50610d5c60048036036020811015610cbc57600080fd5b8101908080359060200190640100000000811115610cd957600080fd5b820183602082011115610ceb57600080fd5b80359060200191846020830284011164010000000083111715610d0d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611920565b005b348015610d6a57600080fd5b50610d73611a0b565b6040518082815260200191505060405180910390f35b348015610d9557600080fd5b50610e0260048036036060811015610dac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a14565b60405180821515815260200191505060405180910390f35b348015610e2657600080fd5b50610e2f611aed565b604051808263ffffffff16815260200191505060405180910390f35b348015610e5757600080fd5b50610e60611b03565b6040518082815260200191505060405180910390f35b348015610e8257600080fd5b50610ecf60048036036040811015610e9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b09565b60405180821515815260200191505060405180910390f35b348015610ef357600080fd5b50610f3660048036036020811015610f0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bbc565b60405180821515815260200191505060405180910390f35b348015610f5a57600080fd5b50610f9d60048036036020811015610f7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c12565b6040518082815260200191505060405180910390f35b348015610fbf57600080fd5b50610fc8611c5b565b6040518082815260200191505060405180910390f35b348015610fea57600080fd5b50610ff3611c61565b005b34801561100157600080fd5b5061100a611d7f565b6040518082815260200191505060405180910390f35b34801561102c57600080fd5b5061106f6004803603602081101561104357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d85565b6040518082815260200191505060405180910390f35b34801561109157600080fd5b5061109a611dce565b005b3480156110a857600080fd5b506110b1611eec565b6040518082815260200191505060405180910390f35b3480156110d357600080fd5b506110dc611ef2565b6040518082815260200191505060405180910390f35b3480156110fe57600080fd5b5061110761177a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561113f57600080fd5b50611148611ef8565b60405180821515815260200191505060405180910390f35b34801561116c57600080fd5b50611175611f50565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111b557808201518184015260208101905061119a565b50505050905090810190601f1680156111e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156111fc57600080fd5b506112496004803603604081101561121357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fee565b60405180821515815260200191505060405180910390f35b34801561126d57600080fd5b5061129a6004803603602081101561128457600080fd5b81019080803590602001909291905050506120bb565b6040518082815260200191505060405180910390f35b3480156112bc57600080fd5b50611309600480360360408110156112d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061210e565b60405180821515815260200191505060405180910390f35b34801561132d57600080fd5b5061133661212c565b6040518082815260200191505060405180910390f35b34801561135857600080fd5b50611361612132565b6040518082815260200191505060405180910390f35b34801561138357600080fd5b5061138c612138565b6040518082815260200191505060405180910390f35b3480156113ae57600080fd5b506113b761213e565b6040518082815260200191505060405180910390f35b3480156113d957600080fd5b5061141c600480360360208110156113f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612144565b005b34801561142a57600080fd5b5061143361223f565b005b34801561144157600080fd5b506114a46004803603604081101561145857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612341565b6040518082815260200191505060405180910390f35b3480156114c657600080fd5b5061157d600480360360208110156114dd57600080fd5b81019080803590602001906401000000008111156114fa57600080fd5b82018360208201111561150c57600080fd5b8035906020019184602083028401116401000000008311171561152e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506123c8565b005b34801561158b57600080fd5b506115ce600480360360208110156115a257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b3565b005b6000808314156115e35760009050611650565b60008284029050828482816115f457fe5b041461164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130666021913960400191505060405180910390fd5b809150505b92915050565b600061169883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061251c565b905092915050565b600033905090565b600080828401905083811015611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061177283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117a4565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000838311158290611851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118165780820151818401526020810190506117fb565b50505050905090810190601f1680156118435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118fa5780601f106118cf576101008083540402835291602001916118fa565b820191906000526020600020905b8154815290600101906020018083116118dd57829003601f168201915b505050505081565b600061191661190f6116a0565b84846125e2565b6001905092915050565b611928611ef8565b61197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b60005b81518160ff161015611a0757600060076000848460ff16815181106119a157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611980565b5050565b60008054905090565b6000611a218484846127d9565b611ae284611a2d6116a0565b611add8560405180606001604052806028815260200161308760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611a936116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6125e2565b600190509392505050565b601060009054906101000a900463ffffffff1681565b60085481565b6000611bb2611b166116a0565b84611bad8560036000611b276116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b6125e2565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005481565b611c69611ef8565b611cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b600280811115611cca57fe5b600d60009054906101000a900460ff166002811115611ce557fe5b1415611d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54686520636f696e206f66666572696e672068617320656e646564000000000081525060200191505060405180910390fd5b6001600d60006101000a81548160ff02191690836002811115611d7857fe5b0217905550565b600a5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dd6611ef8565b611e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60045481565b60055481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fe65780601f10611fbb57610100808354040283529160200191611fe6565b820191906000526020600020905b815481529060010190602001808311611fc957829003601f168201915b505050505081565b60006120b1611ffb6116a0565b846120ac8560405180606001604052806025815260200161316f60259139600360006120256116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6125e2565b6001905092915050565b6000806007905060006120d78285612c0390919063ffffffff16565b9050600061210160646120f385856115d090919063ffffffff16565b61165690919063ffffffff16565b9050809350505050919050565b600061212261211b6116a0565b84846127d9565b6001905092915050565b600c5481565b60115481565b60095481565b600b5481565b61214c611ef8565b6121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a250565b612247611ef8565b61229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b6002808111156122a857fe5b600d60009054906101000a900460ff1660028111156122c357fe5b1415612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54686520636f696e206f66666572696e672068617320656e646564000000000081525060200191505060405180910390fd5b61233f612c3e565b565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123d0611ef8565b612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b60005b81518160ff1610156124af57600160076000848460ff168151811061244957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612428565b5050565b6124bb611ef8565b612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b61251981612ccd565b50565b600080831182906125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561258d578082015181840152602081019050612572565b50505050905090810190601f1680156125ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816125d457fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061314b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612fd86022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806131056025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612f936023913960400191505060405180910390fd5b6128fc6005546004546116a890919063ffffffff16565b42101580612943575061290d61177a565b73ffffffffffffffffffffffffffffffffffffffff1661292b6116a0565b73ffffffffffffffffffffffffffffffffffffffff16145b6129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e73206e6f7420756e6c6f636b65642079657400000000000000000081525060200191505060405180910390fd5b612a2181604051806060016040528060268152602001612ffa60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ab681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36000612b69826120bb565b90506000612b80828461173090919063ffffffff16565b9050612b8d858585612dc7565b612b978483612dcc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b600080612c1084846116a8565b90506000612c1f826001611730565b9050612c34612c2e8286611656565b856115d0565b9250505092915050565b6002600d60006101000a81548160ff02191690836002811115612c5d57fe5b0217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612cca573d6000803e3d6000fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d0757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130af6021913960400191505060405180910390fd5b612e5e82600083612dc7565b612eca81604051806060016040528060228152602001612fb660229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f228160005461173090919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365457863656564696e67206c696d6974206f662070726573616c6520746f6b656e7354686520636f696e206f66666572696e6720686173206e6f74207374617274656420796574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f2061646472657373596f752063616e2073656e64206174206c6561737420302e332045544820627574206e6f74206d6f7265207468616e20322045544845524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e6f7420617574686f726973656420666f722074686973206f7065726174696f6e45524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209aa19535c414b90e85673059fc9a903e28b5d8d635f8be0372e775e522aef0c164736f6c63430007060033
Deployed Bytecode
0x6080604052600436106101e75760003560e01c80638a1fcd6011610102578063c5ac0ded11610095578063dcd9d7b111610064578063dcd9d7b11461141e578063dd62ed3e14611435578063ee39190e146114ba578063f2fde38b1461157f57610b93565b8063c5ac0ded1461134c578063c7876ea414611377578063cbcb3171146113a2578063d89f17ef146113cd57610b93565b8063a457c2d7116100d1578063a457c2d7146111f0578063a6a6860614611261578063a9059cbb146112b0578063bf5839031461132157610b93565b80638a1fcd60146110c75780638da5cb5b146110f25780638f32d59b1461113357806395d89b411461116057610b93565b80633af32abf1161017a578063518ab2a811610149578063518ab2a814610ff557806370a0823114611020578063715018a61461108557806378e979251461109c57610b93565b80633af32abf14610ee75780633c4badb014610f4e5780633eaaf86b14610fb35780634e8ee2e514610fde57610b93565b806323b872dd116101b657806323b872dd14610d89578063313ce56714610e1a578063355274ea14610e4b5780633950935114610e7657610b93565b806306fdde0314610b98578063095ea7b314610c28578063128c127e14610c9957806318160ddd14610d5e57610b93565b36610b9357600160028111156101f957fe5b600d60009054906101000a900460ff16600281111561021457fe5b1461026a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130416025913960400191505060405180910390fd5b671bc16d674ec80000341115801561028a5750670429d069189e00003410155b6102df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806130d06035913960400191505060405180910390fd5b6000600c5411610357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f50726573616c6520746f6b656e206c696d69742072656163686564000000000081525060200191505060405180910390fd5b6000349050600061038d670de0b6b3a764000061037f600954856115d090919063ffffffff16565b61165690919063ffffffff16565b905060006103ea83600260006103a16116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b600260006103f66116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061048683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550671bc16d674ec80000600260006104de6116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742073656e64206d6f7265207468616e203220455448000000000081525060200191505060405180910390fd5b680340aad21b3b700000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561064b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54617267657420616d6f756e74206f662036302045544820726561636865640081525060200191505060405180910390fd5b60085461066383600a546116a890919063ffffffff16565b11156106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130206021913960400191505060405180910390fd5b6106cf82600a546116a890919063ffffffff16565b600a819055506106ec600a5460085461173090919063ffffffff16565b600c8190555060008111156107b6576107036116a0565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610748573d6000803e3d6000fd5b506107516116a0565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b60006107e06103e86107d26046866115d090919063ffffffff16565b61165690919063ffffffff16565b905061085583604051806060016040528060268152602001612ffa602691396001600061080b61177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6001600061086161177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061091281604051806060016040528060268152602001612ffa60269139600160006108c861177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6001600061091e61177a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506109a8816040518060400160405280601d81526020017f4f766572666c6f77207768696c65206275726e696e6720746f6b656e730000008152506000546117a49092919063ffffffff16565b600081905550610a0783600160006109be6116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b60016000610a136116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a596116a0565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a361dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015610b8c573d6000803e3d6000fd5b5050505050005b600080fd5b348015610ba457600080fd5b50610bad611864565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bed578082015181840152602081019050610bd2565b50505050905090810190601f168015610c1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3457600080fd5b50610c8160048036036040811015610c4b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611902565b60405180821515815260200191505060405180910390f35b348015610ca557600080fd5b50610d5c60048036036020811015610cbc57600080fd5b8101908080359060200190640100000000811115610cd957600080fd5b820183602082011115610ceb57600080fd5b80359060200191846020830284011164010000000083111715610d0d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611920565b005b348015610d6a57600080fd5b50610d73611a0b565b6040518082815260200191505060405180910390f35b348015610d9557600080fd5b50610e0260048036036060811015610dac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a14565b60405180821515815260200191505060405180910390f35b348015610e2657600080fd5b50610e2f611aed565b604051808263ffffffff16815260200191505060405180910390f35b348015610e5757600080fd5b50610e60611b03565b6040518082815260200191505060405180910390f35b348015610e8257600080fd5b50610ecf60048036036040811015610e9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b09565b60405180821515815260200191505060405180910390f35b348015610ef357600080fd5b50610f3660048036036020811015610f0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bbc565b60405180821515815260200191505060405180910390f35b348015610f5a57600080fd5b50610f9d60048036036020811015610f7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c12565b6040518082815260200191505060405180910390f35b348015610fbf57600080fd5b50610fc8611c5b565b6040518082815260200191505060405180910390f35b348015610fea57600080fd5b50610ff3611c61565b005b34801561100157600080fd5b5061100a611d7f565b6040518082815260200191505060405180910390f35b34801561102c57600080fd5b5061106f6004803603602081101561104357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d85565b6040518082815260200191505060405180910390f35b34801561109157600080fd5b5061109a611dce565b005b3480156110a857600080fd5b506110b1611eec565b6040518082815260200191505060405180910390f35b3480156110d357600080fd5b506110dc611ef2565b6040518082815260200191505060405180910390f35b3480156110fe57600080fd5b5061110761177a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561113f57600080fd5b50611148611ef8565b60405180821515815260200191505060405180910390f35b34801561116c57600080fd5b50611175611f50565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111b557808201518184015260208101905061119a565b50505050905090810190601f1680156111e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156111fc57600080fd5b506112496004803603604081101561121357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fee565b60405180821515815260200191505060405180910390f35b34801561126d57600080fd5b5061129a6004803603602081101561128457600080fd5b81019080803590602001909291905050506120bb565b6040518082815260200191505060405180910390f35b3480156112bc57600080fd5b50611309600480360360408110156112d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061210e565b60405180821515815260200191505060405180910390f35b34801561132d57600080fd5b5061133661212c565b6040518082815260200191505060405180910390f35b34801561135857600080fd5b50611361612132565b6040518082815260200191505060405180910390f35b34801561138357600080fd5b5061138c612138565b6040518082815260200191505060405180910390f35b3480156113ae57600080fd5b506113b761213e565b6040518082815260200191505060405180910390f35b3480156113d957600080fd5b5061141c600480360360208110156113f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612144565b005b34801561142a57600080fd5b5061143361223f565b005b34801561144157600080fd5b506114a46004803603604081101561145857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612341565b6040518082815260200191505060405180910390f35b3480156114c657600080fd5b5061157d600480360360208110156114dd57600080fd5b81019080803590602001906401000000008111156114fa57600080fd5b82018360208201111561150c57600080fd5b8035906020019184602083028401116401000000008311171561152e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506123c8565b005b34801561158b57600080fd5b506115ce600480360360208110156115a257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b3565b005b6000808314156115e35760009050611650565b60008284029050828482816115f457fe5b041461164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130666021913960400191505060405180910390fd5b809150505b92915050565b600061169883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061251c565b905092915050565b600033905090565b600080828401905083811015611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061177283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117a4565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000838311158290611851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118165780820151818401526020810190506117fb565b50505050905090810190601f1680156118435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118fa5780601f106118cf576101008083540402835291602001916118fa565b820191906000526020600020905b8154815290600101906020018083116118dd57829003601f168201915b505050505081565b600061191661190f6116a0565b84846125e2565b6001905092915050565b611928611ef8565b61197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b60005b81518160ff161015611a0757600060076000848460ff16815181106119a157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611980565b5050565b60008054905090565b6000611a218484846127d9565b611ae284611a2d6116a0565b611add8560405180606001604052806028815260200161308760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611a936116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6125e2565b600190509392505050565b601060009054906101000a900463ffffffff1681565b60085481565b6000611bb2611b166116a0565b84611bad8560036000611b276116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b6125e2565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005481565b611c69611ef8565b611cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b600280811115611cca57fe5b600d60009054906101000a900460ff166002811115611ce557fe5b1415611d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54686520636f696e206f66666572696e672068617320656e646564000000000081525060200191505060405180910390fd5b6001600d60006101000a81548160ff02191690836002811115611d7857fe5b0217905550565b600a5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dd6611ef8565b611e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60045481565b60055481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fe65780601f10611fbb57610100808354040283529160200191611fe6565b820191906000526020600020905b815481529060010190602001808311611fc957829003601f168201915b505050505081565b60006120b1611ffb6116a0565b846120ac8560405180606001604052806025815260200161316f60259139600360006120256116a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b6125e2565b6001905092915050565b6000806007905060006120d78285612c0390919063ffffffff16565b9050600061210160646120f385856115d090919063ffffffff16565b61165690919063ffffffff16565b9050809350505050919050565b600061212261211b6116a0565b84846127d9565b6001905092915050565b600c5481565b60115481565b60095481565b600b5481565b61214c611ef8565b6121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a250565b612247611ef8565b61229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b6002808111156122a857fe5b600d60009054906101000a900460ff1660028111156122c357fe5b1415612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54686520636f696e206f66666572696e672068617320656e646564000000000081525060200191505060405180910390fd5b61233f612c3e565b565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123d0611ef8565b612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b60005b81518160ff1610156124af57600160076000848460ff168151811061244957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612428565b5050565b6124bb611ef8565b612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061312a6021913960400191505060405180910390fd5b61251981612ccd565b50565b600080831182906125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561258d578082015181840152602081019050612572565b50505050905090810190601f1680156125ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816125d457fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061314b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612fd86022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806131056025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612f936023913960400191505060405180910390fd5b6128fc6005546004546116a890919063ffffffff16565b42101580612943575061290d61177a565b73ffffffffffffffffffffffffffffffffffffffff1661292b6116a0565b73ffffffffffffffffffffffffffffffffffffffff16145b6129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e73206e6f7420756e6c6f636b65642079657400000000000000000081525060200191505060405180910390fd5b612a2181604051806060016040528060268152602001612ffa60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ab681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116a890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36000612b69826120bb565b90506000612b80828461173090919063ffffffff16565b9050612b8d858585612dc7565b612b978483612dcc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b600080612c1084846116a8565b90506000612c1f826001611730565b9050612c34612c2e8286611656565b856115d0565b9250505092915050565b6002600d60006101000a81548160ff02191690836002811115612c5d57fe5b0217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612cca573d6000803e3d6000fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d0757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130af6021913960400191505060405180910390fd5b612e5e82600083612dc7565b612eca81604051806060016040528060228152602001612fb660229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a49092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f228160005461173090919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365457863656564696e67206c696d6974206f662070726573616c6520746f6b656e7354686520636f696e206f66666572696e6720686173206e6f74207374617274656420796574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f2061646472657373596f752063616e2073656e64206174206c6561737420302e332045544820627574206e6f74206d6f7265207468616e20322045544845524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e6f7420617574686f726973656420666f722074686973206f7065726174696f6e45524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209aa19535c414b90e85673059fc9a903e28b5d8d635f8be0372e775e522aef0c164736f6c63430007060033
Deployed Bytecode Sourcemap
18080:187:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15782:12;15766:28;;;;;;;;:12;;;;;;;;;;;:28;;;;;;;;;15758:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15868:4;15855:9;:17;;:38;;;;;15889:4;15876:9;:17;;15855:38;15847:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15988:1;15970:15;;:19;15962:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16034:17;16054:9;16034:29;;16074:14;16091:37;16120:7;16091:24;16105:9;;16091;:13;;:24;;;;:::i;:::-;:28;;:37;;;;:::i;:::-;16074:54;;16139:17;16201:40;16231:9;16201:11;:25;16213:12;:10;:12::i;:::-;16201:25;;;;;;;;;;;;;;;;:29;;:40;;;;:::i;:::-;16173:11;:25;16185:12;:10;:12::i;:::-;16173:25;;;;;;;;;;;;;;;:68;;;;16281:41;16312:9;16281:11;:26;16301:4;16281:26;;;;;;;;;;;;;;;;:30;;:41;;;;:::i;:::-;16252:11;:26;16272:4;16252:26;;;;;;;;;;;;;;;:70;;;;16372:4;16343:11;:25;16355:12;:10;:12::i;:::-;16343:25;;;;;;;;;;;;;;;;:33;;16335:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16457:5;16427:11;:26;16447:4;16427:26;;;;;;;;;;;;;;;;:35;;16419:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16539:3;;16514:22;16529:6;16514:10;;:14;;:22;;;;:::i;:::-;:28;16511:102;;;16558:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16511:102;16638:22;16653:6;16638:10;;:14;;:22;;;;:::i;:::-;16625:10;:35;;;;16713:19;16721:10;;16713:3;;:7;;:19;;;;:::i;:::-;16695:15;:37;;;;16760:1;16748:9;:13;16745:144;;;16777:12;:10;:12::i;:::-;:21;;:32;16799:9;16777:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16853:12;:10;:12::i;:::-;16829:48;;16846:4;16829:48;;;16867:9;16829:48;;;;;;;;;;;;;;;;;;16745:144;16901:20;16924:24;16943:4;16924:14;16935:2;16924:6;:10;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;16901:47;;17027:72;17050:6;17027:72;;;;;;;;;;;;;;;;;:9;:18;17037:7;:5;:7::i;:::-;17027:18;;;;;;;;;;;;;;;;:22;;:72;;;;;:::i;:::-;17006:9;:18;17016:7;:5;:7::i;:::-;17006:18;;;;;;;;;;;;;;;:93;;;;17131:78;17154:12;17131:78;;;;;;;;;;;;;;;;;:9;:18;17141:7;:5;:7::i;:::-;17131:18;;;;;;;;;;;;;;;;:22;;:78;;;;;:::i;:::-;17110:9;:18;17120:7;:5;:7::i;:::-;17110:18;;;;;;;;;;;;;;;:99;;;;17237:63;17254:12;17237:63;;;;;;;;;;;;;;;;;:12;;:16;;:63;;;;;:::i;:::-;17222:12;:78;;;;17337:35;17365:6;17337:9;:23;17347:12;:10;:12::i;:::-;17337:23;;;;;;;;;;;;;;;;:27;;:35;;;;:::i;:::-;17311:9;:23;17321:12;:10;:12::i;:::-;17311:23;;;;;;;;;;;;;;;:61;;;;17414:12;:10;:12::i;:::-;17390:45;;17407:4;17390:45;;;17428:6;17390:45;;;;;;;;;;;;;;;;;;17483:42;17451:91;;17468:4;17451:91;;;17529:12;17451:91;;;;;;;;;;;;;;;;;;17555:6;;;;;;;;;;;:15;;:26;17571:9;17555:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15626:1963;;;;18080:187;;;;;18121:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9571:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14398:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9907:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11388:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18197:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14821:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10496:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14671:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10999:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9176:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17597:169;;;;;;;;;;;;;:::i;:::-;;15010:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10015:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3708:140;;;;;;;;;;;;;:::i;:::-;;9379:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9468:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3408:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3609:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18159:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10722:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12606:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11205:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15144:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18231:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14920:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15046:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14166:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17911;;;;;;;;;;;;;:::i;:::-;;9748:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13904:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3856:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5981:471;6039:7;6289:1;6284;:6;6280:47;;;6314:1;6307:8;;;;6280:47;6339:9;6355:1;6351;:5;6339:17;;6384:1;6379;6375;:5;;;;;;:10;6367:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6443:1;6436:8;;;5981:471;;;;;:::o;6928:132::-;6986:7;7013:39;7017:1;7020;7013:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7006:46;;6928:132;;;;:::o;101:106::-;154:15;189:10;182:17;;101:106;:::o;4448:181::-;4506:7;4526:9;4542:1;4538;:5;4526:17;;4567:1;4562;:6;;4554:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4620:1;4613:8;;;4448:181;;;;:::o;5091:136::-;5149:7;5176:43;5180:1;5183;5176:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5169:50;;5091:136;;;;:::o;3408:78::-;3445:7;3472:6;;;;;;;;;;;3465:13;;3408:78;:::o;5530:192::-;5616:7;5649:1;5644;:6;;5652:12;5636:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5676:9;5692:1;5688;:5;5676:17;;5713:1;5706:8;;;5530:192;;;;;:::o;18121:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9571:169::-;9654:4;9671:39;9680:12;:10;:12::i;:::-;9694:7;9703:6;9671:8;:39::i;:::-;9728:4;9721:11;;9571:169;;;;:::o;14398:212::-;3534:9;:7;:9::i;:::-;3526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14493:10:::1;14488:113;14516:8;:15;14509:4;:22;;;14488:113;;;14584:5;14556:9;:25;14566:8;14575:4;14566:14;;;;;;;;;;;;;;;;14556:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;14533:6;;;;;;;14488:113;;;;14398:212:::0;:::o;9907:100::-;9960:7;9987:12;;9980:19;;9907:100;:::o;11388:321::-;11494:4;11511:36;11521:6;11529:9;11540:6;11511:9;:36::i;:::-;11558:121;11567:6;11575:12;:10;:12::i;:::-;11589:89;11627:6;11589:89;;;;;;;;;;;;;;;;;:11;:19;11601:6;11589:19;;;;;;;;;;;;;;;:33;11609:12;:10;:12::i;:::-;11589:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11558:8;:121::i;:::-;11697:4;11690:11;;11388:321;;;;;:::o;18197:27::-;;;;;;;;;;;;;:::o;14821:34::-;;;;:::o;10496:218::-;10584:4;10601:83;10610:12;:10;:12::i;:::-;10624:7;10633:50;10672:10;10633:11;:25;10645:12;:10;:12::i;:::-;10633:25;;;;;;;;;;;;;;;:34;10659:7;10633:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10601:8;:83::i;:::-;10702:4;10695:11;;10496:218;;;;:::o;14671:112::-;14732:4;14756:9;:19;14766:8;14756:19;;;;;;;;;;;;;;;;;;;;;;;;;14749:26;;14671:112;;;:::o;10999:111::-;11059:7;11086:11;:16;11098:3;11086:16;;;;;;;;;;;;;;;;11079:23;;10999:111;;;:::o;9176:27::-;;;;:::o;17597:169::-;3534:9;:7;:9::i;:::-;3526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17678:10:::1;17662:26:::0;::::1;;;;;;;:12;;;;;;;;;;;:26;;;;;;;;;;17654:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17746:12;17731;;:27;;;;;;;;;;;;;;;;;;;;;;;;17597:169::o:0;15010:29::-;;;;:::o;10015:119::-;10081:7;10108:9;:18;10118:7;10108:18;;;;;;;;;;;;;;;;10101:25;;10015:119;;;:::o;3708:140::-;3534:9;:7;:9::i;:::-;3526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3807:1:::1;3770:40;;3791:6;;;;;;;;;;;3770:40;;;;;;;;;;;;3838:1;3821:6;;:19;;;;;;;;;;;;;;;;;;3708:140::o:0;9379:42::-;;;;:::o;9468:41::-;;;;:::o;3609:91::-;3648:4;3686:6;;;;;;;;;;;3672:20;;:10;:20;;;3665:27;;3609:91;:::o;18159:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10722:269::-;10815:4;10832:129;10841:12;:10;:12::i;:::-;10855:7;10864:96;10903:15;10864:96;;;;;;;;;;;;;;;;;:11;:25;10876:12;:10;:12::i;:::-;10864:25;;;;;;;;;;;;;;;:34;10890:7;10864:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;10832:8;:129::i;:::-;10979:4;10972:11;;10722:269;;;;:::o;12606:315::-;12666:7;12687:19;12709:1;12687:23;;12773:18;12794:23;12805:11;12794:5;:10;;:23;;;;:::i;:::-;12773:44;;12828:18;12849:36;12881:3;12849:27;12864:11;12849:10;:14;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;12828:57;;12903:10;12896:17;;;;;12606:315;;;:::o;11205:175::-;11291:4;11308:42;11318:12;:10;:12::i;:::-;11332:9;11343:6;11308:9;:42::i;:::-;11368:4;11361:11;;11205:175;;;;:::o;15144:34::-;;;;:::o;18231:32::-;;;;:::o;14920:38::-;;;;:::o;15046:43::-;;;;:::o;14166:162::-;3534:9;:7;:9::i;:::-;3526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14269:5:::1;14247:9;:19;14257:8;14247:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;14311:8;14290:30;;;;;;;;;;;;14166:162:::0;:::o;17911:::-;3534:9;:7;:9::i;:::-;3526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17995:10:::1;17979:26:::0;::::1;;;;;;;:12;;;;;;;;;;;:26;;;;;;;;;;17971:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18048:17;:15;:17::i;:::-;17911:162::o:0;9748:151::-;9837:7;9864:11;:18;9876:5;9864:18;;;;;;;;;;;;;;;:27;9883:7;9864:27;;;;;;;;;;;;;;;;9857:34;;9748:151;;;;:::o;13904:204::-;3534:9;:7;:9::i;:::-;3526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13994:10:::1;13989:112;14017:8;:15;14010:4;:22;;;13989:112;;;14085:4;14057:9;:25;14067:8;14076:4;14067:14;;;;;;;;;;;;;;;;14057:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;14034:6;;;;;;;13989:112;;;;13904:204:::0;:::o;3856:117::-;3534:9;:7;:9::i;:::-;3526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3937:28:::1;3956:8;3937:18;:28::i;:::-;3856:117:::0;:::o;7556:278::-;7642:7;7674:1;7670;:5;7677:12;7662:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7701:9;7717:1;7713;:5;;;;;;7701:17;;7825:1;7818:8;;;7556:278;;;;;:::o;10142:346::-;10261:1;10244:19;;:5;:19;;;;10236:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10342:1;10323:21;;:7;:21;;;;10315:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10426:6;10396:11;:18;10408:5;10396:18;;;;;;;;;;;;;;;:27;10415:7;10396:27;;;;;;;;;;;;;;;:36;;;;10464:7;10448:32;;10457:5;10448:32;;;10473:6;10448:32;;;;;;;;;;;;;;;;;;10142:346;;;:::o;11717:881::-;11841:1;11823:20;;:6;:20;;;;11815:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11925:1;11904:23;;:9;:23;;;;11896:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12005:29;12019:14;;12005:9;;:13;;:29;;;;:::i;:::-;11986:15;:48;;:75;;;;12054:7;:5;:7::i;:::-;12038:23;;:12;:10;:12::i;:::-;:23;;;11986:75;11978:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12122:71;12144:6;12122:71;;;;;;;;;;;;;;;;;:9;:17;12132:6;12122:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12102:9;:17;12112:6;12102:17;;;;;;;;;;;;;;;:91;;;;12227:32;12252:6;12227:9;:20;12237:9;12227:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12204:9;:20;12214:9;12204:20;;;;;;;;;;;;;;;:55;;;;12292:9;12275:35;;12284:6;12275:35;;;12303:6;12275:35;;;;;;;;;;;;;;;;;;12323:20;12346:22;12361:6;12346:14;:22::i;:::-;12323:45;;12379:24;12406;12417:12;12406:6;:10;;:24;;;;:::i;:::-;12379:51;;12443:46;12463:6;12471:9;12482:6;12443:19;:46::i;:::-;12500:29;12505:9;12516:12;12500:4;:29::i;:::-;12562:9;12545:45;;12554:6;12545:45;;;12573:16;12545:45;;;;;;;;;;;;;;;;;;11717:881;;;;;:::o;4637:171::-;4696:7;4716:9;4728:8;4732:1;4734;4728:3;:8::i;:::-;4716:20;;4747:9;4759:8;4763:1;4765;4759:3;:8::i;:::-;4747:20;;4785:15;4789:8;4793:1;4795;4789:3;:8::i;:::-;4798:1;4785:3;:15::i;:::-;4778:22;;;;4637:171;;;;:::o;17774:129::-;17836:10;17821:12;;:25;;;;;;;;;;;;;;;;;;;;;;;;17857:6;;;;;;;;;;;:15;;:38;17873:21;17857:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17774:129::o;3981:195::-;4083:1;4063:22;;:8;:22;;;;4055:31;;;;;;4131:8;4102:38;;4123:6;;;;;;;;;;;4102:38;;;;;;;;;;;;4160:8;4151:6;;:17;;;;;;;;;;;;;;;;;;3981:195;:::o;12929:91::-;;;;:::o;13030:416::-;13132:1;13113:21;;:7;:21;;;;13105:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13185:48;13205:7;13222:1;13226:6;13185:19;:48::i;:::-;13267:68;13290:6;13267:68;;;;;;;;;;;;;;;;;:9;:18;13277:7;13267:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;13246:9;:18;13256:7;13246:18;;;;;;;;;;;;;;;:89;;;;13361:24;13378:6;13361:12;;:16;;:24;;;;:::i;:::-;13346:12;:39;;;;13427:1;13401:37;;13410:7;13401:37;;;13431:6;13401:37;;;;;;;;;;;;;;;;;;13030:416;;:::o
Swarm Source
ipfs://9aa19535c414b90e85673059fc9a903e28b5d8d635f8be0372e775e522aef0c1
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.