ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 Tiger
Holders
100
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TIGERINU
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-03 */ // SPDX-License-Identifier: GPL-3.0 //https://t.me/Tigerinu_Eth //Tiger Inu | Restoring decentralization to memes //twitter.com/tigerinu_eth pragma solidity ^0.8.3; 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 tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = 0xfD880b9BB313aCAbE12da48D3b6177286E59E3a8; emit OwnershipTransferred(address(0), _owner); } function owner() public view virtual 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; } } 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 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; } 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 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; } contract TIGERINU is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; //_isCommunity = Can Buy at Launch! <-----for community //_isBlacklisted = Can not buy or sell or transfer tokens at all <-----for bots! mapping (address => bool) public _isCommunity; mapping (address => bool) public _isBlacklisted; //private launch - Only approved people can buy! //need to add uniswapV2Pair address to communiity list in order to add liquidity bool public onlyCommunity = true; address[] private _excluded; address payable private _promotionsWalletAddress = payable(0x2A2Dbd5A6b9D82AEA8371648Ed5B2a5957512c36); uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Tiger Inu"; string private _symbol = "Tiger"; uint8 private _decimals = 9; //refection fee uint256 public _reflectionFee = 1; uint256 private _previousReflectionFee = _reflectionFee; //token wallet fee for burns and giveaways uint256 public _tokenGiveawayFee = 1; uint256 private _previousTokenGiveawayFee = _tokenGiveawayFee; //setting the fees for auto LP and marketing wallet - Also need to change ratio if not 50/50 uint256 public _liquidityFee = 5; uint256 public _promoFee = 8; //fee for the auto LP and the marketing wallet uint256 private _liquidityAndPromoFee = _liquidityFee+_promoFee; uint256 private _previousLiquidityAndPromoFee = _liquidityAndPromoFee; //divide the token balance by this number to calculate the amount to swap for promo vs liquidity //2 = 50/50, 3 = 1/3 to promo, 4 = 1/4 to promo uint256 private _liqToPromoFraction = 2; //max wallet holding 20000000 * 10**6 * 10**9 is 2% of 1000000000 * 10**6 * 10**9 (total supply) uint256 public _maxWalletToken = 20000000 * 10**6 * 10**9; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; //this is the maximum transaction amount (in tokens) at launch this is set to 2% of total supply uint256 public _maxTxAmount = 20000000 * 10**6 * 10**9; //this is the number of tokens to accumulate before adding liquidity or taking the promotion fee //amount (in tokens) at launch set to 0.5% of total supply uint256 public _numTokensSellToAddToLiquidity = 5000000 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(0x000000000000000000000000000000000000dEaD)] = true; _isExcludedFromFee[address(0xfD880b9BB313aCAbE12da48D3b6177286E59E3a8)] = true; emit Transfer(address(0), owner(), _tTotal); } 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 override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_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 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 isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); 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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDev(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } //set Only Community Members function setOnlyCommunity(bool _enabled) public onlyOwner { onlyCommunity = _enabled; } //set a wallet address so that it does not have to pay transaction fees function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } //set a wallet address so that it has to pay transaction fees function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } //set the number of tokens required to activate auto-liquidity and promotion wallet payout function setNumTokensSellToAddToLiquidityt(uint256 numTokensSellToAddToLiquidity) external onlyOwner() { _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity; } //set the fee that is automatically distributed to all holders (reflection) function setFeeReflectionPercent(uint256 reflectionFee) external onlyOwner() { _reflectionFee = reflectionFee; } //ratio to split the token balance before the swap to BNB for auto liquidty and promotion wallet //eg. (2 = split 50/50) (3 = 1/3 is sent to promo and 2/3 to liquidity) //not the best solution but provides enough flexibility - solidity math is terrible! function setFeeLiquidityToPromoFraction(uint256 liqToPromoFraction) external onlyOwner() { _liqToPromoFraction = liqToPromoFraction; } //set fee for the giveaway and manual burn wallet function setFeeTokenGiveawayPercent(uint256 tokenGiveawayFee) external onlyOwner() { _tokenGiveawayFee = tokenGiveawayFee; } //set fee for auto liquidity function setFeeLiquidityPercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } //set fee for the marketing (BNB) wallet function setFeePromoPercent(uint256 promoFee) external onlyOwner() { _promoFee = promoFee; } //set the Max transaction amount (percent of total supply) function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } //set the Max transaction amount (in tokens) function setMaxTxTokens(uint256 maxTxTokens) external onlyOwner() { _maxTxAmount = maxTxTokens; } //settting the maximum permitted wallet holding (percent of total supply) function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() { _maxWalletToken = _tTotal.mul(maxWallPercent).div( 10**2 ); } //settting the maximum permitted wallet holding (in tokens) function setMaxWalletTokens(uint256 maxWallTokens) external onlyOwner() { _maxWalletToken = maxWallTokens; } //toggle on and off to activate auto liquidity and the promo wallet function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //receive ETH from UNISWAP Router receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } //Remove from Community function removeFromCommunity(address account) external onlyOwner { _isCommunity[account] = false; } //Remove from Blacklist function removeFromBlackList(address account) external onlyOwner { _isBlacklisted[account] = false; } //adding people to the Tiger Community approved list - these people are the only ones that will be able to buy at launch! function addToCommunity(address[] calldata addresses) external onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isCommunity[addresses[i]] = true; } } //adding multiple addresses to the blacklist - Used to manually block known bots and scammers function addToBlackList(address[] calldata addresses) external onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isBlacklisted[addresses[i]] = true; } } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tDev, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tDev); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateReflectionFee(tAmount); uint256 tLiquidity = calculateLiquidityAndPromoFee(tAmount); uint256 tDev = calculateTokenGiveawayFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tDev); return (tTransferAmount, tFee, tLiquidity, tDev); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rDev = tDev.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rDev); 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 = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeDev(uint256 tDev) private { uint256 currentRate = _getRate(); uint256 rDev = tDev.mul(currentRate); _rOwned[_promotionsWalletAddress] = _rOwned[_promotionsWalletAddress].add(rDev); if(_isExcluded[_promotionsWalletAddress]) _tOwned[_promotionsWalletAddress] = _tOwned[_promotionsWalletAddress].add(tDev); } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectionFee).div( 10**2 ); } function calculateTokenGiveawayFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_tokenGiveawayFee).div( 10**2 ); } function calculateLiquidityAndPromoFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityAndPromoFee).div( 10**2 ); } function removeAllFee() private { if(_reflectionFee == 0 && _liquidityAndPromoFee == 0) return; _previousReflectionFee = _reflectionFee; _previousTokenGiveawayFee = _tokenGiveawayFee; _previousLiquidityAndPromoFee = _liquidityAndPromoFee; _reflectionFee = 0; _tokenGiveawayFee = 0; _liquidityAndPromoFee = 0; } function restoreAllFee() private { _reflectionFee = _previousReflectionFee; _tokenGiveawayFee = _previousTokenGiveawayFee; _liquidityAndPromoFee = _previousLiquidityAndPromoFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { 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 from, address to, uint256 amount ) private { //limits the amount of tokens that each person can buy - launch limit is 2% of total supply! if (to != owner() && to != address(this) && to != address(0x000000000000000000000000000000000000dEaD) && to != uniswapV2Pair && to != _promotionsWalletAddress){ uint256 heldTokens = balanceOf(to); require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");} //if onlyCommunity is set to true, then only people that have been approved as part of the Toger community can buy if (onlyCommunity){ require(_isCommunity[to], "Only Community Can Buy!");} //blacklisted addreses can not buy! If you have ever used a bot, or scammed anybody, then you're wallet address will probably be blacklisted require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted"); require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); //limit the maximum number of tokens that can be bought or sold in one transaction if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = _numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } bool takeFee = true; require(to != address(0), "ERC20: transfer to the zero address"); if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function sendToPromoWallet(uint256 amount) private { _promotionsWalletAddress.transfer(amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 promoTok = contractTokenBalance.div(_liqToPromoFraction); uint256 nonPromoTok = contractTokenBalance.sub(promoTok); swapTokensForEth(promoTok); if(address(this).balance > 0) sendToPromoWallet(address(this).balance); //Get new balance, split into two and liquify uint256 half = nonPromoTok.div(2); uint256 otherHalf = nonPromoTok.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!"); if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount); require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!"); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDev(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount); require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!"); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDev(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount); require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!"); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDev(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isCommunity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_promoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenGiveawayFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToCommunity","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"onlyCommunity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeeLiquidityPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liqToPromoFraction","type":"uint256"}],"name":"setFeeLiquidityToPromoFraction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"promoFee","type":"uint256"}],"name":"setFeePromoPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"}],"name":"setFeeReflectionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenGiveawayFee","type":"uint256"}],"name":"setFeeTokenGiveawayPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxTokens","type":"uint256"}],"name":"setMaxTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallTokens","type":"uint256"}],"name":"setMaxWalletTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidityt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setOnlyCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526008805460ff19166001179055600a80546001600160a01b031916732a2dbd5a6b9d82aea8371648ed5b2a5957512c3617905569d3c21bcecceda1000000600b819055620000559060001962000606565b6200006390600019620005af565b600c5560408051808201909152600980825268546967657220496e7560b81b60209092019182526200009891600e91620004be565b50604080518082019091526005808252642a34b3b2b960d91b6020909201918252620000c791600f91620004be565b506010805460ff1916600917905560016011819055601281905560138190556014556005601581905560086016819055620001029162000594565b6017819055601855600260195569043c33c1937564800000601a819055601b805461ff001916610100179055601c5569010f0cf064dd59200000601d553480156200014c57600080fd5b50600080546001600160a01b03191673fd880b9bb313acabe12da48d3b6177286e59e3a890811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600c5460016000620001ba6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023157600080fd5b505afa15801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c919062000564565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b557600080fd5b505afa158015620002ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f0919062000564565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200033957600080fd5b505af11580156200034e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000374919062000564565b6001600160601b0319606091821b811660a0529082901b16608052600160046000620003a86000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600490925281208054831660019081179091557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd805484168217905573fd880b9bb313acabe12da48d3b6177286e59e3a89091527f450fb84597fa60110200d376300b1f1a91f0af5b5992bb1c75ad187a0f5081538054909216179055620004676000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620004af91815260200190565b60405180910390a3506200063d565b828054620004cc90620005c9565b90600052602060002090601f016020900481019282620004f057600085556200053b565b82601f106200050b57805160ff19168380011785556200053b565b828001600101855582156200053b579182015b828111156200053b5782518255916020019190600101906200051e565b50620005499291506200054d565b5090565b5b808211156200054957600081556001016200054e565b60006020828403121562000576578081fd5b81516001600160a01b03811681146200058d578182fd5b9392505050565b60008219821115620005aa57620005aa62000627565b500190565b600082821015620005c457620005c462000627565b500390565b600181811c90821680620005de57607f821691505b602082108114156200060057634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200062257634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c61323d6200069a600039600081816105e7015281816119ac0152611d4d015260008181610428015281816124a001528181612576015281816125b20152818161265e0152612685015261323d6000f3fe60806040526004361061031e5760003560e01c80635ce9bb33116101ab5780639521cff5116100f7578063dd62ed3e11610095578063f0f0681c1161006f578063f0f0681c146109b6578063f2fde38b146109d0578063f5e22efd146109f0578063ff89757014610a1057610325565b8063dd62ed3e14610930578063e6039f9214610976578063ea2f0b371461099657610325565b8063a9059cbb116100d1578063a9059cbb146108ba578063b3f22ce3146108da578063c49b9a80146108f0578063d543dbeb1461091057610325565b80639521cff51461086557806395d89b4114610885578063a457c2d71461089a57610325565b806378109e541161016457806382bf293c1161013e57806382bf293c146107ce57806388f82020146107ee5780638da5cb5b146108275780638eeb380e1461084557610325565b806378109e54146107825780637d1db4a5146107985780638097e697146107ae57610325565b80635ce9bb33146106e15780635cfd7df41461070157806365606e85146107215780636bc87c3a1461073757806370a082311461074d578063715018a61461076d57610325565b80633685d4191161026a57806349bd5a5e116102235780634cdc83cb116101fd5780634cdc83cb1461064857806352390c02146106685780635342acb41461068857806356df6d84146106c157610325565b806349bd5a5e146105d55780634a49ac4c146106095780634a74bb021461062957610325565b80633685d4191461051f578063395093511461053f5780633bd5d1731461055f5780633e417a761461057f578063437823ec146105955780634549b039146105b557610325565b80631694505e116102d757806323b872dd116102b157806323b872dd146104a75780632d838119146104c7578063313ce567146104e75780633206b4aa1461050957610325565b80631694505e1461041657806318160ddd146104625780631cdd3be31461047757610325565b806306fdde031461032a578063095ea7b3146103555780630f285aee146103855780630fec5dd0146103b557806312ff6888146103d757806313114a9d146103f757610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a30565b60405161034c9190612f56565b60405180910390f35b34801561036157600080fd5b50610375610370366004612e31565b610ac2565b604051901515815260200161034c565b34801561039157600080fd5b506103756103a0366004612d81565b60066020526000908152604090205460ff1681565b3480156103c157600080fd5b506103d56103d0366004612ee6565b610ad9565b005b3480156103e357600080fd5b506103d56103f2366004612ee6565b610b11565b34801561040357600080fd5b50600d545b60405190815260200161034c565b34801561042257600080fd5b5061044a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161034c565b34801561046e57600080fd5b50600b54610408565b34801561048357600080fd5b50610375610492366004612d81565b60076020526000908152604090205460ff1681565b3480156104b357600080fd5b506103756104c2366004612df1565b610b40565b3480156104d357600080fd5b506104086104e2366004612ee6565b610ba9565b3480156104f357600080fd5b5060105460405160ff909116815260200161034c565b34801561051557600080fd5b5061040860115481565b34801561052b57600080fd5b506103d561053a366004612d81565b610c2f565b34801561054b57600080fd5b5061037561055a366004612e31565b610e1f565b34801561056b57600080fd5b506103d561057a366004612ee6565b610e55565b34801561058b57600080fd5b5061040860165481565b3480156105a157600080fd5b506103d56105b0366004612d81565b610f41565b3480156105c157600080fd5b506104086105d0366004612efe565b610f8f565b3480156105e157600080fd5b5061044a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561061557600080fd5b506103d5610624366004612d81565b61101e565b34801561063557600080fd5b50601b5461037590610100900460ff1681565b34801561065457600080fd5b506103d5610663366004612ee6565b611069565b34801561067457600080fd5b506103d5610683366004612d81565b611098565b34801561069457600080fd5b506103756106a3366004612d81565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106cd57600080fd5b506103d56106dc366004612ee6565b6111eb565b3480156106ed57600080fd5b506103d56106fc366004612ee6565b61121a565b34801561070d57600080fd5b506103d561071c366004612ee6565b611249565b34801561072d57600080fd5b5061040860135481565b34801561074357600080fd5b5061040860155481565b34801561075957600080fd5b50610408610768366004612d81565b611278565b34801561077957600080fd5b506103d56112da565b34801561078e57600080fd5b50610408601a5481565b3480156107a457600080fd5b50610408601c5481565b3480156107ba57600080fd5b506103d56107c9366004612ee6565b61134e565b3480156107da57600080fd5b506103d56107e9366004612ee6565b61137d565b3480156107fa57600080fd5b50610375610809366004612d81565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083357600080fd5b506000546001600160a01b031661044a565b34801561085157600080fd5b506103d5610860366004612ecc565b6113cd565b34801561087157600080fd5b506103d5610880366004612d81565b61140a565b34801561089157600080fd5b5061033f611455565b3480156108a657600080fd5b506103756108b5366004612e31565b611464565b3480156108c657600080fd5b506103756108d5366004612e31565b6114b3565b3480156108e657600080fd5b50610408601d5481565b3480156108fc57600080fd5b506103d561090b366004612ecc565b6114c0565b34801561091c57600080fd5b506103d561092b366004612ee6565b61153e565b34801561093c57600080fd5b5061040861094b366004612db9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561098257600080fd5b506103d5610991366004612ee6565b611588565b3480156109a257600080fd5b506103d56109b1366004612d81565b6115b7565b3480156109c257600080fd5b506008546103759060ff1681565b3480156109dc57600080fd5b506103d56109eb366004612d81565b611602565b3480156109fc57600080fd5b506103d5610a0b366004612e5c565b6116ec565b348015610a1c57600080fd5b506103d5610a2b366004612e5c565b611799565b6060600e8054610a3f90613136565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6b90613136565b8015610ab85780601f10610a8d57610100808354040283529160200191610ab8565b820191906000526020600020905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b6000610acf338484611841565b5060015b92915050565b6000546001600160a01b03163314610b0c5760405162461bcd60e51b8152600401610b0390613023565b60405180910390fd5b601a55565b6000546001600160a01b03163314610b3b5760405162461bcd60e51b8152600401610b0390613023565b601155565b6000610b4d848484611965565b610b9f8433610b9a856040518060600160405280602881526020016131bb602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e2c565b611841565b5060019392505050565b6000600c54821115610c105760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b03565b6000610c1a611e58565b9050610c268382611e7b565b9150505b919050565b6000546001600160a01b03163314610c595760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03811660009081526005602052604090205460ff16610cc15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610b03565b60005b600954811015610e1b57816001600160a01b031660098281548110610cf957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e095760098054610d249060019061311f565b81548110610d4257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610d7c57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556009805480610de257634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610e1b565b80610e1381613171565b915050610cc4565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610acf918590610b9a9086611e8e565b3360008181526005602052604090205460ff1615610eca5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b03565b6000610ed583611e9a565b5050506001600160a01b038616600090815260016020526040902054939450610f0393925084915050611ef5565b6001600160a01b038316600090815260016020526040902055600c54610f299082611ef5565b600c55600d54610f399084611e8e565b600d55505050565b6000546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b54831115610fe35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b03565b81611003576000610ff384611e9a565b50949650610ad395505050505050565b600061100e84611e9a565b50939650610ad395505050505050565b6000546001600160a01b031633146110485760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610b0390613023565b601955565b6000546001600160a01b031633146110c25760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03811660009081526005602052604090205460ff161561112b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b03565b6001600160a01b03811660009081526001602052604090205415611185576001600160a01b03811660009081526001602052604090205461116b90610ba9565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146112155760405162461bcd60e51b8152600401610b0390613023565b601655565b6000546001600160a01b031633146112445760405162461bcd60e51b8152600401610b0390613023565b601355565b6000546001600160a01b031633146112735760405162461bcd60e51b8152600401610b0390613023565b601c55565b6001600160a01b03811660009081526005602052604081205460ff16156112b857506001600160a01b038116600090815260026020526040902054610c2a565b6001600160a01b038216600090815260016020526040902054610ad390610ba9565b6000546001600160a01b031633146113045760405162461bcd60e51b8152600401610b0390613023565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113785760405162461bcd60e51b8152600401610b0390613023565b601d55565b6000546001600160a01b031633146113a75760405162461bcd60e51b8152600401610b0390613023565b6113c760646113c183600b54611f0190919063ffffffff16565b90611e7b565b601a5550565b6000546001600160a01b031633146113f75760405162461bcd60e51b8152600401610b0390613023565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6060600f8054610a3f90613136565b6000610acf3384610b9a856040518060600160405280602581526020016131e3602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e2c565b6000610acf338484611965565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610b0390613023565b601b80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061153390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115685760405162461bcd60e51b8152600401610b0390613023565b61158260646113c183600b54611f0190919063ffffffff16565b601c5550565b6000546001600160a01b031633146115b25760405162461bcd60e51b8152600401610b0390613023565b601555565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461162c5760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b0381166116915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b03565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117165760405162461bcd60e51b8152600401610b0390613023565b60005b818110156117945760016006600085858581811061174757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061175c9190612d81565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561178d81613171565b9050611719565b505050565b6000546001600160a01b031633146117c35760405162461bcd60e51b8152600401610b0390613023565b60005b81811015611794576001600760008585858181106117f457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118099190612d81565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561183a81613171565b90506117c6565b6001600160a01b0383166118a35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b03565b6001600160a01b0382166119045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b03565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b0383811691161480159061198c57506001600160a01b0382163014155b80156119a357506001600160a01b03821661dead14155b80156119e157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156119fb5750600a546001600160a01b03838116911614155b15611a91576000611a0b83611278565b601a54909150611a1b83836130c8565b1115611a8f5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b03565b505b60085460ff1615611b04576001600160a01b03821660009081526006602052604090205460ff16611b045760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920436f6d6d756e6974792043616e20427579210000000000000000006044820152606401610b03565b6001600160a01b03831660009081526007602052604090205460ff16158015611b4657506001600160a01b03821660009081526007602052604090205460ff16155b611b925760405162461bcd60e51b815260206004820152601b60248201527f54686973206164647265737320697320626c61636b6c697374656400000000006044820152606401610b03565b6001600160a01b038316611bf65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b03565b6001600160a01b038216611c1c5760405162461bcd60e51b8152600401610b0390612fa9565b60008111611c7e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b03565b6000546001600160a01b03848116911614801590611caa57506000546001600160a01b03838116911614155b15611d1257601c54811115611d125760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b03565b6000611d1d30611278565b9050601c548110611d2d5750601c545b601d5481108015908190611d445750601b5460ff16155b8015611d8257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611d955750601b54610100900460ff165b15611da857601d549150611da882611f0d565b60016001600160a01b038516611dd05760405162461bcd60e51b8152600401610b0390612fa9565b6001600160a01b03861660009081526004602052604090205460ff1680611e0f57506001600160a01b03851660009081526004602052604090205460ff165b15611e18575060005b611e2486868684611fe6565b505050505050565b60008184841115611e505760405162461bcd60e51b8152600401610b039190612f56565b505050900390565b6000806000611e656121c7565b9092509050611e748282611e7b565b9250505090565b6000611e8782846130e0565b9392505050565b6000611e8782846130c8565b6000806000806000806000806000806000611eb48c612384565b93509350935093506000806000611ed58f878787611ed0611e58565b6123d9565b919f509d509b509599509397509195509350505050919395979092949650565b6000611e87828461311f565b6000611e878284613100565b601b805460ff19166001179055601954600090611f2b908390611e7b565b90506000611f398383611ef5565b9050611f448261243b565b4715611f5357611f534761261e565b6000611f60826002611e7b565b90506000611f6e8383611ef5565b905047611f7a8361243b565b6000611f864783611ef5565b9050611f928382612658565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601b805460ff191690555050505050565b6001600160a01b03841660009081526007602052604090205460ff1615801561202857506001600160a01b03831660009081526007602052604090205460ff16155b6120445760405162461bcd60e51b8152600401610b0390612fec565b806120515761205161276d565b6001600160a01b03841660009081526005602052604090205460ff16801561209257506001600160a01b03831660009081526005602052604090205460ff16155b156120a7576120a28484846127aa565b6121a5565b6001600160a01b03841660009081526005602052604090205460ff161580156120e857506001600160a01b03831660009081526005602052604090205460ff165b156120f8576120a2848484612950565b6001600160a01b03841660009081526005602052604090205460ff1615801561213a57506001600160a01b03831660009081526005602052604090205460ff16155b1561214a576120a2848484612a6f565b6001600160a01b03841660009081526005602052604090205460ff16801561218a57506001600160a01b03831660009081526005602052604090205460ff165b1561219a576120a2848484612b29565b6121a5848484612a6f565b806121c1576121c1601254601155601454601355601854601755565b50505050565b600c54600b546000918291825b6009548110156123525782600160006009848154811061220457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061227d575081600260006009848154811061225657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561229457600c54600b5494509450505050612380565b6122e860016000600984815481106122bc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611ef5565b925061233e600260006009848154811061231257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611ef5565b91508061234a81613171565b9150506121d4565b50600b54600c5461236291611e7b565b82101561237a57600c54600b54935093505050612380565b90925090505b9091565b600080600080600061239586612bb2565b905060006123a287612bce565b905060006123af88612bea565b905060006123c9826123c385818d89611ef5565b90611ef5565b9993985091965094509092505050565b60008080806123e88986611f01565b905060006123f68987611f01565b905060006124048988611f01565b905060006124128989611f01565b90506000612426826123c385818989611ef5565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247e57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156124f757600080fd5b505afa15801561250b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252f9190612d9d565b8160018151811061255057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505061259b307f000000000000000000000000000000000000000000000000000000000000000084611841565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906125f0908590600090869030904290600401613058565b600060405180830381600087803b15801561260a57600080fd5b505af1158015611e24573d6000803e3d6000fd5b600a546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610e1b573d6000803e3d6000fd5b612683307f000000000000000000000000000000000000000000000000000000000000000084611841565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806126ca6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561272d57600080fd5b505af1158015612741573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127669190612f29565b5050505050565b60115415801561277d5750601754155b15612787576127a8565b60118054601255601380546014556017805460185560009283905590829055555b565b60008060008060008060006127be88611e9a565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff1615801561282557506001600160a01b03891660009081526007602052604090205460ff16155b6128415760405162461bcd60e51b8152600401610b0390612fec565b6001600160a01b038a166000908152600260205260409020546128649089611ef5565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546128939088611ef5565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546128c29087611e8e565b6001600160a01b038a166000908152600160205260409020556128e482612c06565b6128ed81612c8e565b6128f78584612d4d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161293c91815260200190565b60405180910390a350505050505050505050565b600080600080600080600061296488611e9a565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff161580156129cb57506001600160a01b03891660009081526007602052604090205460ff16155b6129e75760405162461bcd60e51b8152600401610b0390612fec565b6001600160a01b038a16600090815260016020526040902054612a0a9088611ef5565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612a409085611e8e565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128c29087611e8e565b6000806000806000806000612a8388611e9a565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16158015612aea57506001600160a01b03891660009081526007602052604090205460ff16155b612b065760405162461bcd60e51b8152600401610b0390612fec565b6001600160a01b038a166000908152600160205260409020546128939088611ef5565b6000806000806000806000612b3d88611e9a565b9650965096509650965096509650612b8388600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611ef590919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612a0a9088611ef5565b6000610ad360646113c160115485611f0190919063ffffffff16565b6000610ad360646113c160175485611f0190919063ffffffff16565b6000610ad360646113c160135485611f0190919063ffffffff16565b6000612c10611e58565b90506000612c1e8383611f01565b30600090815260016020526040902054909150612c3b9082611e8e565b3060009081526001602090815260408083209390935560059052205460ff16156117945730600090815260026020526040902054612c799084611e8e565b30600090815260026020526040902055505050565b6000612c98611e58565b90506000612ca68383611f01565b600a546001600160a01b0316600090815260016020526040902054909150612cce9082611e8e565b600a80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561179457600a546001600160a01b0316600090815260026020526040902054612d2d9084611e8e565b600a546001600160a01b0316600090815260026020526040902055505050565b600c54612d5a9083611ef5565b600c55600d54612d6a9082611e8e565b600d555050565b80358015158114610c2a57600080fd5b600060208284031215612d92578081fd5b8135611e87816131a2565b600060208284031215612dae578081fd5b8151611e87816131a2565b60008060408385031215612dcb578081fd5b8235612dd6816131a2565b91506020830135612de6816131a2565b809150509250929050565b600080600060608486031215612e05578081fd5b8335612e10816131a2565b92506020840135612e20816131a2565b929592945050506040919091013590565b60008060408385031215612e43578182fd5b8235612e4e816131a2565b946020939093013593505050565b60008060208385031215612e6e578182fd5b823567ffffffffffffffff80821115612e85578384fd5b818501915085601f830112612e98578384fd5b813581811115612ea6578485fd5b8660208260051b8501011115612eba578485fd5b60209290920196919550909350505050565b600060208284031215612edd578081fd5b611e8782612d71565b600060208284031215612ef7578081fd5b5035919050565b60008060408385031215612f10578182fd5b82359150612f2060208401612d71565b90509250929050565b600080600060608486031215612f3d578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612f8257858101830151858201604001528201612f66565b81811115612f935783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601f908201527f546f2f66726f6d206164647265737320697320626c61636b6c69737465642100604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156130a75784516001600160a01b031683529383019391830191600101613082565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156130db576130db61318c565b500190565b6000826130fb57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561311a5761311a61318c565b500290565b6000828210156131315761313161318c565b500390565b600181811c9082168061314a57607f821691505b6020821081141561316b57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131855761318561318c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146131b757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023cb402d9610d7239a82bea491d868f37740f5f27a6e174a48463792d967d99b64736f6c63430008030033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80635ce9bb33116101ab5780639521cff5116100f7578063dd62ed3e11610095578063f0f0681c1161006f578063f0f0681c146109b6578063f2fde38b146109d0578063f5e22efd146109f0578063ff89757014610a1057610325565b8063dd62ed3e14610930578063e6039f9214610976578063ea2f0b371461099657610325565b8063a9059cbb116100d1578063a9059cbb146108ba578063b3f22ce3146108da578063c49b9a80146108f0578063d543dbeb1461091057610325565b80639521cff51461086557806395d89b4114610885578063a457c2d71461089a57610325565b806378109e541161016457806382bf293c1161013e57806382bf293c146107ce57806388f82020146107ee5780638da5cb5b146108275780638eeb380e1461084557610325565b806378109e54146107825780637d1db4a5146107985780638097e697146107ae57610325565b80635ce9bb33146106e15780635cfd7df41461070157806365606e85146107215780636bc87c3a1461073757806370a082311461074d578063715018a61461076d57610325565b80633685d4191161026a57806349bd5a5e116102235780634cdc83cb116101fd5780634cdc83cb1461064857806352390c02146106685780635342acb41461068857806356df6d84146106c157610325565b806349bd5a5e146105d55780634a49ac4c146106095780634a74bb021461062957610325565b80633685d4191461051f578063395093511461053f5780633bd5d1731461055f5780633e417a761461057f578063437823ec146105955780634549b039146105b557610325565b80631694505e116102d757806323b872dd116102b157806323b872dd146104a75780632d838119146104c7578063313ce567146104e75780633206b4aa1461050957610325565b80631694505e1461041657806318160ddd146104625780631cdd3be31461047757610325565b806306fdde031461032a578063095ea7b3146103555780630f285aee146103855780630fec5dd0146103b557806312ff6888146103d757806313114a9d146103f757610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a30565b60405161034c9190612f56565b60405180910390f35b34801561036157600080fd5b50610375610370366004612e31565b610ac2565b604051901515815260200161034c565b34801561039157600080fd5b506103756103a0366004612d81565b60066020526000908152604090205460ff1681565b3480156103c157600080fd5b506103d56103d0366004612ee6565b610ad9565b005b3480156103e357600080fd5b506103d56103f2366004612ee6565b610b11565b34801561040357600080fd5b50600d545b60405190815260200161034c565b34801561042257600080fd5b5061044a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161034c565b34801561046e57600080fd5b50600b54610408565b34801561048357600080fd5b50610375610492366004612d81565b60076020526000908152604090205460ff1681565b3480156104b357600080fd5b506103756104c2366004612df1565b610b40565b3480156104d357600080fd5b506104086104e2366004612ee6565b610ba9565b3480156104f357600080fd5b5060105460405160ff909116815260200161034c565b34801561051557600080fd5b5061040860115481565b34801561052b57600080fd5b506103d561053a366004612d81565b610c2f565b34801561054b57600080fd5b5061037561055a366004612e31565b610e1f565b34801561056b57600080fd5b506103d561057a366004612ee6565b610e55565b34801561058b57600080fd5b5061040860165481565b3480156105a157600080fd5b506103d56105b0366004612d81565b610f41565b3480156105c157600080fd5b506104086105d0366004612efe565b610f8f565b3480156105e157600080fd5b5061044a7f000000000000000000000000b8db42b8dc87416638168adc0085b921308004e881565b34801561061557600080fd5b506103d5610624366004612d81565b61101e565b34801561063557600080fd5b50601b5461037590610100900460ff1681565b34801561065457600080fd5b506103d5610663366004612ee6565b611069565b34801561067457600080fd5b506103d5610683366004612d81565b611098565b34801561069457600080fd5b506103756106a3366004612d81565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106cd57600080fd5b506103d56106dc366004612ee6565b6111eb565b3480156106ed57600080fd5b506103d56106fc366004612ee6565b61121a565b34801561070d57600080fd5b506103d561071c366004612ee6565b611249565b34801561072d57600080fd5b5061040860135481565b34801561074357600080fd5b5061040860155481565b34801561075957600080fd5b50610408610768366004612d81565b611278565b34801561077957600080fd5b506103d56112da565b34801561078e57600080fd5b50610408601a5481565b3480156107a457600080fd5b50610408601c5481565b3480156107ba57600080fd5b506103d56107c9366004612ee6565b61134e565b3480156107da57600080fd5b506103d56107e9366004612ee6565b61137d565b3480156107fa57600080fd5b50610375610809366004612d81565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083357600080fd5b506000546001600160a01b031661044a565b34801561085157600080fd5b506103d5610860366004612ecc565b6113cd565b34801561087157600080fd5b506103d5610880366004612d81565b61140a565b34801561089157600080fd5b5061033f611455565b3480156108a657600080fd5b506103756108b5366004612e31565b611464565b3480156108c657600080fd5b506103756108d5366004612e31565b6114b3565b3480156108e657600080fd5b50610408601d5481565b3480156108fc57600080fd5b506103d561090b366004612ecc565b6114c0565b34801561091c57600080fd5b506103d561092b366004612ee6565b61153e565b34801561093c57600080fd5b5061040861094b366004612db9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561098257600080fd5b506103d5610991366004612ee6565b611588565b3480156109a257600080fd5b506103d56109b1366004612d81565b6115b7565b3480156109c257600080fd5b506008546103759060ff1681565b3480156109dc57600080fd5b506103d56109eb366004612d81565b611602565b3480156109fc57600080fd5b506103d5610a0b366004612e5c565b6116ec565b348015610a1c57600080fd5b506103d5610a2b366004612e5c565b611799565b6060600e8054610a3f90613136565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6b90613136565b8015610ab85780601f10610a8d57610100808354040283529160200191610ab8565b820191906000526020600020905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b6000610acf338484611841565b5060015b92915050565b6000546001600160a01b03163314610b0c5760405162461bcd60e51b8152600401610b0390613023565b60405180910390fd5b601a55565b6000546001600160a01b03163314610b3b5760405162461bcd60e51b8152600401610b0390613023565b601155565b6000610b4d848484611965565b610b9f8433610b9a856040518060600160405280602881526020016131bb602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e2c565b611841565b5060019392505050565b6000600c54821115610c105760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b03565b6000610c1a611e58565b9050610c268382611e7b565b9150505b919050565b6000546001600160a01b03163314610c595760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03811660009081526005602052604090205460ff16610cc15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610b03565b60005b600954811015610e1b57816001600160a01b031660098281548110610cf957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e095760098054610d249060019061311f565b81548110610d4257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610d7c57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556009805480610de257634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610e1b565b80610e1381613171565b915050610cc4565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610acf918590610b9a9086611e8e565b3360008181526005602052604090205460ff1615610eca5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b03565b6000610ed583611e9a565b5050506001600160a01b038616600090815260016020526040902054939450610f0393925084915050611ef5565b6001600160a01b038316600090815260016020526040902055600c54610f299082611ef5565b600c55600d54610f399084611e8e565b600d55505050565b6000546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b54831115610fe35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b03565b81611003576000610ff384611e9a565b50949650610ad395505050505050565b600061100e84611e9a565b50939650610ad395505050505050565b6000546001600160a01b031633146110485760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610b0390613023565b601955565b6000546001600160a01b031633146110c25760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03811660009081526005602052604090205460ff161561112b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b03565b6001600160a01b03811660009081526001602052604090205415611185576001600160a01b03811660009081526001602052604090205461116b90610ba9565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146112155760405162461bcd60e51b8152600401610b0390613023565b601655565b6000546001600160a01b031633146112445760405162461bcd60e51b8152600401610b0390613023565b601355565b6000546001600160a01b031633146112735760405162461bcd60e51b8152600401610b0390613023565b601c55565b6001600160a01b03811660009081526005602052604081205460ff16156112b857506001600160a01b038116600090815260026020526040902054610c2a565b6001600160a01b038216600090815260016020526040902054610ad390610ba9565b6000546001600160a01b031633146113045760405162461bcd60e51b8152600401610b0390613023565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113785760405162461bcd60e51b8152600401610b0390613023565b601d55565b6000546001600160a01b031633146113a75760405162461bcd60e51b8152600401610b0390613023565b6113c760646113c183600b54611f0190919063ffffffff16565b90611e7b565b601a5550565b6000546001600160a01b031633146113f75760405162461bcd60e51b8152600401610b0390613023565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6060600f8054610a3f90613136565b6000610acf3384610b9a856040518060600160405280602581526020016131e3602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e2c565b6000610acf338484611965565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610b0390613023565b601b80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061153390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115685760405162461bcd60e51b8152600401610b0390613023565b61158260646113c183600b54611f0190919063ffffffff16565b601c5550565b6000546001600160a01b031633146115b25760405162461bcd60e51b8152600401610b0390613023565b601555565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461162c5760405162461bcd60e51b8152600401610b0390613023565b6001600160a01b0381166116915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b03565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117165760405162461bcd60e51b8152600401610b0390613023565b60005b818110156117945760016006600085858581811061174757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061175c9190612d81565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561178d81613171565b9050611719565b505050565b6000546001600160a01b031633146117c35760405162461bcd60e51b8152600401610b0390613023565b60005b81811015611794576001600760008585858181106117f457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118099190612d81565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561183a81613171565b90506117c6565b6001600160a01b0383166118a35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b03565b6001600160a01b0382166119045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b03565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b0383811691161480159061198c57506001600160a01b0382163014155b80156119a357506001600160a01b03821661dead14155b80156119e157507f000000000000000000000000b8db42b8dc87416638168adc0085b921308004e86001600160a01b0316826001600160a01b031614155b80156119fb5750600a546001600160a01b03838116911614155b15611a91576000611a0b83611278565b601a54909150611a1b83836130c8565b1115611a8f5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b03565b505b60085460ff1615611b04576001600160a01b03821660009081526006602052604090205460ff16611b045760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920436f6d6d756e6974792043616e20427579210000000000000000006044820152606401610b03565b6001600160a01b03831660009081526007602052604090205460ff16158015611b4657506001600160a01b03821660009081526007602052604090205460ff16155b611b925760405162461bcd60e51b815260206004820152601b60248201527f54686973206164647265737320697320626c61636b6c697374656400000000006044820152606401610b03565b6001600160a01b038316611bf65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b03565b6001600160a01b038216611c1c5760405162461bcd60e51b8152600401610b0390612fa9565b60008111611c7e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b03565b6000546001600160a01b03848116911614801590611caa57506000546001600160a01b03838116911614155b15611d1257601c54811115611d125760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b03565b6000611d1d30611278565b9050601c548110611d2d5750601c545b601d5481108015908190611d445750601b5460ff16155b8015611d8257507f000000000000000000000000b8db42b8dc87416638168adc0085b921308004e86001600160a01b0316856001600160a01b031614155b8015611d955750601b54610100900460ff165b15611da857601d549150611da882611f0d565b60016001600160a01b038516611dd05760405162461bcd60e51b8152600401610b0390612fa9565b6001600160a01b03861660009081526004602052604090205460ff1680611e0f57506001600160a01b03851660009081526004602052604090205460ff165b15611e18575060005b611e2486868684611fe6565b505050505050565b60008184841115611e505760405162461bcd60e51b8152600401610b039190612f56565b505050900390565b6000806000611e656121c7565b9092509050611e748282611e7b565b9250505090565b6000611e8782846130e0565b9392505050565b6000611e8782846130c8565b6000806000806000806000806000806000611eb48c612384565b93509350935093506000806000611ed58f878787611ed0611e58565b6123d9565b919f509d509b509599509397509195509350505050919395979092949650565b6000611e87828461311f565b6000611e878284613100565b601b805460ff19166001179055601954600090611f2b908390611e7b565b90506000611f398383611ef5565b9050611f448261243b565b4715611f5357611f534761261e565b6000611f60826002611e7b565b90506000611f6e8383611ef5565b905047611f7a8361243b565b6000611f864783611ef5565b9050611f928382612658565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601b805460ff191690555050505050565b6001600160a01b03841660009081526007602052604090205460ff1615801561202857506001600160a01b03831660009081526007602052604090205460ff16155b6120445760405162461bcd60e51b8152600401610b0390612fec565b806120515761205161276d565b6001600160a01b03841660009081526005602052604090205460ff16801561209257506001600160a01b03831660009081526005602052604090205460ff16155b156120a7576120a28484846127aa565b6121a5565b6001600160a01b03841660009081526005602052604090205460ff161580156120e857506001600160a01b03831660009081526005602052604090205460ff165b156120f8576120a2848484612950565b6001600160a01b03841660009081526005602052604090205460ff1615801561213a57506001600160a01b03831660009081526005602052604090205460ff16155b1561214a576120a2848484612a6f565b6001600160a01b03841660009081526005602052604090205460ff16801561218a57506001600160a01b03831660009081526005602052604090205460ff165b1561219a576120a2848484612b29565b6121a5848484612a6f565b806121c1576121c1601254601155601454601355601854601755565b50505050565b600c54600b546000918291825b6009548110156123525782600160006009848154811061220457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061227d575081600260006009848154811061225657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561229457600c54600b5494509450505050612380565b6122e860016000600984815481106122bc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611ef5565b925061233e600260006009848154811061231257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611ef5565b91508061234a81613171565b9150506121d4565b50600b54600c5461236291611e7b565b82101561237a57600c54600b54935093505050612380565b90925090505b9091565b600080600080600061239586612bb2565b905060006123a287612bce565b905060006123af88612bea565b905060006123c9826123c385818d89611ef5565b90611ef5565b9993985091965094509092505050565b60008080806123e88986611f01565b905060006123f68987611f01565b905060006124048988611f01565b905060006124128989611f01565b90506000612426826123c385818989611ef5565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247e57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156124f757600080fd5b505afa15801561250b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252f9190612d9d565b8160018151811061255057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505061259b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611841565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906125f0908590600090869030904290600401613058565b600060405180830381600087803b15801561260a57600080fd5b505af1158015611e24573d6000803e3d6000fd5b600a546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610e1b573d6000803e3d6000fd5b612683307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611841565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806126ca6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561272d57600080fd5b505af1158015612741573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127669190612f29565b5050505050565b60115415801561277d5750601754155b15612787576127a8565b60118054601255601380546014556017805460185560009283905590829055555b565b60008060008060008060006127be88611e9a565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff1615801561282557506001600160a01b03891660009081526007602052604090205460ff16155b6128415760405162461bcd60e51b8152600401610b0390612fec565b6001600160a01b038a166000908152600260205260409020546128649089611ef5565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546128939088611ef5565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546128c29087611e8e565b6001600160a01b038a166000908152600160205260409020556128e482612c06565b6128ed81612c8e565b6128f78584612d4d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161293c91815260200190565b60405180910390a350505050505050505050565b600080600080600080600061296488611e9a565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff161580156129cb57506001600160a01b03891660009081526007602052604090205460ff16155b6129e75760405162461bcd60e51b8152600401610b0390612fec565b6001600160a01b038a16600090815260016020526040902054612a0a9088611ef5565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612a409085611e8e565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128c29087611e8e565b6000806000806000806000612a8388611e9a565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16158015612aea57506001600160a01b03891660009081526007602052604090205460ff16155b612b065760405162461bcd60e51b8152600401610b0390612fec565b6001600160a01b038a166000908152600160205260409020546128939088611ef5565b6000806000806000806000612b3d88611e9a565b9650965096509650965096509650612b8388600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611ef590919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612a0a9088611ef5565b6000610ad360646113c160115485611f0190919063ffffffff16565b6000610ad360646113c160175485611f0190919063ffffffff16565b6000610ad360646113c160135485611f0190919063ffffffff16565b6000612c10611e58565b90506000612c1e8383611f01565b30600090815260016020526040902054909150612c3b9082611e8e565b3060009081526001602090815260408083209390935560059052205460ff16156117945730600090815260026020526040902054612c799084611e8e565b30600090815260026020526040902055505050565b6000612c98611e58565b90506000612ca68383611f01565b600a546001600160a01b0316600090815260016020526040902054909150612cce9082611e8e565b600a80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561179457600a546001600160a01b0316600090815260026020526040902054612d2d9084611e8e565b600a546001600160a01b0316600090815260026020526040902055505050565b600c54612d5a9083611ef5565b600c55600d54612d6a9082611e8e565b600d555050565b80358015158114610c2a57600080fd5b600060208284031215612d92578081fd5b8135611e87816131a2565b600060208284031215612dae578081fd5b8151611e87816131a2565b60008060408385031215612dcb578081fd5b8235612dd6816131a2565b91506020830135612de6816131a2565b809150509250929050565b600080600060608486031215612e05578081fd5b8335612e10816131a2565b92506020840135612e20816131a2565b929592945050506040919091013590565b60008060408385031215612e43578182fd5b8235612e4e816131a2565b946020939093013593505050565b60008060208385031215612e6e578182fd5b823567ffffffffffffffff80821115612e85578384fd5b818501915085601f830112612e98578384fd5b813581811115612ea6578485fd5b8660208260051b8501011115612eba578485fd5b60209290920196919550909350505050565b600060208284031215612edd578081fd5b611e8782612d71565b600060208284031215612ef7578081fd5b5035919050565b60008060408385031215612f10578182fd5b82359150612f2060208401612d71565b90509250929050565b600080600060608486031215612f3d578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612f8257858101830151858201604001528201612f66565b81811115612f935783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601f908201527f546f2f66726f6d206164647265737320697320626c61636b6c69737465642100604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156130a75784516001600160a01b031683529383019391830191600101613082565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156130db576130db61318c565b500190565b6000826130fb57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561311a5761311a61318c565b500290565b6000828210156131315761313161318c565b500390565b600181811c9082168061314a57607f821691505b6020821081141561316b57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131855761318561318c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146131b757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023cb402d9610d7239a82bea491d868f37740f5f27a6e174a48463792d967d99b64736f6c63430008030033
Deployed Bytecode Sourcemap
16070:25503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20230:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21142:161;;;;;;;;;;-1:-1:-1;21142:161:0;;;;;:::i;:::-;;:::i;:::-;;;4540:14:1;;4533:22;4515:41;;4503:2;4488:18;21142:161:0;4470:92:1;16634:45:0;;;;;;;;;;-1:-1:-1;16634:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27877:122;;;;;;;;;;-1:-1:-1;27877:122:0;;;;;:::i;:::-;;:::i;:::-;;26010:126;;;;;;;;;;-1:-1:-1;26010:126:0;;;;;:::i;:::-;;:::i;22263:87::-;;;;;;;;;;-1:-1:-1;22332:10:0;;22263:87;;;12156:25:1;;;12144:2;12129:18;22263:87:0;12111:76:1;18483:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3719:32:1;;;3701:51;;3689:2;3674:18;18483:51:0;3656:102:1;20507:95:0;;;;;;;;;;-1:-1:-1;20587:7:0;;20507:95;;16686:47;;;;;;;;;;-1:-1:-1;16686:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21311:313;;;;;;;;;;-1:-1:-1;21311:313:0;;;;;:::i;:::-;;:::i;23190:253::-;;;;;;;;;;-1:-1:-1;23190:253:0;;;;;:::i;:::-;;:::i;20416:83::-;;;;;;;;;;-1:-1:-1;20482:9:0;;20416:83;;20482:9;;;;13646:36:1;;13634:2;13619:18;20416:83:0;13601:87:1;17414:33:0;;;;;;;;;;;;;;;;23906:479;;;;;;;;;;-1:-1:-1;23906:479:0;;;;;:::i;:::-;;:::i;21632:218::-;;;;;;;;;;-1:-1:-1;21632:218:0;;;;;:::i;:::-;;:::i;22358:378::-;;;;;;;;;;-1:-1:-1;22358:378:0;;;;;:::i;:::-;;:::i;17824:28::-;;;;;;;;;;;;;;;;25324:111;;;;;;;;;;-1:-1:-1;25324:111:0;;;;;:::i;:::-;;:::i;22744:438::-;;;;;;;;;;-1:-1:-1;22744:438:0;;;;;:::i;:::-;;:::i;18541:38::-;;;;;;;;;;;;;;;28706:115;;;;;;;;;;-1:-1:-1;28706:115:0;;;;;:::i;:::-;;:::i;18614:40::-;;;;;;;;;;-1:-1:-1;18614:40:0;;;;;;;;;;;26418:148;;;;;;;;;;-1:-1:-1;26418:148:0;;;;;:::i;:::-;;:::i;23451:447::-;;;;;;;;;;-1:-1:-1;23451:447:0;;;;;:::i;:::-;;:::i;33554:123::-;;;;;;;;;;-1:-1:-1;33554:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33642:27:0;33618:4;33642:27;;;:18;:27;;;;;;;;;33554:123;27005:106;;;;;;;;;;-1:-1:-1;27005:106:0;;;;;:::i;:::-;;:::i;26640:138::-;;;;;;;;;;-1:-1:-1;26640:138:0;;;;;:::i;:::-;;:::i;27411:111::-;;;;;;;;;;-1:-1:-1;27411:111:0;;;;;:::i;:::-;;:::i;17570:36::-;;;;;;;;;;;;;;;;17785:32;;;;;;;;;;;;;;;;20610:198;;;;;;;;;;-1:-1:-1;20610:198:0;;;;;:::i;:::-;;:::i;7724:148::-;;;;;;;;;;;;;:::i;18380:57::-;;;;;;;;;;;;;;;;18769:54;;;;;;;;;;;;;;;;25732:184;;;;;;;;;;-1:-1:-1;25732:184:0;;;;;:::i;:::-;;:::i;27626:173::-;;;;;;;;;;-1:-1:-1;27626:173:0;;;;;:::i;:::-;;:::i;22135:120::-;;;;;;;;;;-1:-1:-1;22135:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22227:20:0;22203:4;22227:20;;;:11;:20;;;;;;;;;22135:120;7493:87;;;;;;;;;;-1:-1:-1;7539:7:0;7566:6;-1:-1:-1;;;;;7566:6:0;7493:87;;25128:101;;;;;;;;;;-1:-1:-1;25128:101:0;;;;;:::i;:::-;;:::i;28551:113::-;;;;;;;;;;-1:-1:-1;28551:113:0;;;;;:::i;:::-;;:::i;20321:87::-;;;;;;;;;;;;;:::i;21858:269::-;;;;;;;;;;-1:-1:-1;21858:269:0;;;;;:::i;:::-;;:::i;20816:167::-;;;;;;;;;;-1:-1:-1;20816:167:0;;;;;:::i;:::-;;:::i;18998:71::-;;;;;;;;;;;;;;;;28097:171;;;;;;;;;;-1:-1:-1;28097:171:0;;;;;:::i;:::-;;:::i;27186:162::-;;;;;;;;;;-1:-1:-1;27186:162:0;;;;;:::i;:::-;;:::i;20991:143::-;;;;;;;;;;-1:-1:-1;20991:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21099:18:0;;;21072:7;21099:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20991:143;26824:122;;;;;;;;;;-1:-1:-1;26824:122:0;;;;;:::i;:::-;;:::i;25514:110::-;;;;;;;;;;-1:-1:-1;25514:110:0;;;;;:::i;:::-;;:::i;16888:32::-;;;;;;;;;;-1:-1:-1;16888:32:0;;;;;;;;7882:244;;;;;;;;;;-1:-1:-1;7882:244:0;;;;;:::i;:::-;;:::i;28967:186::-;;;;;;;;;;-1:-1:-1;28967:186:0;;;;;:::i;:::-;;:::i;29264:188::-;;;;;;;;;;-1:-1:-1;29264:188:0;;;;;:::i;:::-;;:::i;20230:83::-;20267:13;20300:5;20293:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20230:83;:::o;21142:161::-;21217:4;21234:39;3566:10;21257:7;21266:6;21234:8;:39::i;:::-;-1:-1:-1;21291:4:0;21142:161;;;;;:::o;27877:122::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;;;;;;;;;27960:15:::1;:31:::0;27877:122::o;26010:126::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;26098:14:::1;:30:::0;26010:126::o;21311:313::-;21409:4;21426:36;21436:6;21444:9;21455:6;21426:9;:36::i;:::-;21473:121;21482:6;3566:10;21504:89;21542:6;21504:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21504:19:0;;;;;;:11;:19;;;;;;;;3566:10;21504:33;;;;;;;;;;:37;:89::i;:::-;21473:8;:121::i;:::-;-1:-1:-1;21612:4:0;21311:313;;;;;:::o;23190:253::-;23256:7;23295;;23284;:18;;23276:73;;;;-1:-1:-1;;;23276:73:0;;6016:2:1;23276:73:0;;;5998:21:1;6055:2;6035:18;;;6028:30;6094:34;6074:18;;;6067:62;-1:-1:-1;;;6145:18:1;;;6138:40;6195:19;;23276:73:0;5988:232:1;23276:73:0;23360:19;23383:10;:8;:10::i;:::-;23360:33;-1:-1:-1;23411:24:0;:7;23360:33;23411:11;:24::i;:::-;23404:31;;;23190:253;;;;:::o;23906:479::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23988:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23980:60;;;::::0;-1:-1:-1;;;23980:60:0;;8309:2:1;23980:60:0::1;::::0;::::1;8291:21:1::0;8348:2;8328:18;;;8321:30;8387:29;8367:18;;;8360:57;8434:18;;23980:60:0::1;8281:177:1::0;23980:60:0::1;24056:9;24051:327;24075:9;:16:::0;24071:20;::::1;24051:327;;;24133:7;-1:-1:-1::0;;;;;24117:23:0::1;:9;24127:1;24117:12;;;;;;-1:-1:-1::0;;;24117:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24117:12:0::1;:23;24113:254;;;24176:9;24186:16:::0;;:20:::1;::::0;24205:1:::1;::::0;24186:20:::1;:::i;:::-;24176:31;;;;;;-1:-1:-1::0;;;24176:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24161:9:::1;:12:::0;;-1:-1:-1;;;;;24176:31:0;;::::1;::::0;24171:1;;24161:12;::::1;;;-1:-1:-1::0;;;24161:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24161:46:0::1;-1:-1:-1::0;;;;;24161:46:0;;::::1;;::::0;;24226:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24265:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24265:28:0::1;::::0;;24312:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;24312:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24312:15:0;;;;;-1:-1:-1;;;;;;24312:15:0::1;::::0;;;;;24346:5:::1;;24113:254;24093:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24051:327;;;;23906:479:::0;:::o;21632:218::-;3566:10;21720:4;21769:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21769:34:0;;;;;;;;;;21720:4;;21737:83;;21760:7;;21769:50;;21808:10;21769:38;:50::i;22358:378::-;3566:10;22410:14;22459:19;;;:11;:19;;;;;;;;22458:20;22450:77;;;;-1:-1:-1;;;22450:77:0;;11799:2:1;22450:77:0;;;11781:21:1;11838:2;11818:18;;;11811:30;11877:34;11857:18;;;11850:62;-1:-1:-1;;;11928:18:1;;;11921:42;11980:19;;22450:77:0;11771:234:1;22450:77:0;22539:15;22564:19;22575:7;22564:10;:19::i;:::-;-1:-1:-1;;;;;;;;22612:15:0;;;;;;:7;:15;;;;;;22538:45;;-1:-1:-1;22612:28:0;;:15;-1:-1:-1;22538:45:0;;-1:-1:-1;;22612:19:0;:28::i;:::-;-1:-1:-1;;;;;22594:15:0;;;;;;:7;:15;;;;;:46;22661:7;;:20;;22673:7;22661:11;:20::i;:::-;22651:7;:30;22705:10;;:23;;22720:7;22705:14;:23::i;:::-;22692:10;:36;-1:-1:-1;;;22358:378:0:o;25324:111::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25393:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25393:34:0::1;25423:4;25393:34;::::0;;25324:111::o;22744:438::-;22834:7;22873;;22862;:18;;22854:62;;;;-1:-1:-1;;;22854:62:0;;8665:2:1;22854:62:0;;;8647:21:1;8704:2;8684:18;;;8677:30;8743:33;8723:18;;;8716:61;8794:18;;22854:62:0;8637:181:1;22854:62:0;22932:17;22927:248;;22967:15;22992:19;23003:7;22992:10;:19::i;:::-;-1:-1:-1;22966:45:0;;-1:-1:-1;23026:14:0;;-1:-1:-1;;;;;;23026:14:0;22927:248;23075:23;23107:19;23118:7;23107:10;:19::i;:::-;-1:-1:-1;23073:53:0;;-1:-1:-1;23141:22:0;;-1:-1:-1;;;;;;23141:22:0;28706:115;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28782:23:0::1;28808:5;28782:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;28782:31:0::1;::::0;;28706:115::o;26418:148::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;26518:19:::1;:40:::0;26418:148::o;23451:447::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23648:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23647:21;23639:61;;;::::0;-1:-1:-1;;;23639:61:0;;7597:2:1;23639:61:0::1;::::0;::::1;7579:21:1::0;7636:2;7616:18;;;7609:30;7675:29;7655:18;;;7648:57;7722:18;;23639:61:0::1;7569:177:1::0;23639:61:0::1;-1:-1:-1::0;;;;;23714:16:0;::::1;23733:1;23714:16:::0;;;:7:::1;:16;::::0;;;;;:20;23711:108:::1;;-1:-1:-1::0;;;;;23790:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23770:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23751:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23711:108:::1;-1:-1:-1::0;;;;;23829:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23829:27:0::1;23852:4;23829:27:::0;;::::1;::::0;;;23867:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23867:23:0::1;::::0;;::::1;::::0;;23451:447::o;27005:106::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;27083:9:::1;:20:::0;27005:106::o;26640:138::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;26734:17:::1;:36:::0;26640:138::o;27411:111::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;27488:12:::1;:26:::0;27411:111::o;20610:198::-;-1:-1:-1;;;;;20700:20:0;;20676:7;20700:20;;;:11;:20;;;;;;;;20696:49;;;-1:-1:-1;;;;;;20729:16:0;;;;;;:7;:16;;;;;;20722:23;;20696:49;-1:-1:-1;;;;;20783:16:0;;;;;;:7;:16;;;;;;20763:37;;:19;:37::i;7724:148::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;7831:1:::1;7815:6:::0;;7794:40:::1;::::0;-1:-1:-1;;;;;7815:6:0;;::::1;::::0;7794:40:::1;::::0;7831:1;;7794:40:::1;7862:1;7845:19:::0;;-1:-1:-1;;;;;;7845:19:0::1;::::0;;7724:148::o;25732:184::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;25846:30:::1;:62:::0;25732:184::o;27626:173::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;27729:62:::1;27775:5;27729:27;27741:14;27729:7;;:11;;:27;;;;:::i;:::-;:31:::0;::::1;:62::i;:::-;27711:15;:80:::0;-1:-1:-1;27626:173:0:o;25128:101::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;25197:13:::1;:24:::0;;-1:-1:-1;;25197:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25128:101::o;28551:113::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28627:21:0::1;28651:5;28627:21:::0;;;:12:::1;:21;::::0;;;;:29;;-1:-1:-1;;28627:29:0::1;::::0;;28551:113::o;20321:87::-;20360:13;20393:7;20386:14;;;;;:::i;21858:269::-;21951:4;21968:129;3566:10;21991:7;22000:96;22039:15;22000:96;;;;;;;;;;;;;;;;;3566:10;22000:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22000:34:0;;;;;;;;;;;;:38;:96::i;20816:167::-;20894:4;20911:42;3566:10;20935:9;20946:6;20911:9;:42::i;28097:171::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;28174:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;28174:32:0;;::::1;;::::0;;28222:38:::1;::::0;::::1;::::0;::::1;::::0;28198:8;4540:14:1;4533:22;4515:41;;4503:2;4488:18;;4470:92;28222:38:0::1;;;;;;;;28097:171:::0;:::o;27186:162::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;27280:60:::1;27324:5;27280:25;27292:12;27280:7;;:11;;:25;;;;:::i;:60::-;27265:12;:75:::0;-1:-1:-1;27186:162:0:o;26824:122::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;26910:13:::1;:28:::0;26824:122::o;25514:110::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25581:27:0::1;25611:5;25581:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25581:35:0::1;::::0;;25514:110::o;7882:244::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7971:22:0;::::1;7963:73;;;::::0;-1:-1:-1;;;7963:73:0;;6427:2:1;7963:73:0::1;::::0;::::1;6409:21:1::0;6466:2;6446:18;;;6439:30;6505:34;6485:18;;;6478:62;-1:-1:-1;;;6556:18:1;;;6549:36;6602:19;;7963:73:0::1;6399:228:1::0;7963:73:0::1;8073:6;::::0;;8052:38:::1;::::0;-1:-1:-1;;;;;8052:38:0;;::::1;::::0;8073:6;::::1;::::0;8052:38:::1;::::0;::::1;8101:6;:17:::0;;-1:-1:-1;;;;;;8101:17:0::1;-1:-1:-1::0;;;;;8101:17:0;;;::::1;::::0;;;::::1;::::0;;7882:244::o;28967:186::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;29054:9:::1;29049:97;29065:20:::0;;::::1;29049:97;;;29132:4;29103:12;:26;29116:9;;29126:1;29116:12;;;;;-1:-1:-1::0;;;29116:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29103:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29103:26:0;:33;;-1:-1:-1;;29103:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29087:3:::1;::::0;::::1;:::i;:::-;;;29049:97;;;;28967:186:::0;;:::o;29264:188::-;7539:7;7566:6;-1:-1:-1;;;;;7566:6:0;3566:10;7632:23;7624:68;;;;-1:-1:-1;;;7624:68:0;;;;;;;:::i;:::-;29351:9:::1;29346:99;29362:20:::0;;::::1;29346:99;;;29431:4;29400:14;:28;29415:9;;29425:1;29415:12;;;;;-1:-1:-1::0;;;29415:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29400:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29400:28:0;:35;;-1:-1:-1;;29400:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29384:3:::1;::::0;::::1;:::i;:::-;;;29346:99;;33685:337:::0;-1:-1:-1;;;;;33778:19:0;;33770:68;;;;-1:-1:-1;;;33770:68:0;;11394:2:1;33770:68:0;;;11376:21:1;11433:2;11413:18;;;11406:30;11472:34;11452:18;;;11445:62;-1:-1:-1;;;11523:18:1;;;11516:34;11567:19;;33770:68:0;11366:226:1;33770:68:0;-1:-1:-1;;;;;33857:21:0;;33849:68;;;;-1:-1:-1;;;33849:68:0;;6834:2:1;33849:68:0;;;6816:21:1;6873:2;6853:18;;;6846:30;6912:34;6892:18;;;6885:62;-1:-1:-1;;;6963:18:1;;;6956:32;7005:19;;33849:68:0;6806:224:1;33849:68:0;-1:-1:-1;;;;;33930:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33982:32;;12156:25:1;;;33982:32:0;;12129:18:1;33982:32:0;;;;;;;33685:337;;;:::o;34030:2438::-;7539:7;7566:6;-1:-1:-1;;;;;34270:13:0;;;7566:6;;34270:13;;;;:36;;-1:-1:-1;;;;;;34287:19:0;;34301:4;34287:19;;34270:36;:98;;;;-1:-1:-1;;;;;;34311:57:0;;34325:42;34311:57;;34270:98;:121;;;;;34378:13;-1:-1:-1;;;;;34372:19:0;:2;-1:-1:-1;;;;;34372:19:0;;;34270:121;:155;;;;-1:-1:-1;34401:24:0;;-1:-1:-1;;;;;34395:30:0;;;34401:24;;34395:30;;34270:155;34266:340;;;34441:18;34462:13;34472:2;34462:9;:13::i;:::-;34523:15;;34441:34;;-1:-1:-1;34499:19:0;34512:6;34441:34;34499:19;:::i;:::-;34498:40;;34490:114;;;;-1:-1:-1;;;34490:114:0;;10557:2:1;34490:114:0;;;10539:21:1;10596:2;10576:18;;;10569:30;10635:34;10615:18;;;10608:62;10706:32;10686:18;;;10679:60;10756:19;;34490:114:0;10529:252:1;34490:114:0;34266:340;;34755:13;;;;34751:83;;;-1:-1:-1;;;;;34788:16:0;;;;;;:12;:16;;;;;;;;34780:52;;;;-1:-1:-1;;;34780:52:0;;9434:2:1;34780:52:0;;;9416:21:1;9473:2;9453:18;;;9446:30;9512:25;9492:18;;;9485:53;9555:18;;34780:52:0;9406:173:1;34780:52:0;-1:-1:-1;;;;;35005:20:0;;;;;;:14;:20;;;;;;;;35004:21;:44;;;;-1:-1:-1;;;;;;35030:18:0;;;;;;:14;:18;;;;;;;;35029:19;35004:44;34996:84;;;;-1:-1:-1;;;34996:84:0;;7953:2:1;34996:84:0;;;7935:21:1;7992:2;7972:18;;;7965:30;8031:29;8011:18;;;8004:57;8078:18;;34996:84:0;7925:177:1;34996:84:0;-1:-1:-1;;;;;35099:18:0;;35091:68;;;;-1:-1:-1;;;35091:68:0;;10988:2:1;35091:68:0;;;10970:21:1;11027:2;11007:18;;;11000:30;11066:34;11046:18;;;11039:62;-1:-1:-1;;;11117:18:1;;;11110:35;11162:19;;35091:68:0;10960:227:1;35091:68:0;-1:-1:-1;;;;;35178:16:0;;35170:64;;;;-1:-1:-1;;;35170:64:0;;;;;;;:::i;:::-;35262:1;35253:6;:10;35245:64;;;;-1:-1:-1;;;35245:64:0;;10147:2:1;35245:64:0;;;10129:21:1;10186:2;10166:18;;;10159:30;10225:34;10205:18;;;10198:62;-1:-1:-1;;;10276:18:1;;;10269:39;10325:19;;35245:64:0;10119:231:1;35245:64:0;7539:7;7566:6;-1:-1:-1;;;;;35425:15:0;;;7566:6;;35425:15;;;;:32;;-1:-1:-1;7539:7:0;7566:6;-1:-1:-1;;;;;35444:13:0;;;7566:6;;35444:13;;35425:32;35422:125;;;35490:12;;35480:6;:22;;35472:75;;;;-1:-1:-1;;;35472:75:0;;9025:2:1;35472:75:0;;;9007:21:1;9064:2;9044:18;;;9037:30;9103:34;9083:18;;;9076:62;-1:-1:-1;;;9154:18:1;;;9147:38;9202:19;;35472:75:0;8997:230:1;35472:75:0;35560:28;35591:24;35609:4;35591:9;:24::i;:::-;35560:55;;35663:12;;35639:20;:36;35636:112;;-1:-1:-1;35724:12:0;;35636:112;35819:30;;35795:54;;;;;;;35878:53;;-1:-1:-1;35915:16:0;;;;35914:17;35878:53;:91;;;;;35956:13;-1:-1:-1;;;;;35948:21:0;:4;-1:-1:-1;;;;;35948:21:0;;;35878:91;:129;;;;-1:-1:-1;35986:21:0;;;;;;;35878:129;35860:290;;;36057:30;;36034:53;;36102:36;36117:20;36102:14;:36::i;:::-;36185:4;-1:-1:-1;;;;;36228:16:0;;36220:64;;;;-1:-1:-1;;;36220:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36309:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;36337:22:0;;;;;;:18;:22;;;;;;;;36309:50;36306:96;;;-1:-1:-1;36385:5:0;36306:96;36422:38;36437:4;36442:2;36445:6;36452:7;36422:14;:38::i;:::-;34030:2438;;;;;;:::o;2800:206::-;2886:7;2947:12;2939:6;;;;2931:29;;;;-1:-1:-1;;;2931:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2982:5:0;;;2800:206::o;30872:163::-;30913:7;30934:15;30951;30970:19;:17;:19::i;:::-;30933:56;;-1:-1:-1;30933:56:0;-1:-1:-1;31007:20:0;30933:56;;31007:11;:20::i;:::-;31000:27;;;;30872:163;:::o;2582:98::-;2640:7;2667:5;2671:1;2667;:5;:::i;:::-;2660:12;2582:98;-1:-1:-1;;;2582:98:0:o;2256:::-;2314:7;2341:5;2345:1;2341;:5;:::i;29464:454::-;29523:7;29532;29541;29550;29559;29568;29577;29598:23;29623:12;29637:18;29657:12;29673:20;29685:7;29673:11;:20::i;:::-;29597:96;;;;;;;;29705:15;29722:23;29747:12;29763:56;29775:7;29784:4;29790:10;29802:4;29808:10;:8;:10::i;:::-;29763:11;:56::i;:::-;29704:115;;-1:-1:-1;29704:115:0;-1:-1:-1;29704:115:0;-1:-1:-1;29870:15:0;;-1:-1:-1;29887:4:0;;-1:-1:-1;29893:10:0;;-1:-1:-1;29905:4:0;-1:-1:-1;;;;29464:454:0;;;;;;;;;:::o;2364:98::-;2422:7;2449:5;2453:1;2449;:5;:::i;2472:98::-;2530:7;2557:5;2561:1;2557;:5;:::i;36609:822::-;19380:16;:23;;-1:-1:-1;;19380:23:0;19399:4;19380:23;;;36757:19:::1;::::0;19380:16;;36732:45:::1;::::0;:20;;:24:::1;:45::i;:::-;36713:64:::0;-1:-1:-1;36788:19:0::1;36810:34;:20:::0;36713:64;36810:24:::1;:34::i;:::-;36788:56;;36865:26;36882:8;36865:16;:26::i;:::-;36905:21;:25:::0;36902:70:::1;;36932:40;36950:21;36932:17;:40::i;:::-;37069:12;37084:18;:11:::0;37100:1:::1;37084:15;:18::i;:::-;37069:33:::0;-1:-1:-1;37113:17:0::1;37133:21;:11:::0;37069:33;37133:15:::1;:21::i;:::-;37113:41:::0;-1:-1:-1;37190:21:0::1;37222:22;37239:4:::0;37222:16:::1;:22::i;:::-;37256:18;37277:41;:21;37303:14:::0;37277:25:::1;:41::i;:::-;37256:62;;37329:35;37342:9;37353:10;37329:12;:35::i;:::-;37380:43;::::0;;13382:25:1;;;13438:2;13423:18;;13416:34;;;13466:18;;;13459:34;;;37380:43:0::1;::::0;13370:2:1;13355:18;37380:43:0::1;;;;;;;-1:-1:-1::0;;19426:16:0;:24;;-1:-1:-1;;19426:24:0;;;-1:-1:-1;;;;;36609:822:0:o;38368:972::-;-1:-1:-1;;;;;38494:22:0;;;;;;:14;:22;;;;;;;;38493:23;:53;;;;-1:-1:-1;;;;;;38521:25:0;;;;;;:14;:25;;;;;;;;38520:26;38493:53;38485:97;;;;-1:-1:-1;;;38485:97:0;;;;;;;:::i;:::-;38617:7;38613:40;;38639:14;:12;:14::i;:::-;-1:-1:-1;;;;;38678:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;38702:22:0;;;;;;:11;:22;;;;;;;;38701:23;38678:46;38674:597;;;38741:48;38763:6;38771:9;38782:6;38741:21;:48::i;:::-;38674:597;;;-1:-1:-1;;;;;38812:19:0;;;;;;:11;:19;;;;;;;;38811:20;:46;;;;-1:-1:-1;;;;;;38835:22:0;;;;;;:11;:22;;;;;;;;38811:46;38807:464;;;38874:46;38894:6;38902:9;38913:6;38874:19;:46::i;38807:464::-;-1:-1:-1;;;;;38943:19:0;;;;;;:11;:19;;;;;;;;38942:20;:47;;;;-1:-1:-1;;;;;;38967:22:0;;;;;;:11;:22;;;;;;;;38966:23;38942:47;38938:333;;;39006:44;39024:6;39032:9;39043:6;39006:17;:44::i;38938:333::-;-1:-1:-1;;;;;39072:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;39095:22:0;;;;;;:11;:22;;;;;;;;39072:45;39068:203;;;39134:48;39156:6;39164:9;39175:6;39134:21;:48::i;39068:203::-;39215:44;39233:6;39241:9;39252:6;39215:17;:44::i;:::-;39295:7;39291:41;;39317:15;33392:22;;33375:14;:39;33445:25;;33425:17;:45;33505:29;;33481:21;:53;33331:211;39317:15;38368:972;;;;:::o;31043:561::-;31140:7;;31176;;31093;;;;;31200:289;31224:9;:16;31220:20;;31200:289;;;31290:7;31266;:21;31274:9;31284:1;31274:12;;;;;;-1:-1:-1;;;31274:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31274:12:0;31266:21;;;;;;;;;;;;;:31;;:66;;;31325:7;31301;:21;31309:9;31319:1;31309:12;;;;;;-1:-1:-1;;;31309:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31309:12:0;31301:21;;;;;;;;;;;;;:31;31266:66;31262:97;;;31342:7;;31351;;31334:25;;;;;;;;;31262:97;31384:34;31396:7;:21;31404:9;31414:1;31404:12;;;;;;-1:-1:-1;;;31404:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31404:12:0;31396:21;;;;;;;;;;;;;31384:7;;:11;:34::i;:::-;31374:44;;31443:34;31455:7;:21;31463:9;31473:1;31463:12;;;;;;-1:-1:-1;;;31463:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31463:12:0;31455:21;;;;;;;;;;;;;31443:7;;:11;:34::i;:::-;31433:44;-1:-1:-1;31242:3:0;;;;:::i;:::-;;;;31200:289;;;-1:-1:-1;31525:7:0;;31513;;:20;;:11;:20::i;:::-;31503:7;:30;31499:61;;;31543:7;;31552;;31535:25;;;;;;;;31499:61;31579:7;;-1:-1:-1;31588:7:0;-1:-1:-1;31043:561:0;;;:::o;29926:430::-;29986:7;29995;30004;30013;30033:12;30048:31;30071:7;30048:22;:31::i;:::-;30033:46;;30090:18;30111:38;30141:7;30111:29;:38::i;:::-;30090:59;;30160:12;30175:34;30201:7;30175:25;:34::i;:::-;30160:49;-1:-1:-1;30220:23:0;30246:43;30160:49;30246:33;30268:10;30246:33;:7;30258:4;30246:11;:17::i;:::-;:21;;:33::i;:43::-;30220:69;30325:4;;-1:-1:-1;30331:10:0;;-1:-1:-1;30331:10:0;-1:-1:-1;29926:430:0;;-1:-1:-1;;;29926:430:0:o;30364:500::-;30493:7;;;;30549:24;:7;30561:11;30549;:24::i;:::-;30531:42;-1:-1:-1;30584:12:0;30599:21;:4;30608:11;30599:8;:21::i;:::-;30584:36;-1:-1:-1;30631:18:0;30652:27;:10;30667:11;30652:14;:27::i;:::-;30631:48;-1:-1:-1;30690:12:0;30705:21;:4;30714:11;30705:8;:21::i;:::-;30690:36;-1:-1:-1;30737:23:0;30763:43;30690:36;30763:33;30785:10;30763:33;:7;30775:4;30763:11;:17::i;:43::-;30825:7;;;;-1:-1:-1;30851:4:0;;-1:-1:-1;30364:500:0;;-1:-1:-1;;;;;;;;;30364:500:0:o;37439:499::-;37529:16;;;37543:1;37529:16;;;;;;;;37505:21;;37529:16;;;;;;;;;;-1:-1:-1;37529:16:0;37505:40;;37574:4;37556;37561:1;37556:7;;;;;;-1:-1:-1;;;37556:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;37556:23:0;;;-1:-1:-1;;;;;37556:23:0;;;;;37600:15;-1:-1:-1;;;;;37600:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37590:4;37595:1;37590:7;;;;;;-1:-1:-1;;;37590:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;37590:32:0;;;-1:-1:-1;;;;;37590:32:0;;;;;37633:62;37650:4;37665:15;37683:11;37633:8;:62::i;:::-;37706:224;;-1:-1:-1;;;37706:224:0;;-1:-1:-1;;;;;37706:15:0;:66;;;;:224;;37787:11;;37813:1;;37857:4;;37884;;37904:15;;37706:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36481:119;36547:24;;:41;;-1:-1:-1;;;;;36547:24:0;;;;:41;;;;;36581:6;;36547:24;:41;:24;:41;36581:6;36547:24;:41;;;;;;;;;;;;;;;;;;;37946:414;38027:62;38044:4;38059:15;38077:11;38027:8;:62::i;:::-;38100:15;-1:-1:-1;;;;;38100:31:0;;38139:9;38172:4;38192:11;38218:1;38261;38304:7;7539;7566:6;-1:-1:-1;;;;;7566:6:0;7493:87;;38304:7;38100:252;;;;;;-1:-1:-1;;;;;;38100:252:0;;;-1:-1:-1;;;;;4122:15:1;;;38100:252:0;;;4104:34:1;4154:18;;;4147:34;;;;4197:18;;;4190:34;;;;4240:18;;;4233:34;4304:15;;;4283:19;;;4276:44;38326:15:0;4336:19:1;;;4329:35;4038:19;;38100:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37946:414;;:::o;32921:398::-;32967:14;;:19;:49;;;;-1:-1:-1;32990:21:0;;:26;32967:49;32964:61;;;33018:7;;32964:61;33070:14;;;33045:22;:39;33123:17;;;33095:25;:45;33183:21;;;33151:29;:53;-1:-1:-1;33225:18:0;;;;33254:21;;;;33286:25;32921:398;:::o;40828:740::-;40931:15;40948:23;40973:12;40987:23;41012:12;41026:18;41046:12;41062:19;41073:7;41062:10;:19::i;:::-;40930:151;;;;;;;;;;;;;;41109:14;:22;41124:6;-1:-1:-1;;;;;41109:22:0;-1:-1:-1;;;;;41109:22:0;;;;;;;;;;;;;;;;;;;;;;41108:23;:53;;;;-1:-1:-1;;;;;;41136:25:0;;;;;;:14;:25;;;;;;;;41135:26;41108:53;41100:97;;;;-1:-1:-1;;;41100:97:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41245:15:0;;;;;;:7;:15;;;;;;:28;;41265:7;41245:19;:28::i;:::-;-1:-1:-1;;;;;41227:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41302:7;:15;;;;:28;;41322:7;41302:19;:28::i;:::-;-1:-1:-1;;;;;41284:15:0;;;;;;;:7;:15;;;;;;:46;;;;41362:18;;;;;;;:39;;41385:15;41362:22;:39::i;:::-;-1:-1:-1;;;;;41341:18:0;;;;;;:7;:18;;;;;:60;41415:26;41430:10;41415:14;:26::i;:::-;41452:14;41461:4;41452:8;:14::i;:::-;41477:23;41489:4;41495;41477:11;:23::i;:::-;41533:9;-1:-1:-1;;;;;41516:44:0;41525:6;-1:-1:-1;;;;;41516:44:0;;41544:15;41516:44;;;;12156:25:1;;12144:2;12129:18;;12111:76;41516:44:0;;;;;;;;40828:740;;;;;;;;;;:::o;40057:763::-;40158:15;40175:23;40200:12;40214:23;40239:12;40253:18;40273:12;40289:19;40300:7;40289:10;:19::i;:::-;40157:151;;;;;;;;;;;;;;40338:14;:22;40353:6;-1:-1:-1;;;;;40338:22:0;-1:-1:-1;;;;;40338:22:0;;;;;;;;;;;;;;;;;;;;;;40337:23;:53;;;;-1:-1:-1;;;;;;40365:25:0;;;;;;:14;:25;;;;;;;;40364:26;40337:53;40329:97;;;;-1:-1:-1;;;40329:97:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40475:15:0;;;;;;:7;:15;;;;;;:28;;40495:7;40475:19;:28::i;:::-;-1:-1:-1;;;;;40457:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;40535:18;;;;;:7;:18;;;;;:39;;40558:15;40535:22;:39::i;:::-;-1:-1:-1;;;;;40514:18:0;;;;;;:7;:18;;;;;;;;:60;;;;40606:7;:18;;;;:39;;40629:15;40606:22;:39::i;39348:701::-;39447:15;39464:23;39489:12;39503:23;39528:12;39542:18;39562:12;39578:19;39589:7;39578:10;:19::i;:::-;39446:151;;;;;;;;;;;;;;39649:14;:22;39664:6;-1:-1:-1;;;;;39649:22:0;-1:-1:-1;;;;;39649:22:0;;;;;;;;;;;;;;;;;;;;;;39648:23;:53;;;;-1:-1:-1;;;;;;39676:25:0;;;;;;:14;:25;;;;;;;;39675:26;39648:53;39640:97;;;;-1:-1:-1;;;39640:97:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39786:15:0;;;;;;:7;:15;;;;;;:28;;39806:7;39786:19;:28::i;24395:681::-;24498:15;24515:23;24540:12;24554:23;24579:12;24593:18;24613:12;24629:19;24640:7;24629:10;:19::i;:::-;24497:151;;;;;;;;;;;;;;24677:28;24697:7;24677;:15;24685:6;-1:-1:-1;;;;;24677:15:0;-1:-1:-1;;;;;24677:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;24659:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24734:7;:15;;;;:28;;24754:7;24734:19;:28::i;32369:168::-;32440:7;32467:62;32513:5;32467:27;32479:14;;32467:7;:11;;:27;;;;:::i;32727:182::-;32805:7;32832:69;32885:5;32832:34;32844:21;;32832:7;:11;;:34;;;;:::i;32545:174::-;32619:7;32646:65;32695:5;32646:30;32658:17;;32646:7;:11;;:30;;;;:::i;31616:355::-;31679:19;31702:10;:8;:10::i;:::-;31679:33;-1:-1:-1;31723:18:0;31744:27;:10;31679:33;31744:14;:27::i;:::-;31823:4;31807:22;;;;:7;:22;;;;;;31723:48;;-1:-1:-1;31807:38:0;;31723:48;31807:26;:38::i;:::-;31798:4;31782:22;;;;:7;:22;;;;;;;;:63;;;;31859:11;:26;;;;;;31856:107;;;31941:4;31925:22;;;;:7;:22;;;;;;:38;;31952:10;31925:26;:38::i;:::-;31916:4;31900:22;;;;:7;:22;;;;;:63;31616:355;;;:::o;31983:374::-;32034:19;32057:10;:8;:10::i;:::-;32034:33;-1:-1:-1;32078:12:0;32093:21;:4;32034:33;32093:8;:21::i;:::-;32169:24;;-1:-1:-1;;;;;32169:24:0;32161:33;;;;:7;:33;;;;;;32078:36;;-1:-1:-1;32161:43:0;;32078:36;32161:37;:43::i;:::-;32133:24;;;-1:-1:-1;;;;;32133:24:0;;;32125:33;;;;:7;:33;;;;;;;;:79;;;;32230:24;;;;;32218:37;;:11;:37;;;;;;;32215:134;;;32314:24;;-1:-1:-1;;;;;32314:24:0;32306:33;;;;:7;:33;;;;;;:43;;32344:4;32306:37;:43::i;:::-;32278:24;;-1:-1:-1;;;;;32278:24:0;32270:33;;;;:7;:33;;;;;:79;31983:374;;;:::o;28356:147::-;28434:7;;:17;;28446:4;28434:11;:17::i;:::-;28424:7;:27;28475:10;;:20;;28490:4;28475:14;:20::i;:::-;28462:10;:33;-1:-1:-1;;28356:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;179:257;;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;;;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;;;;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;;;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:665::-;;;2058:2;2046:9;2037:7;2033:23;2029:32;2026:2;;;2079:6;2071;2064:22;2026:2;2124:9;2111:23;2153:18;2194:2;2186:6;2183:14;2180:2;;;2215:6;2207;2200:22;2180:2;2258:6;2247:9;2243:22;2233:32;;2303:7;2296:4;2292:2;2288:13;2284:27;2274:2;;2330:6;2322;2315:22;2274:2;2375;2362:16;2401:2;2393:6;2390:14;2387:2;;;2422:6;2414;2407:22;2387:2;2480:7;2475:2;2465:6;2462:1;2458:14;2454:2;2450:23;2446:32;2443:45;2440:2;;;2506:6;2498;2491:22;2440:2;2542;2534:11;;;;;2564:6;;-1:-1:-1;2016:560:1;;-1:-1:-1;;;;2016:560:1:o;2581:190::-;;2690:2;2678:9;2669:7;2665:23;2661:32;2658:2;;;2711:6;2703;2696:22;2658:2;2739:26;2755:9;2739:26;:::i;2776:190::-;;2888:2;2876:9;2867:7;2863:23;2859:32;2856:2;;;2909:6;2901;2894:22;2856:2;-1:-1:-1;2937:23:1;;2846:120;-1:-1:-1;2846:120:1:o;2971:258::-;;;3097:2;3085:9;3076:7;3072:23;3068:32;3065:2;;;3118:6;3110;3103:22;3065:2;3159:9;3146:23;3136:33;;3188:35;3219:2;3208:9;3204:18;3188:35;:::i;:::-;3178:45;;3055:174;;;;;:::o;3234:316::-;;;;3391:2;3379:9;3370:7;3366:23;3362:32;3359:2;;;3412:6;3404;3397:22;3359:2;3446:9;3440:16;3430:26;;3496:2;3485:9;3481:18;3475:25;3465:35;;3540:2;3529:9;3525:18;3519:25;3509:35;;3349:201;;;;;:::o;4802:603::-;;4943:2;4972;4961:9;4954:21;5004:6;4998:13;5047:6;5042:2;5031:9;5027:18;5020:34;5072:4;5085:140;5099:6;5096:1;5093:13;5085:140;;;5194:14;;;5190:23;;5184:30;5160:17;;;5179:2;5156:26;5149:66;5114:10;;5085:140;;;5243:6;5240:1;5237:13;5234:2;;;5313:4;5308:2;5299:6;5288:9;5284:22;5280:31;5273:45;5234:2;-1:-1:-1;5389:2:1;5368:15;-1:-1:-1;;5364:29:1;5349:45;;;;5396:2;5345:54;;4923:482;-1:-1:-1;;;4923:482:1:o;5410:399::-;5612:2;5594:21;;;5651:2;5631:18;;;5624:30;5690:34;5685:2;5670:18;;5663:62;-1:-1:-1;;;5756:2:1;5741:18;;5734:33;5799:3;5784:19;;5584:225::o;7035:355::-;7237:2;7219:21;;;7276:2;7256:18;;;7249:30;7315:33;7310:2;7295:18;;7288:61;7381:2;7366:18;;7209:181::o;9584:356::-;9786:2;9768:21;;;9805:18;;;9798:30;9864:34;9859:2;9844:18;;9837:62;9931:2;9916:18;;9758:182::o;12192:983::-;;12502:3;12491:9;12487:19;12533:6;12522:9;12515:25;12559:2;12597:6;12592:2;12581:9;12577:18;12570:34;12640:3;12635:2;12624:9;12620:18;12613:31;12664:6;12699;12693:13;12730:6;12722;12715:22;12768:3;12757:9;12753:19;12746:26;;12807:2;12799:6;12795:15;12781:29;;12828:4;12841:195;12855:6;12852:1;12849:13;12841:195;;;12920:13;;-1:-1:-1;;;;;12916:39:1;12904:52;;13011:15;;;;12976:12;;;;12952:1;12870:9;12841:195;;;-1:-1:-1;;;;;;;13092:32:1;;;;13087:2;13072:18;;13065:60;-1:-1:-1;;;13156:3:1;13141:19;13134:35;13053:3;12463:712;-1:-1:-1;;;12463:712:1:o;13693:128::-;;13764:1;13760:6;13757:1;13754:13;13751:2;;;13770:18;;:::i;:::-;-1:-1:-1;13806:9:1;;13741:80::o;13826:217::-;;13892:1;13882:2;;-1:-1:-1;;;13917:31:1;;13971:4;13968:1;13961:15;13999:4;13924:1;13989:15;13882:2;-1:-1:-1;14028:9:1;;13872:171::o;14048:168::-;;14154:1;14150;14146:6;14142:14;14139:1;14136:21;14131:1;14124:9;14117:17;14113:45;14110:2;;;14161:18;;:::i;:::-;-1:-1:-1;14201:9:1;;14100:116::o;14221:125::-;;14289:1;14286;14283:8;14280:2;;;14294:18;;:::i;:::-;-1:-1:-1;14331:9:1;;14270:76::o;14351:380::-;14430:1;14426:12;;;;14473;;;14494:2;;14548:4;14540:6;14536:17;14526:27;;14494:2;14601;14593:6;14590:14;14570:18;14567:38;14564:2;;;14647:10;14642:3;14638:20;14635:1;14628:31;14682:4;14679:1;14672:15;14710:4;14707:1;14700:15;14564:2;;14406:325;;;:::o;14736:135::-;;-1:-1:-1;;14796:17:1;;14793:2;;;14816:18;;:::i;:::-;-1:-1:-1;14863:1:1;14852:13;;14783:88::o;14876:127::-;14937:10;14932:3;14928:20;14925:1;14918:31;14968:4;14965:1;14958:15;14992:4;14989:1;14982:15;15008:131;-1:-1:-1;;;;;15083:31:1;;15073:42;;15063:2;;15129:1;15126;15119:12;15063:2;15053:86;:::o
Swarm Source
ipfs://23cb402d9610d7239a82bea491d868f37740f5f27a6e174a48463792d967d99b
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.