ERC-20
Overview
Max Total Supply
1,782,581,717,825.679236756 SUSF
Holders
1,215
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
41,708.692427147 SUSFValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SUSF
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-01 */ pragma solidity ^0.6.12; library SafeCast { function toUint128(uint256 value) internal pure returns (uint128) { require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits"); return uint128(value); } function toUint64(uint256 value) internal pure returns (uint64) { require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits"); return uint64(value); } function toUint32(uint256 value) internal pure returns (uint32) { require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits"); return uint32(value); } function toUint16(uint256 value) internal pure returns (uint16) { require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits"); return uint16(value); } function toUint8(uint256 value) internal pure returns (uint8) { require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits"); return uint8(value); } function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } function toInt256(uint256 value) internal pure returns (int256) { require(value < 2**255, "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract Initializable { bool private initialized; bool private initializing; modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } function isConstructor() private view returns (bool) { address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } uint256[50] private ______gap; } contract ContextUpgradeSafe is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } 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; } uint256[50] private __gap; } contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } contract ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; function __ERC20_init(string memory name, string memory symbol) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name, symbol); } function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer { _name = name; _symbol = symbol; _decimals = 18; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, 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 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 _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"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } 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 _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } uint256[44] private __gap; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } contract SUSF is ERC20UpgradeSafe, OwnableUpgradeSafe { using SafeCast for int256; using SafeMath for uint256; using Address for address; struct Transaction { bool enabled; address destination; bytes data; } event TransactionFailed(address indexed destination, uint index, bytes data); // Stable ordering is not guaranteed. Transaction[] public transactions; uint256 private _epoch; event LogRebase(uint256 indexed epoch, uint256 totalSupply); mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private _totalSupply; uint256 private constant MAX = ~uint256(0); uint256 private _rTotal; uint256 private _tFeeTotal; uint256 private constant DECIMALS = 9; uint256 private constant RATE_PRECISION = 10 ** DECIMALS; uint256 public _tFeePercent; address public _rebaser; uint256 public _limitTransferAmount; uint256 public _limitMaxBalance; uint256 public _limitSellFeePercent; uint256 public _limitTimestamp; uint256 public _presaleTimestamp; uint256 public _presaleEth; bool public endSale; uint256 public _presaleRate; mapping(address => uint256) public saleAmt; mapping(uint256 => bool) public locked; IUniswapV2Router02 public uniswapRouterV2; IUniswapV2Factory public uniswapFactory; function initialize() public initializer { __ERC20_init("Sushiforth", "SUSF"); _setupDecimals(uint8(DECIMALS)); __Ownable_init(); _totalSupply = 12000000 * 10**9 ; _rTotal = (MAX - (MAX % _totalSupply)); _rebaser = _msgSender(); _tFeePercent = 237; //2.6682% _rOwned[address(this)] = _rTotal; emit Transfer(address(0), address(this), _totalSupply); _presaleTimestamp = 1609696800; endSale = false; _presaleEth = 600 ether; _presaleRate = 6666; excludeAccount(_msgSender()); excludeAccount(address(this)); uniswapRouterV2 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapFactory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); } receive() external payable { require(!endSale, "PreSale Ended"); require(now > 1609524000, "presale yet to start"); require(_presaleEth >= msg.value, "Sold out"); saleAmt[msg.sender] += msg.value; require(saleAmt[msg.sender] <= 7500000000000000000, "max presale limit reached"); address payable wallet = address(uint160(owner())); wallet.transfer(msg.value.div(3)); _presaleEth = _presaleEth.sub(msg.value); uint256 amountBought = msg.value.div(10**9).mul(_presaleRate); _transfer(address(this), msg.sender, amountBought ); } function listToken() external onlyOwner() { require(!endSale, 'already listed'); require(_presaleEth == 0 || _presaleTimestamp < now, "Sale has not ended yet"); endSale = true; _transfer(address(this), _msgSender(), 8000000 * 10**9); address tokenUniswapPair = uniswapFactory.createPair( address(uniswapRouterV2.WETH()), address(address(this)) ); IUniswapV2Pair pair = IUniswapV2Pair(tokenUniswapPair); address WETH = uniswapRouterV2.WETH(); uint256 ethToSend = address(this).balance; IWETH(WETH).deposit{value : ethToSend}(); require(address(this).balance == 0 , "Transfer Failed"); uint256 tokenToAdd = 2666666 * 10**9; if(_presaleEth != 0) { tokenToAdd = ethToSend.div(10**9).mul(_presaleRate); uint256 unsoldTokens = balanceOf(address(this)) - tokenToAdd; _transfer(address(this), address(0), unsoldTokens); } IWETH(WETH).transfer(address(pair),ethToSend); _transfer(address(this), address(pair), tokenToAdd); pair.mint(address(this)); IERC20(address(pair)).transfer(msg.sender, IERC20(address(pair)).balanceOf(address(this))); } function setRebaser(address rebaser) external onlyOwner() { _rebaser = rebaser; } function setLock(uint256 _index) external onlyOwner() { locked[_index] = true; } function setTransferFeePercent(uint256 tFeePercent) external onlyOwner() { _tFeePercent = tFeePercent; } function setLimit(uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() { require(_limitTimestamp == 0, "Limit changes not allowed"); _limitTransferAmount = transferAmount; _limitMaxBalance = maxBalance; _limitSellFeePercent = sellFeePercent; _limitTimestamp = now; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function rebase(int256 supplyDelta) external returns (uint256) { require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized"); _epoch = _epoch.add(1); if (supplyDelta == 0) { emit LogRebase(_epoch, _totalSupply); return _totalSupply; } uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256(); uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply); uint256 multiplier; if (supplyDelta < 0) { multiplier = RATE_PRECISION.sub(rate); } else { multiplier = RATE_PRECISION.add(rate); } if (supplyDelta < 0) { _totalSupply = _totalSupply.sub(uSupplyDelta); } else { _totalSupply = _totalSupply.add(uSupplyDelta); } if (_totalSupply > MAX) { _totalSupply = MAX; } for (uint256 i = 0; i < _excluded.length; i++) { if(_tOwned[_excluded[i]] > 0) { _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION); } } emit LogRebase(_epoch, _totalSupply); for (uint i = 0; i < transactions.length; i++) { Transaction storage t = transactions[i]; if (t.enabled) { bool result = externalCall(t.destination, t.data); if (!result) { emit TransactionFailed(t.destination, i, t.data); revert("Transaction Failed"); } } } return _totalSupply; } /** * @notice Adds a transaction that gets called for a downstream receiver of rebases * @param destination Address of contract destination * @param data Transaction data payload */ function addTransaction(address destination, bytes memory data) external onlyOwner { transactions.push(Transaction({ enabled: true, destination: destination, data: data })); } /** * @param index Index of transaction to remove. * Transaction ordering may have changed since adding. */ function removeTransaction(uint index) external onlyOwner { require(index < transactions.length, "index out of bounds"); require(!locked[index], "index is locked"); if (index < transactions.length - 1) { transactions[index] = transactions[transactions.length - 1]; } transactions.pop(); } /** * @param index Index of transaction. Transaction ordering may have changed since adding. * @param enabled True for enabled, false for disabled. */ function setTransactionEnabled(uint index, bool enabled) external onlyOwner { require(index < transactions.length, "index must be in range of stored tx list"); transactions[index].enabled = enabled; } /** * @return Number of transactions, both enabled and disabled, in transactions list. */ function transactionsSize() external view returns (uint256) { return transactions.length; } /** * @dev wrapper to call the encoded transactions on downstream consumers. * @param destination Address of destination contract. * @param data The encoded data payload. * @return True on success */ function externalCall(address destination, bytes memory data) internal returns (bool) { bool result; assembly { // solhint-disable-line no-inline-assembly // "Allocate" memory for output // (0x40 is where "free memory" pointer is stored by convention) let outputAddress := mload(0x40) // First 32 bytes are the padded length of data, so exclude that let dataAddress := add(data, 32) result := call( // 34710 is the value that solidity is currently emitting // It includes callGas (700) + callVeryLow (3, to pay for SUB) // + callValueTransferGas (9000) + callNewAccountGas // (25000, in case the destination address does not exist and needs creating) sub(gas(), 34710), destination, 0, // transfer value in wei dataAddress, mload(data), // Size of the input, in bytes. Stored in position 0 of the array. outputAddress, 0 // Output is ignored, therefore the output size is zero ) } return result; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromRefraction(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function refract(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function refractionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _totalSupply, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); return rAmount; } else { (,uint256 rTransferAmount,,,) = _getValues(tAmount, _tFeePercent); return rTransferAmount; } } function tokenFromRefraction(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total refractions"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromRefraction(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) public onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) internal override { 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 _transfer(address sender, address recipient, uint256 amount) internal override { require(sender != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(endSale || sender == owner() || sender == address(this), "transfer paused for sale"); if(sender == address(this) || sender == owner()) { _transferBothExcluded(sender, recipient, amount, 0); } else if(_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount, _tFeePercent); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount, _tFeePercent); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount, _tFeePercent); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount, 0); } else { _transferStandard(sender, recipient, amount, _tFeePercent); } } function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _refractFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount, uint256 tFeePercent) private view returns (uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tFeePercent); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee); } function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) { uint256 tFee = tAmount.mul(tFeePercent).div(10000); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _totalSupply; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply); return (rSupply, tSupply); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","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":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"locked","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":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"saleAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"setLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionsSize","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50613d01806100206000396000f3fe60806040526004361061028c5760003560e01c8063596fa9e31161015a57806397d0677b116100c1578063d3e157471161007a578063d3e1574714610bdf578063dd62ed3e14610c09578063e46adf6214610c44578063f2cc0c1814610c77578063f2fde38b14610caa578063f84354f114610cdd57610469565b806397d0677b14610a235780639ace38c214610a55578063a457c2d714610b10578063a9059cbb14610b49578063b45a3c0e14610b82578063cba0e99614610bac57610469565b80637d449789116101135780637d449789146109a55780638129fc1c146109ba5780638bdb2afa146109cf5780638da5cb5b146109e457806391d4ec18146109f957806395d89b4114610a0e57610469565b8063596fa9e3146108cb5780635c31a713146108e057806365cccc80146109165780636e9dde991461092b57806370a082311461095d578063715018a61461099057610469565b80631f36d925116101fe578063313ce567116101b7578063313ce567146107e2578063380d831b1461080d57806339509351146108225780633aa8d4be1461085b578063456e0a5d1461088c57806346c3bd1f146108a157610469565b80631f36d9251461070c57806323b872dd146107365780632ae427dc146107795780632bc1281e1461078e5780632d7da5a4146107a3578063303bb0b6146107b857610469565b8063126e19be11610250578063126e19be146105ad57806313114a9d1461067057806314cf1bd81461068557806314f43f7e146106b857806316007d29146106e257806318160ddd146106f757610469565b8063030ba6bf1461046e57806306fdde031461048557806308d1dd8a1461050f578063095ea7b3146105365780630ab114f91461058357610469565b366104695760db5460ff16156102d9576040805162461bcd60e51b815260206004820152600d60248201526c141c9954d85b1948115b991959609a1b604482015290519081900360640190fd5b635fef63204211610328576040805162461bcd60e51b81526020600482015260146024820152731c1c995cd85b19481e595d081d1bc81cdd185c9d60621b604482015290519081900360640190fd5b3460da54101561036a576040805162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b604482015290519081900360640190fd5b33600090815260dd6020526040902080543401908190556768155a43676e000010156103dd576040805162461bcd60e51b815260206004820152601960248201527f6d61782070726573616c65206c696d6974207265616368656400000000000000604482015290519081900360640190fd5b60006103e7610d10565b90506001600160a01b0381166108fc610401346003610d1f565b6040518115909202916000818181858888f19350505050158015610429573d6000803e3d6000fd5b5060da546104379034610d6a565b60da5560dc546000906104589061045234633b9aca00610d1f565b90610dac565b9050610465303383610e05565b5050005b600080fd5b34801561047a57600080fd5b506104836110be565b005b34801561049157600080fd5b5061049a61163e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104d45781810151838201526020016104bc565b50505050905090810190601f1680156105015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561051b57600080fd5b506105246116d4565b60408051918252519081900360200190f35b34801561054257600080fd5b5061056f6004803603604081101561055957600080fd5b506001600160a01b0381351690602001356116da565b604080519115158252519081900360200190f35b34801561058f57600080fd5b50610524600480360360208110156105a657600080fd5b50356116f7565b3480156105b957600080fd5b50610483600480360360408110156105d057600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105fb57600080fd5b82018360208201111561060d57600080fd5b8035906020019184600183028401116401000000008311171561062f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b98945050505050565b34801561067c57600080fd5b50610524611cb9565b34801561069157600080fd5b50610524600480360360208110156106a857600080fd5b50356001600160a01b0316611cbf565b3480156106c457600080fd5b50610483600480360360208110156106db57600080fd5b5035611cd1565b3480156106ee57600080fd5b50610524611dac565b34801561070357600080fd5b50610524611db2565b34801561071857600080fd5b506104836004803603602081101561072f57600080fd5b5035611db8565b34801561074257600080fd5b5061056f6004803603606081101561075957600080fd5b506001600160a01b03813581169160208101359091169060400135611e15565b34801561078557600080fd5b50610524611e9c565b34801561079a57600080fd5b50610524611ea2565b3480156107af57600080fd5b50610524611ea8565b3480156107c457600080fd5b50610524600480360360208110156107db57600080fd5b5035611eae565b3480156107ee57600080fd5b506107f7611f0e565b6040805160ff9092168252519081900360200190f35b34801561081957600080fd5b5061056f611f17565b34801561082e57600080fd5b5061056f6004803603604081101561084557600080fd5b506001600160a01b038135169060200135611f20565b34801561086757600080fd5b50610870611f6e565b604080516001600160a01b039092168252519081900360200190f35b34801561089857600080fd5b50610524611f7d565b3480156108ad57600080fd5b50610483600480360360208110156108c457600080fd5b5035611f83565b3480156108d757600080fd5b50610870612171565b3480156108ec57600080fd5b506104836004803603606081101561090357600080fd5b5080359060208101359060400135612180565b34801561092257600080fd5b5061052461223f565b34801561093757600080fd5b506104836004803603604081101561094e57600080fd5b50803590602001351515612245565b34801561096957600080fd5b506105246004803603602081101561098057600080fd5b50356001600160a01b031661230e565b34801561099c57600080fd5b50610483612370565b3480156109b157600080fd5b50610524612412565b3480156109c657600080fd5b50610483612418565b3480156109db57600080fd5b5061087061262f565b3480156109f057600080fd5b50610870610d10565b348015610a0557600080fd5b5061052461263e565b348015610a1a57600080fd5b5061049a612644565b348015610a2f57600080fd5b5061052460048036036040811015610a4657600080fd5b508035906020013515156126a5565b348015610a6157600080fd5b50610a7f60048036036020811015610a7857600080fd5b503561273b565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ad3578181015183820152602001610abb565b50505050905090810190601f168015610b005780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b1c57600080fd5b5061056f60048036036040811015610b3357600080fd5b506001600160a01b038135169060200135612800565b348015610b5557600080fd5b5061056f60048036036040811015610b6c57600080fd5b506001600160a01b038135169060200135612868565b348015610b8e57600080fd5b5061056f60048036036020811015610ba557600080fd5b503561287c565b348015610bb857600080fd5b5061056f60048036036020811015610bcf57600080fd5b50356001600160a01b0316612891565b348015610beb57600080fd5b5061048360048036036020811015610c0257600080fd5b50356128af565b348015610c1557600080fd5b5061052460048036036040811015610c2c57600080fd5b506001600160a01b0381358116916020013516612922565b348015610c5057600080fd5b5061048360048036036020811015610c6757600080fd5b50356001600160a01b031661294d565b348015610c8357600080fd5b5061048360048036036020811015610c9a57600080fd5b50356001600160a01b03166129c7565b348015610cb657600080fd5b5061048360048036036020811015610ccd57600080fd5b50356001600160a01b0316612b4d565b348015610ce957600080fd5b5061048360048036036020811015610d0057600080fd5b50356001600160a01b0316612c46565b6097546001600160a01b031690565b6000610d6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e07565b90505b92915050565b6000610d6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ea9565b600082610dbb57506000610d64565b82820282848281610dc857fe5b0414610d615760405162461bcd60e51b8152600401808060200182810382526021815260200180613b486021913960400191505060405180910390fd5b6001600160a01b038316610e4a5760405162461bcd60e51b8152600401808060200182810382526025815260200180613c326025913960400191505060405180910390fd5b60008111610e895760405162461bcd60e51b8152600401808060200182810382526029815260200180613bb16029913960400191505060405180910390fd5b60db5460ff1680610eb25750610e9d610d10565b6001600160a01b0316836001600160a01b0316145b80610ec557506001600160a01b03831630145b610f16576040805162461bcd60e51b815260206004820152601860248201527f7472616e736665722070617573656420666f722073616c650000000000000000604482015290519081900360640190fd5b6001600160a01b038316301480610f455750610f30610d10565b6001600160a01b0316836001600160a01b0316145b15610f5c57610f578383836000612f03565b6110b9565b6001600160a01b038316600090815260ce602052604090205460ff168015610f9d57506001600160a01b038216600090815260ce602052604090205460ff16155b15610fb057610f5783838360d354613052565b6001600160a01b038316600090815260ce602052604090205460ff16158015610ff157506001600160a01b038216600090815260ce602052604090205460ff165b1561100457610f5783838360d3546130f2565b6001600160a01b038316600090815260ce602052604090205460ff1615801561104657506001600160a01b038216600090815260ce602052604090205460ff16155b1561105957610f5783838360d354613134565b6001600160a01b038316600090815260ce602052604090205460ff16801561109957506001600160a01b038216600090815260ce602052604090205460ff165b156110ab57610f578383836000612f03565b6110b983838360d354613134565b505050565b6110c6613176565b6097546001600160a01b03908116911614611116576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60db5460ff161561115f576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b1a5cdd195960921b604482015290519081900360640190fd5b60da54158061116f57504260d954105b6111b9576040805162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc81b9bdd08195b991959081e595d60521b604482015290519081900360640190fd5b60db805460ff191660011790556111df306111d2613176565b661c6bf526340000610e05565b60e05460df54604080516315ab88c960e31b815290516000936001600160a01b039081169363c9c653969391169163ad5c464891600480820192602092909190829003018186803b15801561123357600080fd5b505afa158015611247573d6000803e3d6000fd5b505050506040513d602081101561125d57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156112ac57600080fd5b505af11580156112c0573d6000803e3d6000fd5b505050506040513d60208110156112d657600080fd5b505160df54604080516315ab88c960e31b8152905192935083926000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561132257600080fd5b505afa158015611336573d6000803e3d6000fd5b505050506040513d602081101561134c57600080fd5b505160408051630d0e30db60e41b8152905191925047916001600160a01b0384169163d0e30db091849160048082019260009290919082900301818588803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b5050505050476000146113f7576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b60da54660979518faa2400901561143c5760dc5461141d9061045284633b9aca00610d1f565b905060008161142b3061230e565b03905061143a30600083610e05565b505b826001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b505050506040513d60208110156114bd57600080fd5b506114cb9050308583610e05565b604080516335313c2160e11b815230600482015290516001600160a01b03861691636a6278429160248083019260209291908290030181600087803b15801561151357600080fd5b505af1158015611527573d6000803e3d6000fd5b505050506040513d602081101561153d57600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b0386169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561159057600080fd5b505afa1580156115a4573d6000803e3d6000fd5b505050506040513d60208110156115ba57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561160b57600080fd5b505af115801561161f573d6000803e3d6000fd5b505050506040513d602081101561163557600080fd5b50505050505050565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116ca5780601f1061169f576101008083540402835291602001916116ca565b820191906000526020600020905b8154815290600101906020018083116116ad57829003601f168201915b5050505050905090565b60d85481565b60006116ee6116e7613176565b848461317a565b50600192915050565b6000611701610d10565b6001600160a01b0316611712613176565b6001600160a01b03161480611741575060d4546001600160a01b0316611736613176565b6001600160a01b0316145b61178a576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca54611798906001613266565b60ca55816117e15760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d054611b93565b60006117fe600084126117f457836117f9565b836000035b6132c0565b60d05490915060009061181f9061181984633b9aca00610dac565b90610d1f565b905060008085121561184057611839633b9aca0083610d6a565b9050611851565b61184e633b9aca0083613266565b90505b600085121561186f5760d0546118679084610d6a565b60d055611880565b60d05461187c9084613266565b60d0555b60005b60cf5481101561195257600060cc600060cf84815481106118a057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054111561194a576119136009600a0a6118198460cc600060cf87815481106118e857fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205490610dac565b60cc600060cf848154811061192457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b600101611883565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c954811015611b8957600060c982815481106119a757fe5b60009182526020909120600290910201805490915060ff1615611b805780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095611a6f9590046001600160a01b0316939092909190830182828015611a655780601f10611a3a57610100808354040283529160200191611a65565b820191906000526020600020905b815481529060010190602001808311611a4857829003601f168201915b505050505061331b565b905080611b7e5781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015611b2d5780601f10611b0257610100808354040283529160200191611b2d565b820191906000526020600020905b815481529060010190602001808311611b1057829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b5060010161198e565b5060d05493505050505b919050565b611ba0613176565b6097546001600160a01b03908116911614611bf0576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193611cb2937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2901929190910190613993565b5050505050565b60d25490565b60dd6020526000908152604090205481565b6000611cdb613176565b6001600160a01b038116600090815260ce602052604090205490915060ff1615611d365760405162461bcd60e51b815260040180806020018281038252602c815260200180613c7b602c913960400191505060405180910390fd5b6000611d448360d35461333e565b505050506001600160a01b038316600090815260cb6020526040902054909150611d6e9082610d6a565b6001600160a01b038316600090815260cb602052604090205560d154611d949082610d6a565b60d15560d254611da49084613266565b60d255505050565b60dc5481565b60d05490565b611dc0613176565b6097546001600160a01b03908116911614611e10576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60d355565b6000611e22848484610e05565b611e9284611e2e613176565b611e8d85604051806060016040528060288152602001613b69602891396001600160a01b038a16600090815260cd6020526040812090611e6c613176565b6001600160a01b031681526020810191909152604001600020549190612ea9565b61317a565b5060019392505050565b60d35481565b60d55481565b60d95481565b600060d154821115611ef15760405162461bcd60e51b815260040180806020018281038252602a815260200180613c08602a913960400191505060405180910390fd5b6000611efb61338c565b9050611f078382610d1f565b9392505050565b606a5460ff1690565b60db5460ff1681565b60006116ee611f2d613176565b84611e8d8560cd6000611f3e613176565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613266565b60d4546001600160a01b031681565b60d65481565b611f8b613176565b6097546001600160a01b03908116911614611fdb576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60c9548110612027576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b600081815260de602052604090205460ff161561207d576040805162461bcd60e51b815260206004820152600f60248201526e1a5b99195e081a5cc81b1bd8dad959608a1b604482015290519081900360640190fd5b60c9546000190181101561212e5760c98054600019810190811061209d57fe5b906000526020600020906002020160c982815481106120b857fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b0316820217825560018085018054939461212a948387019492938116159092026000190190911604613a0d565b5050505b60c980548061213957fe5b60008281526020812060026000199093019283020180546001600160a81b03191681559061216a6001830182613a82565b5050905550565b60df546001600160a01b031681565b612188613176565b6097546001600160a01b039081169116146121d8576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60d8541561222d576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d59290925560d65560d7554260d855565b60da5481565b61224d613176565b6097546001600160a01b0390811691161461229d576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60c95482106122dd5760405162461bcd60e51b8152600401808060200182810382526028815260200180613b206028913960400191505060405180910390fd5b8060c983815481106122eb57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff161561234e57506001600160a01b038116600090815260cc6020526040902054611b93565b6001600160a01b038216600090815260cb6020526040902054610d6490611eae565b612378613176565b6097546001600160a01b039081169116146123c8576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60d75481565b600054610100900460ff168061243157506124316133af565b8061243f575060005460ff16155b61247a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff161580156124a5576000805460ff1961ff0019909116610100171660011790555b6124ed6040518060400160405280600a8152602001690a6eae6d0d2ccdee4e8d60b31b8152506040518060400160405280600481526020016329aaa9a360e11b8152506133b5565b6124f7600961346a565b6124ff613480565b662aa1efb94e000060d055661c7327917bffff1960d15561251e613176565b60d480546001600160a01b0319166001600160a01b039290921691909117905560ed60d35560d15430600081815260cb602090815260408083209490945560d05484519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3635ff2062060d95560db805460ff19169055682086ac35105260000060da55611a0a60dc556125c96125c4613176565b6129c7565b6125d2306129c7565b60df80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560e08054909116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f179055801561262c576000805461ff00191690555b50565b60e0546001600160a01b031681565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116ca5780601f1061169f576101008083540402835291602001916116ca565b600060d0548311156126fe576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161271f5760006127118460d35461333e565b50929450610d649350505050565b600061272d8460d35461333e565b50919450610d649350505050565b60c9818154811061274857fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b031694929390928301828280156127f65780601f106127cb576101008083540402835291602001916127f6565b820191906000526020600020905b8154815290600101906020018083116127d957829003601f168201915b5050505050905083565b60006116ee61280d613176565b84611e8d85604051806060016040528060258152602001613ca76025913960cd6000612837613176565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612ea9565b60006116ee612875613176565b8484610e05565b60de6020526000908152604090205460ff1681565b6001600160a01b0316600090815260ce602052604090205460ff1690565b6128b7613176565b6097546001600160a01b03908116911614612907576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b600090815260de60205260409020805460ff19166001179055565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b612955613176565b6097546001600160a01b039081169116146129a5576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b6129cf613176565b6097546001600160a01b03908116911614612a1f576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff1615612a8d576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415612ae7576001600160a01b038116600090815260cb6020526040902054612acd90611eae565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b612b55613176565b6097546001600160a01b03908116911614612ba5576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6001600160a01b038116612bea5760405162461bcd60e51b8152600401808060200182810382526026815260200180613ad86026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b612c4e613176565b6097546001600160a01b03908116911614612c9e576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612d0b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf54811015612e0357816001600160a01b031660cf8281548110612d2f57fe5b6000918252602090912001546001600160a01b03161415612dfb5760cf80546000198101908110612d5c57fe5b60009182526020909120015460cf80546001600160a01b039092169183908110612d8257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf805480612dd457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612e03565b600101612d0e565b5050565b60008183612e935760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e58578181015183820152602001612e40565b50505050905090810190601f168015612e855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612e9f57fe5b0495945050505050565b60008184841115612efb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612e58578181015183820152602001612e40565b505050900390565b6000806000806000612f15878761333e565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612f459088610d6a565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612f749086610d6a565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc9091522054612faa9083613266565b6001600160a01b038916600090815260cc602090815260408083209390935560cb90522054612fd99085613266565b6001600160a01b038916600090815260cb6020526040902055612ffc8382613531565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b6000806000806000613064878761333e565b6001600160a01b038e16600090815260cc6020526040902054949950929750909550935091506130949088610d6a565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb905220546130c39086610d6a565b6001600160a01b03808b16600090815260cb602052604080822093909355908a1681522054612fd99085613266565b6000806000806000613104878761333e565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612f749086610d6a565b6000806000806000613146878761333e565b6001600160a01b038e16600090815260cb6020526040902054949950929750909550935091506130c39086610d6a565b3390565b6001600160a01b0383166131bf5760405162461bcd60e51b8152600401808060200182810382526024815260200180613c576024913960400191505060405180910390fd5b6001600160a01b0382166132045760405162461bcd60e51b8152600401808060200182810382526022815260200180613afe6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610d61576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215613317576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006133538989613555565b91509150600061336161338c565b905060008060006133738d8686613583565b919f909e50909c50959a50939850939650505050505050565b60008060006133996135bf565b90925090506133a88282610d1f565b9250505090565b303b1590565b600054610100900460ff16806133ce57506133ce6133af565b806133dc575060005460ff16155b6134175760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff16158015613442576000805460ff1961ff0019909116610100171660011790555b61344a613722565b61345483836137c2565b80156110b9576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff168061349957506134996133af565b806134a7575060005460ff16155b6134e25760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff1615801561350d576000805460ff1961ff0019909116610100171660011790555b613515613722565b61351d61389a565b801561262c576000805461ff001916905550565b60d15461353e9083610d6a565b60d15560d25461354e9082613266565b60d2555050565b600080806135696127106118198787610dac565b905060006135778683610d6a565b96919550909350505050565b60008080806135928786610dac565b905060006135a08787610dac565b905060006135ae8383610d6a565b929992985090965090945050505050565b60d15460d0546000918291825b60cf548110156136f0578260cb600060cf84815481106135e857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061364d57508160cc600060cf848154811061362657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156136645760d15460d0549450945050505061371e565b6136a460cb600060cf848154811061367857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610d6a565b92506136e660cc600060cf84815481106136ba57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610d6a565b91506001016135cc565b5060d05460d15461370091610d1f565b8210156137185760d15460d05493509350505061371e565b90925090505b9091565b600054610100900460ff168061373b575061373b6133af565b80613749575060005460ff16155b6137845760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff1615801561351d576000805460ff1961ff001990911661010017166001179055801561262c576000805461ff001916905550565b600054610100900460ff16806137db57506137db6133af565b806137e9575060005460ff16155b6138245760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff1615801561384f576000805460ff1961ff0019909116610100171660011790555b8251613862906068906020860190613993565b508151613876906069906020850190613993565b50606a805460ff1916601217905580156110b9576000805461ff0019169055505050565b600054610100900460ff16806138b357506138b36133af565b806138c1575060005460ff16155b6138fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff16158015613927576000805460ff1961ff0019909116610100171660011790555b6000613931613176565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561262c576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139d457805160ff1916838001178555613a01565b82800160010185558215613a01579182015b82811115613a015782518255916020019190600101906139e6565b50613317929150613ac2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a465780548555613a01565b82800160010185558215613a0157600052602060002091601f016020900482015b82811115613a01578254825591600101919060010190613a67565b50805460018160011615610100020316600290046000825580601f10613aa8575061262c565b601f01602090049060005260206000209081019061262c91905b5b808211156133175760008155600101613ac356fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207e687ec60552f4110059d13b6dc7ad249a8b3a94fee3a23aa1af80ca18f7eb6f64736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061028c5760003560e01c8063596fa9e31161015a57806397d0677b116100c1578063d3e157471161007a578063d3e1574714610bdf578063dd62ed3e14610c09578063e46adf6214610c44578063f2cc0c1814610c77578063f2fde38b14610caa578063f84354f114610cdd57610469565b806397d0677b14610a235780639ace38c214610a55578063a457c2d714610b10578063a9059cbb14610b49578063b45a3c0e14610b82578063cba0e99614610bac57610469565b80637d449789116101135780637d449789146109a55780638129fc1c146109ba5780638bdb2afa146109cf5780638da5cb5b146109e457806391d4ec18146109f957806395d89b4114610a0e57610469565b8063596fa9e3146108cb5780635c31a713146108e057806365cccc80146109165780636e9dde991461092b57806370a082311461095d578063715018a61461099057610469565b80631f36d925116101fe578063313ce567116101b7578063313ce567146107e2578063380d831b1461080d57806339509351146108225780633aa8d4be1461085b578063456e0a5d1461088c57806346c3bd1f146108a157610469565b80631f36d9251461070c57806323b872dd146107365780632ae427dc146107795780632bc1281e1461078e5780632d7da5a4146107a3578063303bb0b6146107b857610469565b8063126e19be11610250578063126e19be146105ad57806313114a9d1461067057806314cf1bd81461068557806314f43f7e146106b857806316007d29146106e257806318160ddd146106f757610469565b8063030ba6bf1461046e57806306fdde031461048557806308d1dd8a1461050f578063095ea7b3146105365780630ab114f91461058357610469565b366104695760db5460ff16156102d9576040805162461bcd60e51b815260206004820152600d60248201526c141c9954d85b1948115b991959609a1b604482015290519081900360640190fd5b635fef63204211610328576040805162461bcd60e51b81526020600482015260146024820152731c1c995cd85b19481e595d081d1bc81cdd185c9d60621b604482015290519081900360640190fd5b3460da54101561036a576040805162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b604482015290519081900360640190fd5b33600090815260dd6020526040902080543401908190556768155a43676e000010156103dd576040805162461bcd60e51b815260206004820152601960248201527f6d61782070726573616c65206c696d6974207265616368656400000000000000604482015290519081900360640190fd5b60006103e7610d10565b90506001600160a01b0381166108fc610401346003610d1f565b6040518115909202916000818181858888f19350505050158015610429573d6000803e3d6000fd5b5060da546104379034610d6a565b60da5560dc546000906104589061045234633b9aca00610d1f565b90610dac565b9050610465303383610e05565b5050005b600080fd5b34801561047a57600080fd5b506104836110be565b005b34801561049157600080fd5b5061049a61163e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104d45781810151838201526020016104bc565b50505050905090810190601f1680156105015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561051b57600080fd5b506105246116d4565b60408051918252519081900360200190f35b34801561054257600080fd5b5061056f6004803603604081101561055957600080fd5b506001600160a01b0381351690602001356116da565b604080519115158252519081900360200190f35b34801561058f57600080fd5b50610524600480360360208110156105a657600080fd5b50356116f7565b3480156105b957600080fd5b50610483600480360360408110156105d057600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105fb57600080fd5b82018360208201111561060d57600080fd5b8035906020019184600183028401116401000000008311171561062f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b98945050505050565b34801561067c57600080fd5b50610524611cb9565b34801561069157600080fd5b50610524600480360360208110156106a857600080fd5b50356001600160a01b0316611cbf565b3480156106c457600080fd5b50610483600480360360208110156106db57600080fd5b5035611cd1565b3480156106ee57600080fd5b50610524611dac565b34801561070357600080fd5b50610524611db2565b34801561071857600080fd5b506104836004803603602081101561072f57600080fd5b5035611db8565b34801561074257600080fd5b5061056f6004803603606081101561075957600080fd5b506001600160a01b03813581169160208101359091169060400135611e15565b34801561078557600080fd5b50610524611e9c565b34801561079a57600080fd5b50610524611ea2565b3480156107af57600080fd5b50610524611ea8565b3480156107c457600080fd5b50610524600480360360208110156107db57600080fd5b5035611eae565b3480156107ee57600080fd5b506107f7611f0e565b6040805160ff9092168252519081900360200190f35b34801561081957600080fd5b5061056f611f17565b34801561082e57600080fd5b5061056f6004803603604081101561084557600080fd5b506001600160a01b038135169060200135611f20565b34801561086757600080fd5b50610870611f6e565b604080516001600160a01b039092168252519081900360200190f35b34801561089857600080fd5b50610524611f7d565b3480156108ad57600080fd5b50610483600480360360208110156108c457600080fd5b5035611f83565b3480156108d757600080fd5b50610870612171565b3480156108ec57600080fd5b506104836004803603606081101561090357600080fd5b5080359060208101359060400135612180565b34801561092257600080fd5b5061052461223f565b34801561093757600080fd5b506104836004803603604081101561094e57600080fd5b50803590602001351515612245565b34801561096957600080fd5b506105246004803603602081101561098057600080fd5b50356001600160a01b031661230e565b34801561099c57600080fd5b50610483612370565b3480156109b157600080fd5b50610524612412565b3480156109c657600080fd5b50610483612418565b3480156109db57600080fd5b5061087061262f565b3480156109f057600080fd5b50610870610d10565b348015610a0557600080fd5b5061052461263e565b348015610a1a57600080fd5b5061049a612644565b348015610a2f57600080fd5b5061052460048036036040811015610a4657600080fd5b508035906020013515156126a5565b348015610a6157600080fd5b50610a7f60048036036020811015610a7857600080fd5b503561273b565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ad3578181015183820152602001610abb565b50505050905090810190601f168015610b005780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b1c57600080fd5b5061056f60048036036040811015610b3357600080fd5b506001600160a01b038135169060200135612800565b348015610b5557600080fd5b5061056f60048036036040811015610b6c57600080fd5b506001600160a01b038135169060200135612868565b348015610b8e57600080fd5b5061056f60048036036020811015610ba557600080fd5b503561287c565b348015610bb857600080fd5b5061056f60048036036020811015610bcf57600080fd5b50356001600160a01b0316612891565b348015610beb57600080fd5b5061048360048036036020811015610c0257600080fd5b50356128af565b348015610c1557600080fd5b5061052460048036036040811015610c2c57600080fd5b506001600160a01b0381358116916020013516612922565b348015610c5057600080fd5b5061048360048036036020811015610c6757600080fd5b50356001600160a01b031661294d565b348015610c8357600080fd5b5061048360048036036020811015610c9a57600080fd5b50356001600160a01b03166129c7565b348015610cb657600080fd5b5061048360048036036020811015610ccd57600080fd5b50356001600160a01b0316612b4d565b348015610ce957600080fd5b5061048360048036036020811015610d0057600080fd5b50356001600160a01b0316612c46565b6097546001600160a01b031690565b6000610d6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e07565b90505b92915050565b6000610d6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ea9565b600082610dbb57506000610d64565b82820282848281610dc857fe5b0414610d615760405162461bcd60e51b8152600401808060200182810382526021815260200180613b486021913960400191505060405180910390fd5b6001600160a01b038316610e4a5760405162461bcd60e51b8152600401808060200182810382526025815260200180613c326025913960400191505060405180910390fd5b60008111610e895760405162461bcd60e51b8152600401808060200182810382526029815260200180613bb16029913960400191505060405180910390fd5b60db5460ff1680610eb25750610e9d610d10565b6001600160a01b0316836001600160a01b0316145b80610ec557506001600160a01b03831630145b610f16576040805162461bcd60e51b815260206004820152601860248201527f7472616e736665722070617573656420666f722073616c650000000000000000604482015290519081900360640190fd5b6001600160a01b038316301480610f455750610f30610d10565b6001600160a01b0316836001600160a01b0316145b15610f5c57610f578383836000612f03565b6110b9565b6001600160a01b038316600090815260ce602052604090205460ff168015610f9d57506001600160a01b038216600090815260ce602052604090205460ff16155b15610fb057610f5783838360d354613052565b6001600160a01b038316600090815260ce602052604090205460ff16158015610ff157506001600160a01b038216600090815260ce602052604090205460ff165b1561100457610f5783838360d3546130f2565b6001600160a01b038316600090815260ce602052604090205460ff1615801561104657506001600160a01b038216600090815260ce602052604090205460ff16155b1561105957610f5783838360d354613134565b6001600160a01b038316600090815260ce602052604090205460ff16801561109957506001600160a01b038216600090815260ce602052604090205460ff165b156110ab57610f578383836000612f03565b6110b983838360d354613134565b505050565b6110c6613176565b6097546001600160a01b03908116911614611116576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60db5460ff161561115f576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b1a5cdd195960921b604482015290519081900360640190fd5b60da54158061116f57504260d954105b6111b9576040805162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc81b9bdd08195b991959081e595d60521b604482015290519081900360640190fd5b60db805460ff191660011790556111df306111d2613176565b661c6bf526340000610e05565b60e05460df54604080516315ab88c960e31b815290516000936001600160a01b039081169363c9c653969391169163ad5c464891600480820192602092909190829003018186803b15801561123357600080fd5b505afa158015611247573d6000803e3d6000fd5b505050506040513d602081101561125d57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156112ac57600080fd5b505af11580156112c0573d6000803e3d6000fd5b505050506040513d60208110156112d657600080fd5b505160df54604080516315ab88c960e31b8152905192935083926000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561132257600080fd5b505afa158015611336573d6000803e3d6000fd5b505050506040513d602081101561134c57600080fd5b505160408051630d0e30db60e41b8152905191925047916001600160a01b0384169163d0e30db091849160048082019260009290919082900301818588803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b5050505050476000146113f7576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b60da54660979518faa2400901561143c5760dc5461141d9061045284633b9aca00610d1f565b905060008161142b3061230e565b03905061143a30600083610e05565b505b826001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b505050506040513d60208110156114bd57600080fd5b506114cb9050308583610e05565b604080516335313c2160e11b815230600482015290516001600160a01b03861691636a6278429160248083019260209291908290030181600087803b15801561151357600080fd5b505af1158015611527573d6000803e3d6000fd5b505050506040513d602081101561153d57600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b0386169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561159057600080fd5b505afa1580156115a4573d6000803e3d6000fd5b505050506040513d60208110156115ba57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561160b57600080fd5b505af115801561161f573d6000803e3d6000fd5b505050506040513d602081101561163557600080fd5b50505050505050565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116ca5780601f1061169f576101008083540402835291602001916116ca565b820191906000526020600020905b8154815290600101906020018083116116ad57829003601f168201915b5050505050905090565b60d85481565b60006116ee6116e7613176565b848461317a565b50600192915050565b6000611701610d10565b6001600160a01b0316611712613176565b6001600160a01b03161480611741575060d4546001600160a01b0316611736613176565b6001600160a01b0316145b61178a576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca54611798906001613266565b60ca55816117e15760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d054611b93565b60006117fe600084126117f457836117f9565b836000035b6132c0565b60d05490915060009061181f9061181984633b9aca00610dac565b90610d1f565b905060008085121561184057611839633b9aca0083610d6a565b9050611851565b61184e633b9aca0083613266565b90505b600085121561186f5760d0546118679084610d6a565b60d055611880565b60d05461187c9084613266565b60d0555b60005b60cf5481101561195257600060cc600060cf84815481106118a057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054111561194a576119136009600a0a6118198460cc600060cf87815481106118e857fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205490610dac565b60cc600060cf848154811061192457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b600101611883565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c954811015611b8957600060c982815481106119a757fe5b60009182526020909120600290910201805490915060ff1615611b805780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095611a6f9590046001600160a01b0316939092909190830182828015611a655780601f10611a3a57610100808354040283529160200191611a65565b820191906000526020600020905b815481529060010190602001808311611a4857829003601f168201915b505050505061331b565b905080611b7e5781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015611b2d5780601f10611b0257610100808354040283529160200191611b2d565b820191906000526020600020905b815481529060010190602001808311611b1057829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b5060010161198e565b5060d05493505050505b919050565b611ba0613176565b6097546001600160a01b03908116911614611bf0576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193611cb2937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2901929190910190613993565b5050505050565b60d25490565b60dd6020526000908152604090205481565b6000611cdb613176565b6001600160a01b038116600090815260ce602052604090205490915060ff1615611d365760405162461bcd60e51b815260040180806020018281038252602c815260200180613c7b602c913960400191505060405180910390fd5b6000611d448360d35461333e565b505050506001600160a01b038316600090815260cb6020526040902054909150611d6e9082610d6a565b6001600160a01b038316600090815260cb602052604090205560d154611d949082610d6a565b60d15560d254611da49084613266565b60d255505050565b60dc5481565b60d05490565b611dc0613176565b6097546001600160a01b03908116911614611e10576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60d355565b6000611e22848484610e05565b611e9284611e2e613176565b611e8d85604051806060016040528060288152602001613b69602891396001600160a01b038a16600090815260cd6020526040812090611e6c613176565b6001600160a01b031681526020810191909152604001600020549190612ea9565b61317a565b5060019392505050565b60d35481565b60d55481565b60d95481565b600060d154821115611ef15760405162461bcd60e51b815260040180806020018281038252602a815260200180613c08602a913960400191505060405180910390fd5b6000611efb61338c565b9050611f078382610d1f565b9392505050565b606a5460ff1690565b60db5460ff1681565b60006116ee611f2d613176565b84611e8d8560cd6000611f3e613176565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613266565b60d4546001600160a01b031681565b60d65481565b611f8b613176565b6097546001600160a01b03908116911614611fdb576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60c9548110612027576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b600081815260de602052604090205460ff161561207d576040805162461bcd60e51b815260206004820152600f60248201526e1a5b99195e081a5cc81b1bd8dad959608a1b604482015290519081900360640190fd5b60c9546000190181101561212e5760c98054600019810190811061209d57fe5b906000526020600020906002020160c982815481106120b857fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b0316820217825560018085018054939461212a948387019492938116159092026000190190911604613a0d565b5050505b60c980548061213957fe5b60008281526020812060026000199093019283020180546001600160a81b03191681559061216a6001830182613a82565b5050905550565b60df546001600160a01b031681565b612188613176565b6097546001600160a01b039081169116146121d8576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60d8541561222d576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d59290925560d65560d7554260d855565b60da5481565b61224d613176565b6097546001600160a01b0390811691161461229d576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60c95482106122dd5760405162461bcd60e51b8152600401808060200182810382526028815260200180613b206028913960400191505060405180910390fd5b8060c983815481106122eb57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff161561234e57506001600160a01b038116600090815260cc6020526040902054611b93565b6001600160a01b038216600090815260cb6020526040902054610d6490611eae565b612378613176565b6097546001600160a01b039081169116146123c8576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60d75481565b600054610100900460ff168061243157506124316133af565b8061243f575060005460ff16155b61247a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff161580156124a5576000805460ff1961ff0019909116610100171660011790555b6124ed6040518060400160405280600a8152602001690a6eae6d0d2ccdee4e8d60b31b8152506040518060400160405280600481526020016329aaa9a360e11b8152506133b5565b6124f7600961346a565b6124ff613480565b662aa1efb94e000060d055661c7327917bffff1960d15561251e613176565b60d480546001600160a01b0319166001600160a01b039290921691909117905560ed60d35560d15430600081815260cb602090815260408083209490945560d05484519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3635ff2062060d95560db805460ff19169055682086ac35105260000060da55611a0a60dc556125c96125c4613176565b6129c7565b6125d2306129c7565b60df80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560e08054909116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f179055801561262c576000805461ff00191690555b50565b60e0546001600160a01b031681565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116ca5780601f1061169f576101008083540402835291602001916116ca565b600060d0548311156126fe576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161271f5760006127118460d35461333e565b50929450610d649350505050565b600061272d8460d35461333e565b50919450610d649350505050565b60c9818154811061274857fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b031694929390928301828280156127f65780601f106127cb576101008083540402835291602001916127f6565b820191906000526020600020905b8154815290600101906020018083116127d957829003601f168201915b5050505050905083565b60006116ee61280d613176565b84611e8d85604051806060016040528060258152602001613ca76025913960cd6000612837613176565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612ea9565b60006116ee612875613176565b8484610e05565b60de6020526000908152604090205460ff1681565b6001600160a01b0316600090815260ce602052604090205460ff1690565b6128b7613176565b6097546001600160a01b03908116911614612907576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b600090815260de60205260409020805460ff19166001179055565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b612955613176565b6097546001600160a01b039081169116146129a5576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b6129cf613176565b6097546001600160a01b03908116911614612a1f576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff1615612a8d576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415612ae7576001600160a01b038116600090815260cb6020526040902054612acd90611eae565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b612b55613176565b6097546001600160a01b03908116911614612ba5576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6001600160a01b038116612bea5760405162461bcd60e51b8152600401808060200182810382526026815260200180613ad86026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b612c4e613176565b6097546001600160a01b03908116911614612c9e576040805162461bcd60e51b81526020600482018190526024820152600080516020613b91833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612d0b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf54811015612e0357816001600160a01b031660cf8281548110612d2f57fe5b6000918252602090912001546001600160a01b03161415612dfb5760cf80546000198101908110612d5c57fe5b60009182526020909120015460cf80546001600160a01b039092169183908110612d8257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf805480612dd457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612e03565b600101612d0e565b5050565b60008183612e935760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e58578181015183820152602001612e40565b50505050905090810190601f168015612e855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612e9f57fe5b0495945050505050565b60008184841115612efb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612e58578181015183820152602001612e40565b505050900390565b6000806000806000612f15878761333e565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612f459088610d6a565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612f749086610d6a565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc9091522054612faa9083613266565b6001600160a01b038916600090815260cc602090815260408083209390935560cb90522054612fd99085613266565b6001600160a01b038916600090815260cb6020526040902055612ffc8382613531565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b6000806000806000613064878761333e565b6001600160a01b038e16600090815260cc6020526040902054949950929750909550935091506130949088610d6a565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb905220546130c39086610d6a565b6001600160a01b03808b16600090815260cb602052604080822093909355908a1681522054612fd99085613266565b6000806000806000613104878761333e565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612f749086610d6a565b6000806000806000613146878761333e565b6001600160a01b038e16600090815260cb6020526040902054949950929750909550935091506130c39086610d6a565b3390565b6001600160a01b0383166131bf5760405162461bcd60e51b8152600401808060200182810382526024815260200180613c576024913960400191505060405180910390fd5b6001600160a01b0382166132045760405162461bcd60e51b8152600401808060200182810382526022815260200180613afe6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610d61576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215613317576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006133538989613555565b91509150600061336161338c565b905060008060006133738d8686613583565b919f909e50909c50959a50939850939650505050505050565b60008060006133996135bf565b90925090506133a88282610d1f565b9250505090565b303b1590565b600054610100900460ff16806133ce57506133ce6133af565b806133dc575060005460ff16155b6134175760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff16158015613442576000805460ff1961ff0019909116610100171660011790555b61344a613722565b61345483836137c2565b80156110b9576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff168061349957506134996133af565b806134a7575060005460ff16155b6134e25760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff1615801561350d576000805460ff1961ff0019909116610100171660011790555b613515613722565b61351d61389a565b801561262c576000805461ff001916905550565b60d15461353e9083610d6a565b60d15560d25461354e9082613266565b60d2555050565b600080806135696127106118198787610dac565b905060006135778683610d6a565b96919550909350505050565b60008080806135928786610dac565b905060006135a08787610dac565b905060006135ae8383610d6a565b929992985090965090945050505050565b60d15460d0546000918291825b60cf548110156136f0578260cb600060cf84815481106135e857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061364d57508160cc600060cf848154811061362657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156136645760d15460d0549450945050505061371e565b6136a460cb600060cf848154811061367857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610d6a565b92506136e660cc600060cf84815481106136ba57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610d6a565b91506001016135cc565b5060d05460d15461370091610d1f565b8210156137185760d15460d05493509350505061371e565b90925090505b9091565b600054610100900460ff168061373b575061373b6133af565b80613749575060005460ff16155b6137845760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff1615801561351d576000805460ff1961ff001990911661010017166001179055801561262c576000805461ff001916905550565b600054610100900460ff16806137db57506137db6133af565b806137e9575060005460ff16155b6138245760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff1615801561384f576000805460ff1961ff0019909116610100171660011790555b8251613862906068906020860190613993565b508151613876906069906020850190613993565b50606a805460ff1916601217905580156110b9576000805461ff0019169055505050565b600054610100900460ff16806138b357506138b36133af565b806138c1575060005460ff16155b6138fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180613bda602e913960400191505060405180910390fd5b600054610100900460ff16158015613927576000805460ff1961ff0019909116610100171660011790555b6000613931613176565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561262c576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139d457805160ff1916838001178555613a01565b82800160010185558215613a01579182015b82811115613a015782518255916020019190600101906139e6565b50613317929150613ac2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a465780548555613a01565b82800160010185558215613a0157600052602060002091601f016020900482015b82811115613a01578254825591600101919060010190613a67565b50805460018160011615610100020316600290046000825580601f10613aa8575061262c565b601f01602090049060005260206000209081019061262c91905b5b808211156133175760008155600101613ac356fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207e687ec60552f4110059d13b6dc7ad249a8b3a94fee3a23aa1af80ca18f7eb6f64736f6c634300060c0033
Deployed Bytecode Sourcemap
18793:19725:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21409:7;;;;21408:8;21400:34;;;;;-1:-1:-1;;;21400:34:0;;;;;;;;;;;;-1:-1:-1;;;21400:34:0;;;;;;;;;;;;;;;21459:10;21453:3;:16;21445:49;;;;;-1:-1:-1;;;21445:49:0;;;;;;;;;;;;-1:-1:-1;;;21445:49:0;;;;;;;;;;;;;;;21528:9;21513:11;;:24;;21505:45;;;;;-1:-1:-1;;;21505:45:0;;;;;;;;;;;;-1:-1:-1;;;21505:45:0;;;;;;;;;;;;;;;21569:10;21561:19;;;;:7;:19;;;;;:32;;21584:9;21561:32;;;;;21636:19;-1:-1:-1;21612:43:0;21604:81;;;;;-1:-1:-1;;;21604:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21696:22;21737:7;:5;:7::i;:::-;21696:50;-1:-1:-1;;;;;;21757:15:0;;:33;21773:16;:9;21787:1;21773:13;:16::i;:::-;21757:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21815:11:0;;:26;;21831:9;21815:15;:26::i;:::-;21801:11;:40;21900:12;;21852:20;;21875:38;;:20;:9;21889:5;21875:13;:20::i;:::-;:24;;:38::i;:::-;21852:61;;21924:51;21942:4;21949:10;21961:12;21924:9;:51::i;:::-;21362:621;;18793:19725;;;;;21991:1266;;;;;;;;;;;;;:::i;:::-;;7529:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20080:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29593:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29593:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;24103:1761;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24103:1761:0;;:::i;26090:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26090:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26090:260:0;;-1:-1:-1;26090:260:0;;-1:-1:-1;;;;;26090:260:0:i;30722:87::-;;;;;;;;;;;;;:::i;20251:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20251:42:0;-1:-1:-1;;;;;20251:42:0;;:::i;30817:390::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30817:390:0;;:::i;20217:27::-;;;;;;;;;;;;;:::i;23991:100::-;;;;;;;;;;;;;:::i;23483:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23483:120:0;;:::i;29762:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29762:313:0;;;;;;;;;;;;;;;;;:::i;19876:27::-;;;;;;;;;;;;;:::i;19952:35::-;;;;;;;;;;;;;:::i;20119:32::-;;;;;;;;;;;;;:::i;31690:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31690:253:0;;:::i;7715:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20191:19;;;;;;;;;;;;;:::i;30083:227::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30083:227:0;;;;;;;;:::i;19916:23::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19916:23:0;;;;;;;;;;;;;;19994:31;;;;;;;;;;;;;:::i;26502:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26502:378:0;;:::i;20351:41::-;;;;;;;;;;;;;:::i;23615:364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23615:364:0;;;;;;;;;;;;:::i;20158:26::-;;;;;;;;;;;;;:::i;27062:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27062:246:0;;;;;;;;;:::i;29061:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29061:198:0;-1:-1:-1;;;;;29061:198:0;;:::i;3393:148::-;;;;;;;;;;;;;:::i;20032:35::-;;;;;;;;;;;;;:::i;20451:903::-;;;;;;;;;;;;;:::i;20399:39::-;;;;;;;;;;;;;:::i;3179:79::-;;;;;;;;;;;;;:::i;27423:137::-;;;;;;;;;;;;;:::i;7620:87::-;;;;;;;;;;;;;:::i;31215:467::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31215:467:0;;;;;;;;;:::i;19200:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19200:33:0;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;19200:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30318:278;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30318:278:0;;;;;;;;:::i;29267:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29267:167:0;;;;;;;;:::i;20300:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20300:38:0;;:::i;30604:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30604:110:0;-1:-1:-1;;;;;30604:110:0;;:::i;23377:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23377:94:0;;:::i;29442:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29442:143:0;;;;;;;;;;:::i;23269:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23269:95:0;-1:-1:-1;;;;;23269:95:0;;:::i;31951:330::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31951:330:0;-1:-1:-1;;;;;31951:330:0;;:::i;3549:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3549:244:0;-1:-1:-1;;;;;3549:244:0;;:::i;32289:476::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32289:476:0;-1:-1:-1;;;;;32289:476:0;;:::i;3179:79::-;3244:6;;-1:-1:-1;;;;;3244:6:0;3179:79;:::o;5349:132::-;5407:7;5434:39;5438:1;5441;5434:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5427:46;;5349:132;;;;;:::o;4743:136::-;4801:7;4828:43;4832:1;4835;4828:43;;;;;;;;;;;;;;;;;:3;:43::i;5091:250::-;5149:7;5173:6;5169:47;;-1:-1:-1;5203:1:0;5196:8;;5169:47;5240:5;;;5244:1;5240;:5;:1;5264:5;;;;;:10;5256:56;;;;-1:-1:-1;;;5256:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33128:1157;-1:-1:-1;;;;;33235:20:0;;33227:70;;;;-1:-1:-1;;;33227:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33325:1;33316:6;:10;33308:64;;;;-1:-1:-1;;;33308:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33391:7;;;;;:28;;;33412:7;:5;:7::i;:::-;-1:-1:-1;;;;;33402:17:0;:6;-1:-1:-1;;;;;33402:17:0;;33391:28;:55;;;-1:-1:-1;;;;;;33423:23:0;;33441:4;33423:23;33391:55;33383:92;;;;;-1:-1:-1;;;33383:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33489:23:0;;33507:4;33489:23;;:44;;;33526:7;:5;:7::i;:::-;-1:-1:-1;;;;;33516:17:0;:6;-1:-1:-1;;;;;33516:17:0;;33489:44;33486:792;;;33550:51;33572:6;33580:9;33591:6;33599:1;33550:21;:51::i;:::-;33486:792;;;-1:-1:-1;;;;;33622:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33646:22:0;;;;;;:11;:22;;;;;;;;33645:23;33622:46;33619:659;;;33685:62;33707:6;33715:9;33726:6;33734:12;;33685:21;:62::i;33619:659::-;-1:-1:-1;;;;;33770:19:0;;;;;;:11;:19;;;;;;;;33769:20;:46;;;;-1:-1:-1;;;;;;33793:22:0;;;;;;:11;:22;;;;;;;;33769:46;33765:513;;;33836:60;33856:6;33864:9;33875:6;33883:12;;33836:19;:60::i;33765:513::-;-1:-1:-1;;;;;33919:19:0;;;;;;:11;:19;;;;;;;;33918:20;:47;;;;-1:-1:-1;;;;;;33943:22:0;;;;;;:11;:22;;;;;;;;33942:23;33918:47;33914:364;;;33982:58;34000:6;34008:9;34019:6;34027:12;;33982:17;:58::i;33914:364::-;-1:-1:-1;;;;;34062:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34085:22:0;;;;;;:11;:22;;;;;;;;34062:45;34058:220;;;34124:51;34146:6;34154:9;34165:6;34173:1;34124:21;:51::i;34058:220::-;34208:58;34226:6;34234:9;34245:6;34253:12;;34208:17;:58::i;:::-;33128:1157;;;:::o;21991:1266::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;22053:7:::1;::::0;::::1;;22052:8;22044:35;;;::::0;;-1:-1:-1;;;22044:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22044:35:0;;;;;;;;;;;;;::::1;;22098:11;::::0;:16;;:43:::1;;;22138:3;22118:17;;:23;22098:43;22090:78;;;::::0;;-1:-1:-1;;;22090:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22090:78:0;;;;;;;;;;;;;::::1;;22179:7;:14:::0;;-1:-1:-1;;22179:14:0::1;22189:4;22179:14;::::0;;22204:55:::1;22222:4;22229:12;:10;:12::i;:::-;22243:15;22204:9;:55::i;:::-;22297:14;::::0;22345:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22345:22:0;;;;22270:24:::1;::::0;-1:-1:-1;;;;;22297:14:0;;::::1;::::0;:25:::1;::::0;22345:15;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22345:22:0;22297:119:::1;::::0;;-1:-1:-1;;;;;;22297:119:0::1;::::0;;;;;;-1:-1:-1;;;;;22297:119:0;;::::1;;::::0;::::1;::::0;22399:4:::1;22297:119:::0;;;;;;;;;;22345:22:::1;::::0;22297:119;;;;;;;-1:-1:-1;22297:119:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22297:119:0;22507:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22507:22:0;;;;22297:119;;-1:-1:-1;22297:119:0;;22427:19:::1;::::0;-1:-1:-1;;;;;22507:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;22297:119:::1;::::0;22507:22;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22507:22:0;22592:40:::1;::::0;;-1:-1:-1;;;22592:40:0;;;;22507:22;;-1:-1:-1;22560:21:0::1;::::0;-1:-1:-1;;;;;22592:19:0;::::1;::::0;::::1;::::0;22560:21;;22592:40:::1;::::0;;::::1;::::0;22540:17:::1;::::0;22592:40;;;;;;;;22560:21;22592:19;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;22651:21;22676:1;22651:26;22643:55;;;::::0;;-1:-1:-1;;;22643:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22643:55:0;;;;;;;;;;;;;::::1;;22759:11;::::0;22730:15:::1;::::0;22759:16;22756:240:::1;;22830:12;::::0;22805:38:::1;::::0;:20:::1;:9:::0;22819:5:::1;22805:13;:20::i;:38::-;22792:51;;22858:20;22908:10;22881:24;22899:4;22881:9;:24::i;:::-;:37;22858:60;;22934:50;22952:4;22967:1;22971:12;22934:9;:50::i;:::-;22756:240;;23012:4;-1:-1:-1::0;;;;;23006:20:0::1;;23035:4;23041:9;23006:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23006:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23062:51:0::1;::::0;-1:-1:-1;23080:4:0::1;23095::::0;23102:10;23062:9:::1;:51::i;:::-;23124:24;::::0;;-1:-1:-1;;;23124:24:0;;23142:4:::1;23124:24;::::0;::::1;::::0;;;-1:-1:-1;;;;;23124:9:0;::::1;::::0;::::1;::::0;:24;;;;;::::1;::::0;;;;;;;;-1:-1:-1;23124:9:0;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23202:46:0::1;::::0;;-1:-1:-1;;;23202:46:0;;23242:4:::1;23202:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;23159:30:0;::::1;::::0;::::1;::::0;23190:10:::1;::::0;23159:30;;23202:31:::1;::::0;:46;;;;;23124:24:::1;::::0;23202:46;;;;;;;;23159:30;23202:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23202:46:0;23159:90:::1;::::0;;-1:-1:-1;;;;;;23159:90:0::1;::::0;;;;;;-1:-1:-1;;;;;23159:90:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;23202:46:::1;::::0;23159:90;;;;;;;-1:-1:-1;23159:90:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;;;21991:1266:0:o;7529:83::-;7599:5;7592:12;;;;;;;;-1:-1:-1;;7592:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7566:13;;7592:12;;7599:5;;7592:12;;7599:5;7592:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7529:83;:::o;20080:30::-;;;;:::o;29593:161::-;29668:4;29685:39;29694:12;:10;:12::i;:::-;29708:7;29717:6;29685:8;:39::i;:::-;-1:-1:-1;29742:4:0;29593:161;;;;:::o;24103:1761::-;24175:7;24224;:5;:7::i;:::-;-1:-1:-1;;;;;24208:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;24208:23:0;;:51;;;-1:-1:-1;24251:8:0;;-1:-1:-1;;;;;24251:8:0;24235:12;:10;:12::i;:::-;-1:-1:-1;;;;;24235:24:0;;24208:51;24200:85;;;;;-1:-1:-1;;;24200:85:0;;;;;;;;;;;;-1:-1:-1;;;24200:85:0;;;;;;;;;;;;;;;24315:6;;:13;;24326:1;24315:10;:13::i;:::-;24306:6;:22;24347:16;24343:119;;24395:6;;24403:12;;24385:31;;;;;;;;;;;;;;;;-1:-1:-1;24438:12:0;;24431:19;;24343:119;24482:20;24505:58;24520:1;24506:11;:15;:44;;24539:11;24506:44;;;24525:11;24524:12;;24506:44;24505:56;:58::i;:::-;24626:12;;24482:81;;-1:-1:-1;24574:12:0;;24589:50;;:32;24482:81;19849:14;24589:16;:32::i;:::-;:36;;:50::i;:::-;24574:65;;24650:18;24707:1;24693:11;:15;24689:155;;;24738:24;19849:14;24757:4;24738:18;:24::i;:::-;24725:37;;24689:155;;;24808:24;19849:14;24827:4;24808:18;:24::i;:::-;24795:37;;24689:155;24882:1;24868:11;:15;24864:171;;;24915:12;;:30;;24932:12;24915:16;:30::i;:::-;24900:12;:45;24864:171;;;24993:12;;:30;;25010:12;24993:16;:30::i;:::-;24978:12;:45;24864:171;25149:9;25144:219;25168:9;:16;25164:20;;25144:219;;;25233:1;25209:7;:21;25217:9;25227:1;25217:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25217:12:0;25209:21;;;;;;;;;;;;;:25;25206:146;;;25279:57;19799:1;19849:2;:14;25279:37;25305:10;25279:7;:21;25287:9;25297:1;25287:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25287:12:0;25279:21;;;;;;;;;;;;;;:25;:37::i;:57::-;25255:7;:21;25263:9;25273:1;25263:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25263:12:0;25255:21;;;;;;;;;;;;:81;25206:146;25186:3;;25144:219;;;-1:-1:-1;25398:6:0;;25406:12;;25388:31;;;;;;;;;;;;;;;;25431:6;25426:399;25447:12;:19;25443:23;;25426:399;;;25488:21;25512:12;25525:1;25512:15;;;;;;;;;;;;;;;;;;;;;25546:9;;25512:15;;-1:-1:-1;25546:9:0;;25542:272;;;25603:13;;;25618:6;;;25590:35;;;;;;;25603:13;25590:35;;;;;;-1:-1:-1;;25590:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25590:35:0;;25603:13;;-1:-1:-1;;;;;25603:13:0;;25590:35;;25618:6;;25590:35;;;25618:6;25590:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;25576:49;;25649:6;25644:155;;25703:13;;25685:43;;;;;;;;;;;;25703:13;25721:6;;;25685:43;;;25703:13;25685:43;;;;;;-1:-1:-1;;25685:43:0;;;;;;;;;;;25703:13;;-1:-1:-1;;;;;25703:13:0;;25685:43;;;;25721:6;;25685:43;;;;;25721:6;;25685:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25751:28;;;-1:-1:-1;;;25751:28:0;;;;;;;;;;;;-1:-1:-1;;;25751:28:0;;;;;;;;;;;;;;25644:155;25542:272;;-1:-1:-1;25468:3:0;;25426:399;;;;25844:12;;25837:19;;;;;24103:1761;;;;:::o;26090:260::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;26225:116:::1;::::0;;::::1;::::0;::::1;::::0;;26261:4:::1;26225:116:::0;;;-1:-1:-1;;;;;26225:116:0;;::::1;;::::0;;::::1;::::0;;;;;;;;;26207:12:::1;:135:::0;;;;::::1;::::0;;-1:-1:-1;26207:135:0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;;-1:-1:-1::0;;;;;;26207:135:0;::::1;;-1:-1:-1::0;;26207:135:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;26225:116;;26207:135;;::::1;::::0;;;;;;;::::1;::::0;::::1;:::i;:::-;;;;26090:260:::0;;:::o;30722:87::-;30791:10;;30722:87;:::o;20251:42::-;;;;;;;;;;;;;:::o;30817:390::-;30869:14;30886:12;:10;:12::i;:::-;-1:-1:-1;;;;;30918:19:0;;;;;;:11;:19;;;;;;30869:29;;-1:-1:-1;30918:19:0;;30917:20;30909:77;;;;-1:-1:-1;;;30909:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30998:15;31021:33;31032:7;31041:12;;31021:10;:33::i;:::-;-1:-1:-1;;;;;;;;;31083:15:0;;;;;;:7;:15;;;;;;30997:57;;-1:-1:-1;31083:28:0;;30997:57;31083:19;:28::i;:::-;-1:-1:-1;;;;;31065:15:0;;;;;;:7;:15;;;;;:46;31132:7;;:20;;31144:7;31132:11;:20::i;:::-;31122:7;:30;31176:10;;:23;;31191:7;31176:14;:23::i;:::-;31163:10;:36;-1:-1:-1;;;30817:390:0:o;20217:27::-;;;;:::o;23991:100::-;24071:12;;23991:100;:::o;23483:120::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;23569:12:::1;:26:::0;23483:120::o;29762:313::-;29860:4;29877:36;29887:6;29895:9;29906:6;29877:9;:36::i;:::-;29924:121;29933:6;29941:12;:10;:12::i;:::-;29955:89;29993:6;29955:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29955:19:0;;;;;;:11;:19;;;;;;29975:12;:10;:12::i;:::-;-1:-1:-1;;;;;29955:33:0;;;;;;;;;;;;-1:-1:-1;29955:33:0;;;:89;:37;:89::i;:::-;29924:8;:121::i;:::-;-1:-1:-1;30063:4:0;29762:313;;;;;:::o;19876:27::-;;;;:::o;19952:35::-;;;;:::o;20119:32::-;;;;:::o;31690:253::-;31756:7;31795;;31784;:18;;31776:73;;;;-1:-1:-1;;;31776:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31860:19;31883:10;:8;:10::i;:::-;31860:33;-1:-1:-1;31911:24:0;:7;31860:33;31911:11;:24::i;:::-;31904:31;31690:253;-1:-1:-1;;;31690:253:0:o;7715:83::-;7781:9;;;;7715:83;:::o;20191:19::-;;;;;;:::o;30083:227::-;30180:4;30197:83;30206:12;:10;:12::i;:::-;30220:7;30229:50;30268:10;30229:11;:25;30241:12;:10;:12::i;:::-;-1:-1:-1;;;;;30229:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30229:25:0;;;:34;;;;;;;;;;;:38;:50::i;19916:23::-;;;-1:-1:-1;;;;;19916:23:0;;:::o;19994:31::-;;;;:::o;26502:378::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;26610:12:::1;:19:::0;26602:27;::::1;26594:59;;;::::0;;-1:-1:-1;;;26594:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26594:59:0;;;;;;;;;;;;;::::1;;26673:13;::::0;;;:6:::1;:13;::::0;;;;;::::1;;26672:14;26664:42;;;::::0;;-1:-1:-1;;;26664:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26664:42:0;;;;;;;;;;;;;::::1;;26731:12;:19:::0;-1:-1:-1;;26731:23:0;26723:31;::::1;26719:123;;;26793:12;26806:19:::0;;-1:-1:-1;;26806:23:0;;;26793:37;::::1;;;;;;;;;;;;;;;26771:12;26784:5;26771:19;;;;;;;;;::::0;;;::::1;::::0;;;:59;;:19:::1;::::0;;::::1;::::0;;::::1;:59:::0;;-1:-1:-1;;26771:59:0::1;;::::0;;::::1;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;;;;;26771:59:0;;::::1;;::::0;;;::::1;-1:-1:-1::0;;;;;26771:59:0::1;::::0;::::1;;::::0;;-1:-1:-1;26771:59:0;;::::1;::::0;;:19;;:59:::1;::::0;;;::::1;::::0;;;;::::1;;::::0;;::::1;-1:-1:-1::0;;26771:59:0;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;26719:123:0::1;26854:12;:18;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;26854:18:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;26854:18:0;;;;::::1;;::::0;::::1;::::0;::::1;:::i;:::-;;;;;26502:378:::0;:::o;20351:41::-;;;-1:-1:-1;;;;;20351:41:0;;:::o;23615:364::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;23741:15:::1;::::0;:20;23733:58:::1;;;::::0;;-1:-1:-1;;;23733:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23812:20;:37:::0;;;;23860:16:::1;:29:::0;23900:20:::1;:37:::0;23968:3:::1;23950:15;:21:::0;23615:364::o;20158:26::-;;;;:::o;27062:246::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;27188:12:::1;:19:::0;27180:27;::::1;27172:80;;;;-1:-1:-1::0;;;27172:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27293:7;27263:12;27276:5;27263:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;;-1:-1:-1;;27263:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;27062:246:0:o;29061:198::-;-1:-1:-1;;;;;29151:20:0;;29127:7;29151:20;;;:11;:20;;;;;;;;29147:49;;;-1:-1:-1;;;;;;29180:16:0;;;;;;:7;:16;;;;;;29173:23;;29147:49;-1:-1:-1;;;;;29234:16:0;;;;;;:7;:16;;;;;;29214:37;;:19;:37::i;3393:148::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;3484:6:::1;::::0;3463:40:::1;::::0;3500:1:::1;::::0;-1:-1:-1;;;;;3484:6:0::1;::::0;3463:40:::1;::::0;3500:1;;3463:40:::1;3514:6;:19:::0;;-1:-1:-1;;;;;;3514:19:0::1;::::0;;3393:148::o;20032:35::-;;;;:::o;20451:903::-;1491:12;;;;;;;;:31;;;1507:15;:13;:15::i;:::-;1491:47;;;-1:-1:-1;1527:11:0;;;;1526:12;1491:47;1483:106;;;;-1:-1:-1;;;1483:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:19;1621:12;;;;;;1620:13;1640:83;;;;1669:12;:19;;-1:-1:-1;;;;1669:19:0;;;;;1697:18;1684:4;1697:18;;;1640:83;20526:34:::1;;;;;;;;;;;;;;-1:-1:-1::0;;;20526:34:0::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;20526:34:0::1;;::::0;:12:::1;:34::i;:::-;20571:31;19799:1;20571:14;:31::i;:::-;20613:16;:14;:16::i;:::-;20665;20650:12;:31:::0;-1:-1:-1;;20693:7:0::1;:38:::0;20763:12:::1;:10;:12::i;:::-;20752:8;:23:::0;;-1:-1:-1;;;;;;20752:23:0::1;-1:-1:-1::0;;;;;20752:23:0;;;::::1;::::0;;;::::1;::::0;;20811:3:::1;20796:12;:18:::0;20862:7:::1;::::0;20853:4:::1;-1:-1:-1::0;20837:22:0;;;:7:::1;:22;::::0;;;;;;;:32;;;;20921:12:::1;::::0;20885:49;;;;;;;20853:4;;-1:-1:-1;;20885:49:0::1;::::0;;;;;;;;::::1;20967:10;20947:17;:30:::0;20988:7:::1;:15:::0;;-1:-1:-1;;20988:15:0::1;::::0;;21028:9:::1;21014:11;:23:::0;21063:4:::1;21048:12;:19:::0;21088:28:::1;21103:12;:10;:12::i;:::-;21088:14;:28::i;:::-;21127:29;21150:4;21127:14;:29::i;:::-;21177:15;:80:::0;;-1:-1:-1;;;;;;21177:80:0;;::::1;21214:42;21177:80;::::0;;;21268:14:::1;:78:::0;;;;::::1;21303:42;21268:78;::::0;;1741:57;;;;1785:5;1770:20;;-1:-1:-1;;1770:20:0;;;1741:57;20451:903;:::o;20399:39::-;;;-1:-1:-1;;;;;20399:39:0;;:::o;27423:137::-;27533:12;:19;27423:137;:::o;7620:87::-;7692:7;7685:14;;;;;;;;-1:-1:-1;;7685:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7659:13;;7685:14;;7692:7;;7685:14;;7692:7;7685:14;;;;;;;;;;;;;;;;;;;;;;;;31215:467;31305:7;31344:12;;31333:7;:23;;31325:67;;;;;-1:-1:-1;;;31325:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31408:17;31403:272;;31443:15;31466:33;31477:7;31486:12;;31466:10;:33::i;:::-;-1:-1:-1;31442:57:0;;-1:-1:-1;31514:14:0;;-1:-1:-1;;;;31514:14:0;31403:272;31563:23;31593:33;31604:7;31613:12;;31593:10;:33::i;:::-;-1:-1:-1;31561:65:0;;-1:-1:-1;31641:22:0;;-1:-1:-1;;;;31641:22:0;19200:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19200:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19200:33:0;;;;-1:-1:-1;;;;;19200:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30318:278::-;30420:4;30437:129;30446:12;:10;:12::i;:::-;30460:7;30469:96;30508:15;30469:96;;;;;;;;;;;;;;;;;:11;:25;30481:12;:10;:12::i;:::-;-1:-1:-1;;;;;30469:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30469:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;29267:167::-;29345:4;29362:42;29372:12;:10;:12::i;:::-;29386:9;29397:6;29362:9;:42::i;20300:38::-;;;;;;;;;;;;;;;:::o;30604:110::-;-1:-1:-1;;;;;30686:20:0;30662:4;30686:20;;;:11;:20;;;;;;;;;30604:110::o;23377:94::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;23442:14:::1;::::0;;;:6:::1;:14;::::0;;;;:21;;-1:-1:-1;;23442:21:0::1;23459:4;23442:21;::::0;;23377:94::o;29442:143::-;-1:-1:-1;;;;;29550:18:0;;;29523:7;29550:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29442:143::o;23269:95::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;23338:8:::1;:18:::0;;-1:-1:-1;;;;;;23338:18:0::1;-1:-1:-1::0;;;;;23338:18:0;;;::::1;::::0;;;::::1;::::0;;23269:95::o;31951:330::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32031:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32030:21;32022:61;;;::::0;;-1:-1:-1;;;32022:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32097:16:0;::::1;32116:1;32097:16:::0;;;:7:::1;:16;::::0;;;;;:20;32094:108:::1;;-1:-1:-1::0;;;;;32173:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32153:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32134:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32094:108:::1;-1:-1:-1::0;;;;;32212:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32212:27:0::1;32235:4;32212:27:::0;;::::1;::::0;;;32250:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32250:23:0::1;::::0;;::::1;::::0;;31951:330::o;3549:244::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3638:22:0;::::1;3630:73;;;;-1:-1:-1::0;;;3630:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3740:6;::::0;3719:38:::1;::::0;-1:-1:-1;;;;;3719:38:0;;::::1;::::0;3740:6:::1;::::0;3719:38:::1;::::0;3740:6:::1;::::0;3719:38:::1;3768:6;:17:::0;;-1:-1:-1;;;;;;3768:17:0::1;-1:-1:-1::0;;;;;3768:17:0;;;::::1;::::0;;;::::1;::::0;;3549:244::o;32289:476::-;3316:12;:10;:12::i;:::-;3306:6;;-1:-1:-1;;;;;3306:6:0;;;:22;;;3298:67;;;;;-1:-1:-1;;;3298:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3298:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32368:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32360:60;;;::::0;;-1:-1:-1;;;32360:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32436:9;32431:327;32455:9;:16:::0;32451:20;::::1;32431:327;;;32513:7;-1:-1:-1::0;;;;;32497:23:0::1;:9;32507:1;32497:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32497:12:0::1;:23;32493:254;;;32556:9;32566:16:::0;;-1:-1:-1;;32566:20:0;;;32556:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;32541:9:::1;:12:::0;;-1:-1:-1;;;;;32556:31:0;;::::1;::::0;32551:1;;32541:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32541:46:0::1;-1:-1:-1::0;;;;;32541:46:0;;::::1;;::::0;;32606:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32645:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32645:28:0::1;::::0;;32692:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32692:15:0;;;;;-1:-1:-1;;;;;;32692:15:0::1;::::0;;;;;32726:5:::1;;32493:254;32473:3;;32431:327;;;;32289:476:::0;:::o;5489:189::-;5575:7;5610:12;5603:5;5595:28;;;;-1:-1:-1;;;5595:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5634:9;5650:1;5646;:5;;;;;;;5489:189;-1:-1:-1;;;;;5489:189:0:o;4887:192::-;4973:7;5009:12;5001:6;;;;4993:29;;;;-1:-1:-1;;;4993:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5045:5:0;;;4887:192::o;35915:619::-;36039:15;36056:23;36081:12;36095:23;36120:12;36136:32;36147:7;36156:11;36136:10;:32::i;:::-;-1:-1:-1;;;;;36197:15:0;;;;;;:7;:15;;;;;;36038:130;;-1:-1:-1;36038:130:0;;-1:-1:-1;36038:130:0;;-1:-1:-1;36038:130:0;-1:-1:-1;36038:130:0;-1:-1:-1;36197:28:0;;36217:7;36197:19;:28::i;:::-;-1:-1:-1;;;;;36179:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36254:7;:15;;;;:28;;36274:7;36254:19;:28::i;:::-;-1:-1:-1;;;;;36236:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;36314:18;;;;;:7;:18;;;;;:39;;36337:15;36314:22;:39::i;:::-;-1:-1:-1;;;;;36293:18:0;;;;;;:7;:18;;;;;;;;:60;;;;36385:7;:18;;;;:39;;36408:15;36385:22;:39::i;:::-;-1:-1:-1;;;;;36364:18:0;;;;;;:7;:18;;;;;:60;36443:23;36455:4;36461;36443:11;:23::i;:::-;36499:9;-1:-1:-1;;;;;36482:44:0;36491:6;-1:-1:-1;;;;;36482:44:0;;36510:15;36482:44;;;;;;;;;;;;;;;;;;35915:619;;;;;;;;;:::o;35364:543::-;35488:15;35505:23;35530:12;35544:23;35569:12;35585:32;35596:7;35605:11;35585:10;:32::i;:::-;-1:-1:-1;;;;;35646:15:0;;;;;;:7;:15;;;;;;35487:130;;-1:-1:-1;35487:130:0;;-1:-1:-1;35487:130:0;;-1:-1:-1;35487:130:0;-1:-1:-1;35487:130:0;-1:-1:-1;35646:28:0;;35666:7;35646:19;:28::i;:::-;-1:-1:-1;;;;;35628:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35703:7;:15;;;;:28;;35723:7;35703:19;:28::i;:::-;-1:-1:-1;;;;;35685:15:0;;;;;;;:7;:15;;;;;;:46;;;;35763:18;;;;;;;:39;;35786:15;35763:22;:39::i;34793:563::-;34915:15;34932:23;34957:12;34971:23;34996:12;35012:32;35023:7;35032:11;35012:10;:32::i;:::-;-1:-1:-1;;;;;35073:15:0;;;;;;:7;:15;;;;;;34914:130;;-1:-1:-1;34914:130:0;;-1:-1:-1;34914:130:0;;-1:-1:-1;34914:130:0;-1:-1:-1;34914:130:0;-1:-1:-1;35073:28:0;;34914:130;35073:19;:28::i;34299:486::-;34419:15;34436:23;34461:12;34475:23;34500:12;34516:32;34527:7;34536:11;34516:10;:32::i;:::-;-1:-1:-1;;;;;34577:15:0;;;;;;:7;:15;;;;;;34418:130;;-1:-1:-1;34418:130:0;;-1:-1:-1;34418:130:0;;-1:-1:-1;34418:130:0;-1:-1:-1;34418:130:0;-1:-1:-1;34577:28:0;;34418:130;34577:19;:28::i;2253:106::-;2341:10;2253:106;:::o;32773:347::-;-1:-1:-1;;;;;32876:19:0;;32868:68;;;;-1:-1:-1;;;32868:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32955:21:0;;32947:68;;;;-1:-1:-1;;;32947:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33028:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33080:32;;;;;;;;;;;;;;;;;32773:347;;;:::o;4554:181::-;4612:7;4644:5;;;4668:6;;;;4660:46;;;;;-1:-1:-1;;;4660:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;993:171;1049:7;1086:1;1077:5;:10;;1069:55;;;;;-1:-1:-1;;;1069:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:5:0;993:171::o;27803:1250::-;27901:4;27923:11;28163:4;28157:11;28291:2;28285:4;28281:13;28938:1;28906:13;28814:4;28808:11;28778;28733:1;28703:11;28674:5;28667;28663:17;28320:691;28310:701;27803:1250;-1:-1:-1;;;;;;27803:1250:0:o;36697:445::-;36777:7;36786;36795;36804;36813;36834:23;36859:12;36875:33;36887:7;36896:11;36875;:33::i;:::-;36833:75;;;;36919:19;36942:10;:8;:10::i;:::-;36919:33;;36964:15;36981:23;37006:12;37022:39;37034:7;37043:4;37049:11;37022;:39::i;:::-;36963:98;;;;-1:-1:-1;36963:98:0;;-1:-1:-1;37112:15:0;;-1:-1:-1;37129:4:0;;-1:-1:-1;36697:445:0;;-1:-1:-1;;;;;;;36697:445:0:o;37763:163::-;37804:7;37825:15;37842;37861:19;:17;:19::i;:::-;37824:56;;-1:-1:-1;37824:56:0;-1:-1:-1;37898:20:0;37824:56;;37898:11;:20::i;:::-;37891:27;;;;37763:163;:::o;1809:174::-;1892:4;1938:17;1970:7;1809:174;:::o;7152:177::-;1491:12;;;;;;;;:31;;;1507:15;:13;:15::i;:::-;1491:47;;;-1:-1:-1;1527:11:0;;;;1526:12;1491:47;1483:106;;;;-1:-1:-1;;;1483:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:19;1621:12;;;;;;1620:13;1640:83;;;;1669:12;:19;;-1:-1:-1;;;;1669:19:0;;;;;1697:18;1684:4;1697:18;;;1640:83;7248:26:::1;:24;:26::i;:::-;7285:36;7308:4;7314:6;7285:22;:36::i;:::-;1745:14:::0;1741:57;;;1785:5;1770:20;;-1:-1:-1;;1770:20:0;;;7152:177;;;:::o;10317:90::-;10378:9;:21;;-1:-1:-1;;10378:21:0;;;;;;;;;;;;10317:90::o;2836:129::-;1491:12;;;;;;;;:31;;;1507:15;:13;:15::i;:::-;1491:47;;;-1:-1:-1;1527:11:0;;;;1526:12;1491:47;1483:106;;;;-1:-1:-1;;;1483:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:19;1621:12;;;;;;1620:13;1640:83;;;;1669:12;:19;;-1:-1:-1;;;;1669:19:0;;;;;1697:18;1684:4;1697:18;;;1640:83;2894:26:::1;:24;:26::i;:::-;2931;:24;:26::i;:::-;1745:14:::0;1741:57;;;1785:5;1770:20;;-1:-1:-1;;1770:20:0;;;2836:129;:::o;36542:147::-;36620:7;;:17;;36632:4;36620:11;:17::i;:::-;36610:7;:27;36661:10;;:20;;36676:4;36661:14;:20::i;:::-;36648:10;:33;-1:-1:-1;;36542:147:0:o;37150:263::-;37231:7;;;37275:35;37304:5;37275:24;:7;37287:11;37275;:24::i;:35::-;37260:50;-1:-1:-1;37321:23:0;37347:17;:7;37260:50;37347:11;:17::i;:::-;37321:43;37400:4;;-1:-1:-1;37150:263:0;;-1:-1:-1;;;;37150:263:0:o;37421:334::-;37516:7;;;;37572:24;:7;37584:11;37572;:24::i;:::-;37554:42;-1:-1:-1;37607:12:0;37622:21;:4;37631:11;37622:8;:21::i;:::-;37607:36;-1:-1:-1;37654:23:0;37680:17;:7;37607:36;37680:11;:17::i;:::-;37716:7;;;;-1:-1:-1;37742:4:0;;-1:-1:-1;37421:334:0;;-1:-1:-1;;;;;37421:334:0:o;37934:581::-;38031:7;;38067:12;;37984:7;;;;;38096:294;38120:9;:16;38116:20;;38096:294;;;38186:7;38162;:21;38170:9;38180:1;38170:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38170:12:0;38162:21;;;;;;;;;;;;;:31;;:66;;;38221:7;38197;:21;38205:9;38215:1;38205:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38205:12:0;38197:21;;;;;;;;;;;;;:31;38162:66;38158:102;;;38238:7;;38247:12;;38230:30;;;;;;;;;38158:102;38285:34;38297:7;:21;38305:9;38315:1;38305:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38305:12:0;38297:21;;;;;;;;;;;;;38285:7;;:11;:34::i;:::-;38275:44;;38344:34;38356:7;:21;38364:9;38374:1;38364:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38364:12:0;38356:21;;;;;;;;;;;;;38344:7;;:11;:34::i;:::-;38334:44;-1:-1:-1;38138:3:0;;38096:294;;;-1:-1:-1;38426:12:0;;38414:7;;:25;;:11;:25::i;:::-;38404:7;:35;38400:71;;;38449:7;;38458:12;;38441:30;;;;;;;;38400:71;38490:7;;-1:-1:-1;38499:7:0;-1:-1:-1;37934:581:0;;;:::o;2180:65::-;1491:12;;;;;;;;:31;;;1507:15;:13;:15::i;:::-;1491:47;;;-1:-1:-1;1527:11:0;;;;1526:12;1491:47;1483:106;;;;-1:-1:-1;;;1483:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:19;1621:12;;;;;;1620:13;1640:83;;;;1669:12;:19;;-1:-1:-1;;;;1669:19:0;;;;;1697:18;1684:4;1697:18;;;1745:14;1741:57;;;1785:5;1770:20;;-1:-1:-1;;1770:20:0;;;2180:65;:::o;7337:184::-;1491:12;;;;;;;;:31;;;1507:15;:13;:15::i;:::-;1491:47;;;-1:-1:-1;1527:11:0;;;;1526:12;1491:47;1483:106;;;;-1:-1:-1;;;1483:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:19;1621:12;;;;;;1620:13;1640:83;;;;1669:12;:19;;-1:-1:-1;;;;1669:19:0;;;;;1697:18;1684:4;1697:18;;;1640:83;7447:12;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;7470:16:0;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;7497:9:0::1;:14:::0;;-1:-1:-1;;7497:14:0::1;7509:2;7497:14;::::0;;1741:57;;;;1785:5;1770:20;;-1:-1:-1;;1770:20:0;;;7337:184;;;:::o;2973:198::-;1491:12;;;;;;;;:31;;;1507:15;:13;:15::i;:::-;1491:47;;;-1:-1:-1;1527:11:0;;;;1526:12;1491:47;1483:106;;;;-1:-1:-1;;;1483:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:19;1621:12;;;;;;1620:13;1640:83;;;;1669:12;:19;;-1:-1:-1;;;;1669:19:0;;;;;1697:18;1684:4;1697:18;;;1640:83;3041:17:::1;3061:12;:10;:12::i;:::-;3084:6;:18:::0;;-1:-1:-1;;;;;;3084:18:0::1;-1:-1:-1::0;;;;;3084:18:0;::::1;::::0;;::::1;::::0;;;3118:43:::1;::::0;3084:18;;-1:-1:-1;3084:18:0;-1:-1:-1;;3118:43:0::1;::::0;-1:-1:-1;;3118:43:0::1;1731:1;1745:14:::0;1741:57;;;1785:5;1770:20;;-1:-1:-1;;1770:20:0;;;2973:198;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://7e687ec60552f4110059d13b6dc7ad249a8b3a94fee3a23aa1af80ca18f7eb6f
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.