Overview
Max Total Supply
37,500,000 SKY
Holders
1,073 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
189,542.617017796538487316 SKYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheSkyToken
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-07 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.13; 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 ); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { 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 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; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract TheSkyToken is IERC20, Ownable { using Address for address; using SafeMath for uint256; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "The SkyToken"; string private constant _symbol = "SKY"; uint8 private constant _decimals = 18; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 37500000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; bool public isTradingEnabled; // max wallet is 1.0% of initialSupply uint256 public maxWalletAmount = _tTotal; // max tx is 0.33% of initialSupply uint256 public maxTxAmount = _tTotal; bool private _swapping; // max wallet is 0.025% of initialSupply uint256 public minimumTokensBeforeSwap = _tTotal * 250 / 1000000; address private dead = 0x000000000000000000000000000000000000dEaD; address public liquidityWallet; address public marketingWallet; address public buyBackWallet; address public devWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 devFeeOnBuy; uint8 devFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,3,3,2,2,2,2,2,2); uint256 private constant _blockedTimeLimit = 259200; uint256 private _launchBlockNumber; uint256 private _launchTimestamp; mapping (address => bool) private _isBlocked; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isExcludedFromMaxTransactionLimit; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) private _isExcludedFromDividends; mapping (address => bool) private _isAllowedToTradeWhenDisabled; address[] private _excludedFromDividends; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _devFee; uint8 private _buyBackFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event BlockedAccountChange(address indexed holder, bool indexed status); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee); event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromDividendsChange(address indexed account, bool isExcluded); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimETHOverflow(uint256 amount); event FeesApplied(uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee, uint8 totalFee); constructor() { liquidityWallet = owner(); marketingWallet = owner(); buyBackWallet = owner(); devWallet = owner(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; excludeFromDividends(address(this), true); excludeFromDividends(address(dead), true); excludeFromDividends(address(_uniswapV2Router), true); _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(dead)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _rOwned[owner()] = _rTotal; emit Transfer(address(0), owner(), _tTotal); } receive() external payable {} // Setters function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender,address recipient,uint256 amount) external 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) external virtual returns (bool){ _approve(_msgSender(),spender,_allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero")); return true; } 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 activateTrading() external onlyOwner { isTradingEnabled = true; if (_launchTimestamp == 0) { _launchTimestamp = block.timestamp; _launchBlockNumber = block.number; } } function deactivateTrading() external onlyOwner { isTradingEnabled = false; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "The SkyToken: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit AutomatedMarketMakerPairChange(pair, value); } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "The SkyToken: Account is already blocked"); require((block.timestamp - _launchTimestamp) < _blockedTimeLimit, "The SkyToken: Time to block accounts has expired"); _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "The SkyToken: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "The SkyToken: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "The SkyToken: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTransactionLimit[account] != excluded, "The SkyToken: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function setWallets(address newLiquidityWallet, address newMarketingWallet, address newDevWallet, address newBuyBackWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "The SkyToken: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(marketingWallet != newMarketingWallet) { require(newMarketingWallet != address(0), "The SkyToken: The marketingWallet cannot be 0"); emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } if(devWallet != newDevWallet) { require(newDevWallet != address(0), "The SkyToken: The devWallet cannot be 0"); emit WalletChange('devWallet', newDevWallet, devWallet); devWallet = newDevWallet; } if(buyBackWallet != newBuyBackWallet) { require(newBuyBackWallet != address(0), "The SkyToken: The buyBackWallet cannot be 0"); emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet); buyBackWallet = newBuyBackWallet; } } // Base fees function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell); } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "The SkyToken: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "The SkyToken: Cannot update maxTxAmount to same value"); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function excludeFromDividends(address account, bool excluded) public onlyOwner { require(_isExcludedFromDividends[account] != excluded, "The SkyToken: Account is already the value of 'excluded'"); if(excluded) { if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromDividends[account] = excluded; _excludedFromDividends.push(account); } else { for (uint256 i = 0; i < _excludedFromDividends.length; i++) { if (_excludedFromDividends[i] == account) { _excludedFromDividends[i] = _excludedFromDividends[_excludedFromDividends.length - 1]; _tOwned[account] = 0; _isExcludedFromDividends[account] = false; _excludedFromDividends.pop(); break; } } } emit ExcludeFromDividendsChange(account, excluded); } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "The SkyToken: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claimETHOverflow() external onlyOwner { require(address(this).balance > 0, "The SkyToken: Cannot send more than contract balance"); uint256 amount = address(this).balance; (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimETHOverflow(amount); } } // Getters function name() external view returns (string memory) { return _name; } function symbol() external view returns (string memory) { return _symbol; } function decimals() external view virtual returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromDividends[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function totalFees() external view returns (uint256) { return _tFeeTotal; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.holdersFeeOnSell); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "The SkyToken: Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "The SkyToken: Amount must be less than supply"); uint256 currentRate = _getRate(); uint256 rAmount = tAmount * currentRate; if (!deductTransferFee) { return rAmount; } else { uint256 rTotalFee = tAmount * _totalFee / 100 * currentRate; uint256 rTransferAmount = rAmount - rTotalFee; return rTransferAmount; } } // Main function _transfer( address from, address to, uint256 amount ) internal { 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"); require(amount <= balanceOf(from), "The SkyToken: Cannot transfer more than balance"); bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "The SkyToken: Trading is currently disabled."); require(!_isBlocked[to], "The SkyToken: Account is blocked"); require(!_isBlocked[from], "The SkyToken: Account is blocked"); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "The SkyToken: Transfer amount exceeds the maxTxAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "The SkyToken: Expected wallet amount exceeds the maxWalletAmount."); } } _adjustTaxes(isBuyFromLp, isSelltoLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function _tokenTransfer(address sender,address recipient, uint256 tAmount, bool takeFee) private { (uint256 tTransferAmount,uint256 tFee, uint256 tOther) = _getTValues(tAmount, takeFee); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rOther) = _getRValues(tAmount, tFee, tOther, _getRate()); if (_isExcludedFromDividends[sender]) { _tOwned[sender] = _tOwned[sender] - tAmount; } if (_isExcludedFromDividends[recipient]) { _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; } _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeContractFees(rOther, tOther); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal -= rFee; _tFeeTotal += tFee; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (uint256,uint256,uint256){ if (!takeFee) { return (tAmount, 0, 0); } else { uint256 tFee = tAmount * _holdersFee / 100; uint256 tOther = tAmount * (_liquidityFee + _devFee + _marketingFee + _buyBackFee) / 100; uint256 tTransferAmount = tAmount - (tFee + tOther); return (tTransferAmount, tFee, tOther); } } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tOther, uint256 currentRate ) private pure returns ( uint256, uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rOther = tOther * currentRate; uint256 rTransferAmount = rAmount - (rFee + rOther); return (rAmount, rTransferAmount, rFee, rOther); } 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 < _excludedFromDividends.length; i++) { if ( _rOwned[_excludedFromDividends[i]] > rSupply || _tOwned[_excludedFromDividends[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excludedFromDividends[i]]; tSupply = tSupply - _tOwned[_excludedFromDividends[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeContractFees(uint256 rOther, uint256 tOther) private { if (_isExcludedFromDividends[address(this)]) { _tOwned[address(this)] += tOther; } _rOwned[address(this)] += rOther; } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private { _liquidityFee = 0; _devFee = 0; _marketingFee = 0; _buyBackFee = 0; _holdersFee = 0; if (isBuyFromLp) { if ((block.number - _launchBlockNumber) <= 5) { _liquidityFee = 100; } else { _liquidityFee = _base.liquidityFeeOnBuy; _devFee = _base.devFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _devFee = _base.devFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _holdersFee = _base.holdersFeeOnSell; if (block.timestamp - _launchTimestamp <= 259200) { _liquidityFee = 2; _devFee = 3; _marketingFee = 10; _buyBackFee = 8; _holdersFee = 2; } } _totalFee = _liquidityFee + _marketingFee + _devFee + _buyBackFee + _holdersFee; emit FeesApplied(_liquidityFee, _marketingFee, _devFee, _buyBackFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, 'marketingFeeOnSell', map.periodName); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.devFeeOnSell != _devFeeOnSell) { emit CustomTaxPeriodChange(_devFeeOnSell, map.devFeeOnSell, 'devFeeOnSell', map.periodName); map.devFeeOnSell = _devFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, 'marketingFeeOnBuy', map.periodName); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.devFeeOnBuy != _devFeeOnBuy) { emit CustomTaxPeriodChange(_devFeeOnBuy, map.devFeeOnBuy, 'devFeeOnBuy', map.periodName); map.devFeeOnBuy = _devFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint8 totalFeePrior = _totalFee; uint8 liquidityFeePrior = _liquidityFee; uint8 marketingFeePrior = _marketingFee; uint8 devFeePrior = _devFee; uint8 buyBackFeePrior = _buyBackFee; uint8 holdersFeePrior = _holdersFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwapForETH = contractBalance - amountToLiquify; _swapTokensForETH(amountToSwapForETH); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior); uint256 amountETHLiquidity = ETHBalanceAfterSwap * liquidityFeePrior / totalETHFee / 2; uint256 amountETHDev = ETHBalanceAfterSwap * devFeePrior / totalETHFee; uint256 amountETHBuyBack = ETHBalanceAfterSwap * buyBackFeePrior / totalETHFee; uint256 amountETHMarketing = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHDev + amountETHBuyBack); payable(marketingWallet).transfer(amountETHMarketing); payable(devWallet).transfer(amountETHDev); payable(buyBackWallet).transfer(amountETHBuyBack); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwapForETH, amountETHLiquidity, amountToLiquify); } _totalFee = totalFeePrior; _liquidityFee = liquidityFeePrior; _marketingFee = marketingFeePrior; _devFee = devFeePrior; _buyBackFee = buyBackFeePrior; _holdersFee = holdersFeePrior; } 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 liquidityWallet, block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","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":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526200001d6a1f04ef12cb04cf1580000060001962000d40565b6200002b9060001962000d6d565b6005556a1f04ef12cb04cf158000006008556a1f04ef12cb04cf15800000600955620f42406a1f04ef12cb04cf1580000060fa6200006a919062000d87565b62000076919062000da9565b600b55600c80546001600160a01b03191661dead179055604080516101a081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820152600360a0820181905260c0820152600260e08201819052610100820181905261012082018190526101408201819052610160820181905261018090910152601180546001600160c01b031916636261736560981b1790556012556013805469020202020202030301016001600160501b03199091161790553480156200014457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600d80546001600160a01b039092166001600160a01b03199283168117909155600e8054831682179055600f8054831682179055601080549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa1580156200021d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000243919062000dc0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b7919062000dc0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b919062000dc0565b600180546001600160a01b0319166001600160a01b0385811691909117825582166080529091506200035f908290620005d5565b600160176000620003786000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553080825260179093522080549092166001908117909255620003c691620006d4565b600c54620003df906001600160a01b03166001620006d4565b620003ec826001620006d4565b6001601c6000620004056000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601c855283822080548716600190811790915587841683526018958690528483208054881682179055805490931682528382208054871684179055815291822080549094168117909355620004946000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601993849052828120805486166001908117909155600c54909216815291822080549094168117909355620005026000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560055490600290620005476000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005746000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a1f04ef12cb04cf15800000604051620005c591815260200190565b60405180910390a3505062000e8b565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620006805760405162461bcd60e51b815260206004820152604660248201527f54686520536b79546f6b656e3a204175746f6d61746564206d61726b6574206d60448201527f616b6572207061697220697320616c72656164792073657420746f20746861746064820152652076616c756560d01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620007305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000677565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503620007c85760405162461bcd60e51b815260206004820152603860248201527f54686520536b79546f6b656e3a204163636f756e7420697320616c726561647960448201527f207468652076616c7565206f6620276578636c75646564270000000000000000606482015260840162000677565b801562000895576001600160a01b038216600090815260026020526040902054156200082c576001600160a01b038216600090815260026020526040902054620008129062000a16565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055620009cc565b60005b601d54811015620009ca57826001600160a01b0316601d8281548110620008c357620008c362000deb565b6000918252602090912001546001600160a01b031603620009b557601d8054620008f09060019062000d6d565b8154811062000903576200090362000deb565b600091825260209091200154601d80546001600160a01b03909216918390811062000932576200093262000deb565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d8054806200098d576200098d62000e01565b600082815260209020810160001990810180546001600160a01b0319169055019055620009ca565b80620009c18162000e17565b91505062000898565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa98260405162000a0a911515815260200190565b60405180910390a25050565b600060055482111562000a925760405162461bcd60e51b815260206004820152603860248201527f54686520536b79546f6b656e3a20416d6f756e74206d757374206265206c657360448201527f73207468616e20746f74616c207265666c656374696f6e730000000000000000606482015260840162000677565b600062000a9e62000ab3565b905062000aac818462000da9565b9392505050565b6000808062000ac162000ae6565b9150915062000adf818362000ca460201b62001e301790919060201c565b9250505090565b60055460009081906a1f04ef12cb04cf15800000825b601d5481101562000c5f578260026000601d848154811062000b225762000b2262000deb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b9157508160036000601d848154811062000b6a5762000b6a62000deb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000bb0575050600554936a1f04ef12cb04cf158000009350915050565b60026000601d838154811062000bca5762000bca62000deb565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000bfb908462000d6d565b925060036000601d838154811062000c175762000c1762000deb565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c48908362000d6d565b91508062000c568162000e17565b91505062000afc565b506a1f04ef12cb04cf1580000060055462000c7b919062000da9565b82101562000c9b575050600554926a1f04ef12cb04cf1580000092509050565b90939092509050565b600062000aac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000cee60201b60201c565b6000818362000d125760405162461bcd60e51b815260040162000677919062000e33565b50600062000d21848662000da9565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000d525762000d5262000d2a565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000d825762000d8262000d57565b500390565b600081600019048311821515161562000da45762000da462000d57565b500290565b60008262000dbb5762000dbb62000d2a565b500490565b60006020828403121562000dd357600080fd5b81516001600160a01b038116811462000aac57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e2c5762000e2c62000d57565b5060010190565b600060208083528351808285015260005b8181101562000e625785810183015185820160400152820162000e44565b8181111562000e75576000604083870101525b50601f01601f1916929092016040019392505050565b608051613e7262000ea760003960006104e90152613e726000f3fe6080604052600436106102815760003560e01c8063781edb3c1161014f578063aa4bde28116100c1578063d2d7ad831161007a578063d2d7ad831461080c578063d322157614610822578063d469801614610842578063dd62ed3e14610862578063f2fde38b146108a8578063fe017535146108c857600080fd5b8063aa4bde28146106f5578063aee50b1e1461070b578063b1ba39ea1461072b578063b62496f51461074b578063c02466681461077b578063cd43e2281461079b57600080fd5b80638da5cb5b116101135780638da5cb5b1461062b5780638ea5220f1461064957806395d89b41146106695780639fad968314610695578063a457c2d7146106b5578063a9059cbb146106d557600080fd5b8063781edb3c146105955780637c0a893d146105b557806383672f3e146105d5578063880bcbc1146105f55780638c0b5e221461061557600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104d75780634d78fdc61461050b57806366164f6f1461052b57806370a0823114610540578063715018a61461056057806375f0a8741461057557600080fd5b806327a14fc2146104265780632d83811914610446578063313ce5671461046657806334cf1fea1461048257806339509351146104975780634549b039146104b757600080fd5b806313114a9d1161024557806313114a9d146103515780631694505e1461037057806318160ddd146103a85780631cd348c0146103c65780631e293c10146103e657806323b872dd1461040657600080fd5b80630483f7a01461028d578063064a59d0146102af57806306fdde03146102de578063095ea7b31461031c5780630bd05b691461033c57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046138b2565b61090e565b005b3480156102bb57600080fd5b506007546102c99060ff1681565b60405190151581526020015b60405180910390f35b3480156102ea57600080fd5b5060408051808201909152600c81526b2a34329029b5bcaa37b5b2b760a11b60208201525b6040516102d591906138e7565b34801561032857600080fd5b506102c961033736600461393c565b610bb5565b34801561034857600080fd5b506102ad610bcc565b34801561035d57600080fd5b506006545b6040519081526020016102d5565b34801561037c57600080fd5b50600154610390906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b3480156103b457600080fd5b506a1f04ef12cb04cf15800000610362565b3480156103d257600080fd5b50600f54610390906001600160a01b031681565b3480156103f257600080fd5b506102ad610401366004613968565b610c18565b34801561041257600080fd5b506102c9610421366004613981565b610ce4565b34801561043257600080fd5b506102ad610441366004613968565b610d4d565b34801561045257600080fd5b50610362610461366004613968565b610e21565b34801561047257600080fd5b50604051601281526020016102d5565b34801561048e57600080fd5b506102ad610eb8565b3480156104a357600080fd5b506102c96104b236600461393c565b610eee565b3480156104c357600080fd5b506103626104d23660046139c2565b610f24565b3480156104e357600080fd5b506103907f000000000000000000000000000000000000000000000000000000000000000081565b34801561051757600080fd5b506102ad6105263660046139e5565b61100c565b34801561053757600080fd5b506102ad6110f7565b34801561054c57600080fd5b5061036261055b3660046139e5565b611235565b34801561056c57600080fd5b506102ad611294565b34801561058157600080fd5b50600e54610390906001600160a01b031681565b3480156105a157600080fd5b506102ad6105b03660046138b2565b611308565b3480156105c157600080fd5b506102ad6105d03660046139e5565b6113ca565b3480156105e157600080fd5b506102ad6105f0366004613a02565b611538565b34801561060157600080fd5b506102ad6106103660046138b2565b6118f8565b34801561062157600080fd5b5061036260095481565b34801561063757600080fd5b506000546001600160a01b0316610390565b34801561065557600080fd5b50601054610390906001600160a01b031681565b34801561067557600080fd5b50604080518082019091526003815262534b5960e81b602082015261030f565b3480156106a157600080fd5b506102ad6106b0366004613a6f565b6119ba565b3480156106c157600080fd5b506102c96106d036600461393c565b611a71565b3480156106e157600080fd5b506102c96106f036600461393c565b611ac0565b34801561070157600080fd5b5061036260085481565b34801561071757600080fd5b506102ad610726366004613968565b611acd565b34801561073757600080fd5b506102ad610746366004613a6f565b611bab565b34801561075757600080fd5b506102c96107663660046139e5565b601a6020526000908152604090205460ff1681565b34801561078757600080fd5b506102ad6107963660046138b2565b611c02565b3480156107a757600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102d5565b34801561081857600080fd5b50610362600b5481565b34801561082e57600080fd5b506102ad61083d3660046138b2565b611cc4565b34801561084e57600080fd5b50600d54610390906001600160a01b031681565b34801561086e57600080fd5b5061036261087d366004613ad4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108b457600080fd5b506102ad6108c33660046139e5565b611d46565b3480156108d457600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107d8565b6000546001600160a01b031633146109415760405162461bcd60e51b815260040161093890613b0d565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036109815760405162461bcd60e51b815260040161093890613b42565b8015610a49576001600160a01b038216600090815260026020526040902054156109e1576001600160a01b0382166000908152600260205260409020546109c790610e21565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610b6c565b60005b601d54811015610b6a57826001600160a01b0316601d8281548110610a7357610a73613b9f565b6000918252602090912001546001600160a01b031603610b5857601d8054610a9d90600190613bcb565b81548110610aad57610aad613b9f565b600091825260209091200154601d80546001600160a01b039092169183908110610ad957610ad9613b9f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610b3157610b31613be2565b600082815260209020810160001990810180546001600160a01b0319169055019055610b6a565b80610b6281613bf8565b915050610a4c565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610ba9911515815260200190565b60405180910390a25050565b6000610bc2338484611e72565b5060015b92915050565b6000546001600160a01b03163314610bf65760405162461bcd60e51b815260040161093890613b0d565b6007805460ff19166001179055601554600003610c165742601555436014555b565b6000546001600160a01b03163314610c425760405162461bcd60e51b815260040161093890613b0d565b6009548103610cb15760405162461bcd60e51b815260206004820152603560248201527f54686520536b79546f6b656e3a2043616e6e6f7420757064617465206d61785460448201527478416d6f756e7420746f2073616d652076616c756560581b6064820152608401610938565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cf1848484611f96565b610d438433610d3e85604051806060016040528060288152602001613dd0602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061254e565b611e72565b5060019392505050565b6000546001600160a01b03163314610d775760405162461bcd60e51b815260040161093890613b0d565b6008548103610dee5760405162461bcd60e51b815260206004820152603960248201527f54686520536b79546f6b656e3a2043616e6e6f7420757064617465206d61785760448201527f616c6c6574416d6f756e7420746f2073616d652076616c7565000000000000006064820152608401610938565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610e9b5760405162461bcd60e51b815260206004820152603860248201527f54686520536b79546f6b656e3a20416d6f756e74206d757374206265206c657360448201527f73207468616e20746f74616c207265666c656374696f6e7300000000000000006064820152608401610938565b6000610ea5612588565b9050610eb18184613c27565b9392505050565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161093890613b0d565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610bc2918590610d3e90866125ab565b60006a1f04ef12cb04cf15800000831115610f975760405162461bcd60e51b815260206004820152602d60248201527f54686520536b79546f6b656e3a20416d6f756e74206d757374206265206c657360448201526c73207468616e20737570706c7960981b6064820152608401610938565b6000610fa1612588565b90506000610faf8286613c3b565b905083610fbf579150610bc69050565b601e546000908390606490610fde90600160281b900460ff1689613c3b565b610fe89190613c27565b610ff29190613c3b565b905060006110008284613bcb565b9450610bc69350505050565b6000546001600160a01b031633146110365760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03811660009081526016602052604090205460ff166110aa5760405162461bcd60e51b8152602060048201526024808201527f54686520536b79546f6b656e3a204163636f756e74206973206e6f7420626c636044820152631bdad95960e21b6064820152608401610938565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146111215760405162461bcd60e51b815260040161093890613b0d565b6000471161118e5760405162461bcd60e51b815260206004820152603460248201527f54686520536b79546f6b656e3a2043616e6e6f742073656e64206d6f7265207460448201527368616e20636f6e74726163742062616c616e636560601b6064820152608401610938565b4760006111a36000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146111ed576040519150601f19603f3d011682016040523d82523d6000602084013e6111f2565b606091505b505090508015611231576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b0381166000908152601b602052604081205460ff161561127257506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610bc690610e21565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260040161093890613b0d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113325760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036113725760405162461bcd60e51b815260040161093890613b42565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610ba9565b6000546001600160a01b031633146113f45760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03811660009081526016602052604090205460ff161561146e5760405162461bcd60e51b815260206004820152602860248201527f54686520536b79546f6b656e3a204163636f756e7420697320616c726561647960448201526708189b1bd8dad95960c21b6064820152608401610938565b6203f480601554426114809190613bcb565b106114e65760405162461bcd60e51b815260206004820152603060248201527f54686520536b79546f6b656e3a2054696d6520746f20626c6f636b206163636f60448201526f1d5b9d1cc81a185cc8195e1c1a5c995960821b6064820152608401610938565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146115625760405162461bcd60e51b815260040161093890613b0d565b600d546001600160a01b0385811691161461164a576001600160a01b0384166115e35760405162461bcd60e51b815260206004820152602d60248201527f54686520536b79546f6b656e3a20546865206c697175696469747957616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610938565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613db083398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b03848116911614611732576001600160a01b0383166116cb5760405162461bcd60e51b815260206004820152602d60248201527f54686520536b79546f6b656e3a20546865206d61726b6574696e6757616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610938565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613db083398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b0383811691161461180e576001600160a01b0382166117ad5760405162461bcd60e51b815260206004820152602760248201527f54686520536b79546f6b656e3a205468652064657657616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610938565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b039182169184169060090160405190819003812090600080516020613db083398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146118f2576001600160a01b03811661188d5760405162461bcd60e51b815260206004820152602b60248201527f54686520536b79546f6b656e3a20546865206275794261636b57616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610938565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613db083398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b031633146119225760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036119625760405162461bcd60e51b815260040161093890613b42565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ba9565b6000546001600160a01b031633146119e45760405162461bcd60e51b815260040161093890613b0d565b6119f36011868686868661260a565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610bc23384610d3e85604051806060016040528060258152602001613e18602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061254e565b6000610bc2338484611f96565b6000546001600160a01b03163314611af75760405162461bcd60e51b815260040161093890613b0d565b600b548103611b785760405162461bcd60e51b815260206004820152604160248201527f54686520536b79546f6b656e3a2043616e6e6f7420757064617465206d696e6960448201527f6d756d546f6b656e734265666f72655377617020746f2073616d652076616c756064820152606560f81b608482015260a401610938565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611bd55760405162461bcd60e51b815260040161093890613b0d565b611be4601186868686866128ee565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a0c565b6000546001600160a01b03163314611c2c5760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c6c5760405162461bcd60e51b815260040161093890613b42565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ba9565b6000546001600160a01b03163314611cee5760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610ba9565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b038116611dd55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610938565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610eb183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bee565b6001600160a01b038316611ed45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610938565b6001600160a01b038216611f355760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610938565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610938565b6001600160a01b03821661205c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610938565b600081116120be5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610938565b6120c783611235565b81111561212e5760405162461bcd60e51b815260206004820152602f60248201527f54686520536b79546f6b656e3a2043616e6e6f74207472616e73666572206d6f60448201526e7265207468616e2062616c616e636560881b6064820152608401610938565b6001600160a01b038084166000818152601a6020908152604080832054948716835280832054938352601c90915290205460ff92831692918216911615801561219057506001600160a01b0384166000908152601c602052604090205460ff16155b1561243b5760075460ff166121fc5760405162461bcd60e51b815260206004820152602c60248201527f54686520536b79546f6b656e3a2054726164696e672069732063757272656e7460448201526b363c903234b9b0b13632b21760a11b6064820152608401610938565b6001600160a01b03841660009081526016602052604090205460ff16156122655760405162461bcd60e51b815260206004820181905260248201527f54686520536b79546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610938565b6001600160a01b03851660009081526016602052604090205460ff16156122ce5760405162461bcd60e51b815260206004820181905260248201527f54686520536b79546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610938565b6001600160a01b03841660009081526019602052604090205460ff1615801561231057506001600160a01b03851660009081526019602052604090205460ff16155b15612386576009548311156123865760405162461bcd60e51b815260206004820152603660248201527f54686520536b79546f6b656e3a205472616e7366657220616d6f756e7420657860448201527531b2b2b239903a34329036b0bc2a3c20b6b7bab73a1760511b6064820152608401610938565b6001600160a01b03841660009081526018602052604090205460ff1661243b57600854836123b386611235565b6123bd9190613c5a565b111561243b5760405162461bcd60e51b815260206004820152604160248201527f54686520536b79546f6b656e3a2045787065637465642077616c6c657420616d60448201527f6f756e74206578636565647320746865206d617857616c6c6574416d6f756e746064820152601760f91b608482015260a401610938565b6124458282612c1c565b6000600b5461245330611235565b600754911115915060ff1680156124675750805b80156124765750600a5460ff16155b801561248d5750601e54600160281b900460ff1615155b80156124b157506001600160a01b0385166000908152601a602052604090205460ff165b156124d657600a805460ff191660011790556124cb612e65565b600a805460ff191690555b600a5460009060ff161580156124ee575060075460ff165b6001600160a01b03881660009081526017602052604090205490915060ff168061253057506001600160a01b03861660009081526017602052604090205460ff165b15612539575060005b61254587878784613157565b50505050505050565b600081848411156125725760405162461bcd60e51b815260040161093891906138e7565b50600061257f8486613bcb565b95945050505050565b6000806000612595613328565b90925090506125a48282611e30565b9250505090565b6000806125b88385613c5a565b905083811015610eb15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610938565b600286015460ff86811691161461268b57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613df8833981519152916126719160481b90613c72565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461271f57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613df8833981519152916126fe9160481b90613c72565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146127b2576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613df88339815191529161278e9160481b90613c72565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b909204161461284b576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613df8833981519152916128259160481b90613c72565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146128e6576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613df8833981519152916128be9160481b90613c72565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461297f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613df8833981519152916129609160481b90613c72565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a1857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613df8833981519152916129f59160481b90613c72565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612aad576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613df883398151915291612a889160481b90613c72565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b48576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613df883398151915291612b219160481b90613c72565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146128e6576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613df883398151915291612bbc9160481b90613c72565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612c0f5760405162461bcd60e51b815260040161093891906138e7565b50600061257f8486613c27565b601e805464ffffffffff191690558115612cce57600560145443612c409190613bcb565b11612c5757601e805460ff19166064179055612cce565b601354601e805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612d7657601354601e805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790556015546203f48090612d5b9042613bcb565b11612d7657601e805464ffffffffff1916640208030a021790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612daa91610100820481169116613c89565b612db49190613c89565b612dbe9190613c89565b612dc89190613c89565b601e805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001611228565b6000612e7030611235565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612eba888c613c3b565b612ec49190613c27565b612ece9190613c27565b90506000612edc828b613bcb565b9050612ee7816134cd565b6000612ef38a47613bcb565b9050600084612f0360028b613cae565b612f0d908c613cd0565b612f179190613cd0565b60ff16905060006002828b60ff1685612f309190613c3b565b612f3a9190613c27565b612f449190613c27565b9050600082612f5660ff8b1686613c3b565b612f609190613c27565b9050600083612f7260ff8b1687613c3b565b612f7c9190613c27565b9050600081612f8b8486613c5a565b612f959190613c5a565b612f9f9087613bcb565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612fda573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613015573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613050573d6000803e3d6000fd5b5087156130a357613061888561361f565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b600080600061316685856136d3565b925092509250600080600080613185898787613180612588565b61379d565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff16156131ee576001600160a01b038b166000908152600360205260409020546131d4908a90613bcb565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff161561324d576001600160a01b038a16600090815260036020526040902054613233908890613c5a565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054613271908590613bcb565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546132a1908490613c5a565b6001600160a01b038b166000908152600260205260409020556132c481866137f5565b6132ce828761385a565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161331391815260200190565b60405180910390a35050505050505050505050565b60055460009081906a1f04ef12cb04cf15800000825b601d5481101561348b578260026000601d848154811061336057613360613b9f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133cb57508160036000601d84815481106133a4576133a4613b9f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133e9575050600554936a1f04ef12cb04cf158000009350915050565b60026000601d838154811061340057613400613b9f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461342f9084613bcb565b925060036000601d838154811061344857613448613b9f565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134779083613bcb565b91508061348381613bf8565b91505061333e565b506a1f04ef12cb04cf158000006005546134a59190613c27565b8210156134c4575050600554926a1f04ef12cb04cf1580000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350257613502613b9f565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561355b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357f9190613cf3565b8160018151811061359257613592613b9f565b6001600160a01b0392831660209182029290920101526001546135b89130911684611e72565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906135f1908590600090869030904290600401613d10565b600060405180830381600087803b15801561360b57600080fd5b505af11580156128e6573d6000803e3d6000fd5b6001546136379030906001600160a01b031684611e72565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156136a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136cc9190613d81565b5050505050565b6000806000836136eb57508391506000905080613796565b601e5460009060649061370890600160201b900460ff1688613c3b565b6137129190613c27565b601e5490915060009060649060ff6301000000820481169161010081048216916137459162010000810482169116613c89565b61374f9190613c89565b6137599190613c89565b6137669060ff1689613c3b565b6137709190613c27565b9050600061377e8284613c5a565b6137889089613bcb565b955091935091506137969050565b9250925092565b6000808080806137ad868a613c3b565b905060006137bb878a613c3b565b905060006137c9888a613c3b565b905060006137d78284613c5a565b6137e19085613bcb565b939c939b5091995097509095505050505050565b306000908152601b602052604090205460ff161561383257306000908152600360205260408120805483929061382c908490613c5a565b90915550505b3060009081526002602052604081208054849290613851908490613c5a565b90915550505050565b816005600082825461386c9190613bcb565b9250508190555080600660008282546138519190613c5a565b6001600160a01b038116811461389a57600080fd5b50565b803580151581146138ad57600080fd5b919050565b600080604083850312156138c557600080fd5b82356138d081613885565b91506138de6020840161389d565b90509250929050565b600060208083528351808285015260005b81811015613914578581018301518582016040015282016138f8565b81811115613926576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561394f57600080fd5b823561395a81613885565b946020939093013593505050565b60006020828403121561397a57600080fd5b5035919050565b60008060006060848603121561399657600080fd5b83356139a181613885565b925060208401356139b181613885565b929592945050506040919091013590565b600080604083850312156139d557600080fd5b823591506138de6020840161389d565b6000602082840312156139f757600080fd5b8135610eb181613885565b60008060008060808587031215613a1857600080fd5b8435613a2381613885565b93506020850135613a3381613885565b92506040850135613a4381613885565b91506060850135613a5381613885565b939692955090935050565b803560ff811681146138ad57600080fd5b600080600080600060a08688031215613a8757600080fd5b613a9086613a5e565b9450613a9e60208701613a5e565b9350613aac60408701613a5e565b9250613aba60608701613a5e565b9150613ac860808701613a5e565b90509295509295909350565b60008060408385031215613ae757600080fd5b8235613af281613885565b91506020830135613b0281613885565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526038908201527f54686520536b79546f6b656e3a204163636f756e7420697320616c726561647960408201527f207468652076616c7565206f6620276578636c75646564270000000000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613bdd57613bdd613bb5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613c0a57613c0a613bb5565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613c3657613c36613c11565b500490565b6000816000190483118215151615613c5557613c55613bb5565b500290565b60008219821115613c6d57613c6d613bb5565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613ca657613ca6613bb5565b019392505050565b600060ff831680613cc157613cc1613c11565b8060ff84160491505092915050565b600060ff821660ff841680821015613cea57613cea613bb5565b90039392505050565b600060208284031215613d0557600080fd5b8151610eb181613885565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d605784516001600160a01b031683529383019391830191600101613d3b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613d9657600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122056e9a94e9b337761375781c87313e1fc2a070d7530d7eeb1e9204b1743e08e2764736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063781edb3c1161014f578063aa4bde28116100c1578063d2d7ad831161007a578063d2d7ad831461080c578063d322157614610822578063d469801614610842578063dd62ed3e14610862578063f2fde38b146108a8578063fe017535146108c857600080fd5b8063aa4bde28146106f5578063aee50b1e1461070b578063b1ba39ea1461072b578063b62496f51461074b578063c02466681461077b578063cd43e2281461079b57600080fd5b80638da5cb5b116101135780638da5cb5b1461062b5780638ea5220f1461064957806395d89b41146106695780639fad968314610695578063a457c2d7146106b5578063a9059cbb146106d557600080fd5b8063781edb3c146105955780637c0a893d146105b557806383672f3e146105d5578063880bcbc1146105f55780638c0b5e221461061557600080fd5b806327a14fc2116101f357806349bd5a5e116101ac57806349bd5a5e146104d75780634d78fdc61461050b57806366164f6f1461052b57806370a0823114610540578063715018a61461056057806375f0a8741461057557600080fd5b806327a14fc2146104265780632d83811914610446578063313ce5671461046657806334cf1fea1461048257806339509351146104975780634549b039146104b757600080fd5b806313114a9d1161024557806313114a9d146103515780631694505e1461037057806318160ddd146103a85780631cd348c0146103c65780631e293c10146103e657806323b872dd1461040657600080fd5b80630483f7a01461028d578063064a59d0146102af57806306fdde03146102de578063095ea7b31461031c5780630bd05b691461033c57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046138b2565b61090e565b005b3480156102bb57600080fd5b506007546102c99060ff1681565b60405190151581526020015b60405180910390f35b3480156102ea57600080fd5b5060408051808201909152600c81526b2a34329029b5bcaa37b5b2b760a11b60208201525b6040516102d591906138e7565b34801561032857600080fd5b506102c961033736600461393c565b610bb5565b34801561034857600080fd5b506102ad610bcc565b34801561035d57600080fd5b506006545b6040519081526020016102d5565b34801561037c57600080fd5b50600154610390906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b3480156103b457600080fd5b506a1f04ef12cb04cf15800000610362565b3480156103d257600080fd5b50600f54610390906001600160a01b031681565b3480156103f257600080fd5b506102ad610401366004613968565b610c18565b34801561041257600080fd5b506102c9610421366004613981565b610ce4565b34801561043257600080fd5b506102ad610441366004613968565b610d4d565b34801561045257600080fd5b50610362610461366004613968565b610e21565b34801561047257600080fd5b50604051601281526020016102d5565b34801561048e57600080fd5b506102ad610eb8565b3480156104a357600080fd5b506102c96104b236600461393c565b610eee565b3480156104c357600080fd5b506103626104d23660046139c2565b610f24565b3480156104e357600080fd5b506103907f000000000000000000000000626fdfd9ece333f2f2e59d57a2f23d4595b5c82081565b34801561051757600080fd5b506102ad6105263660046139e5565b61100c565b34801561053757600080fd5b506102ad6110f7565b34801561054c57600080fd5b5061036261055b3660046139e5565b611235565b34801561056c57600080fd5b506102ad611294565b34801561058157600080fd5b50600e54610390906001600160a01b031681565b3480156105a157600080fd5b506102ad6105b03660046138b2565b611308565b3480156105c157600080fd5b506102ad6105d03660046139e5565b6113ca565b3480156105e157600080fd5b506102ad6105f0366004613a02565b611538565b34801561060157600080fd5b506102ad6106103660046138b2565b6118f8565b34801561062157600080fd5b5061036260095481565b34801561063757600080fd5b506000546001600160a01b0316610390565b34801561065557600080fd5b50601054610390906001600160a01b031681565b34801561067557600080fd5b50604080518082019091526003815262534b5960e81b602082015261030f565b3480156106a157600080fd5b506102ad6106b0366004613a6f565b6119ba565b3480156106c157600080fd5b506102c96106d036600461393c565b611a71565b3480156106e157600080fd5b506102c96106f036600461393c565b611ac0565b34801561070157600080fd5b5061036260085481565b34801561071757600080fd5b506102ad610726366004613968565b611acd565b34801561073757600080fd5b506102ad610746366004613a6f565b611bab565b34801561075757600080fd5b506102c96107663660046139e5565b601a6020526000908152604090205460ff1681565b34801561078757600080fd5b506102ad6107963660046138b2565b611c02565b3480156107a757600080fd5b5060135460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102d5565b34801561081857600080fd5b50610362600b5481565b34801561082e57600080fd5b506102ad61083d3660046138b2565b611cc4565b34801561084e57600080fd5b50600d54610390906001600160a01b031681565b34801561086e57600080fd5b5061036261087d366004613ad4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108b457600080fd5b506102ad6108c33660046139e5565b611d46565b3480156108d457600080fd5b5060135460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107d8565b6000546001600160a01b031633146109415760405162461bcd60e51b815260040161093890613b0d565b60405180910390fd5b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036109815760405162461bcd60e51b815260040161093890613b42565b8015610a49576001600160a01b038216600090815260026020526040902054156109e1576001600160a01b0382166000908152600260205260409020546109c790610e21565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601b60205260408120805460ff1916841515179055601d805460018101825591527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055610b6c565b60005b601d54811015610b6a57826001600160a01b0316601d8281548110610a7357610a73613b9f565b6000918252602090912001546001600160a01b031603610b5857601d8054610a9d90600190613bcb565b81548110610aad57610aad613b9f565b600091825260209091200154601d80546001600160a01b039092169183908110610ad957610ad9613b9f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601b90925220805460ff19169055601d805480610b3157610b31613be2565b600082815260209020810160001990810180546001600160a01b0319169055019055610b6a565b80610b6281613bf8565b915050610a4c565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610ba9911515815260200190565b60405180910390a25050565b6000610bc2338484611e72565b5060015b92915050565b6000546001600160a01b03163314610bf65760405162461bcd60e51b815260040161093890613b0d565b6007805460ff19166001179055601554600003610c165742601555436014555b565b6000546001600160a01b03163314610c425760405162461bcd60e51b815260040161093890613b0d565b6009548103610cb15760405162461bcd60e51b815260206004820152603560248201527f54686520536b79546f6b656e3a2043616e6e6f7420757064617465206d61785460448201527478416d6f756e7420746f2073616d652076616c756560581b6064820152608401610938565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cf1848484611f96565b610d438433610d3e85604051806060016040528060288152602001613dd0602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061254e565b611e72565b5060019392505050565b6000546001600160a01b03163314610d775760405162461bcd60e51b815260040161093890613b0d565b6008548103610dee5760405162461bcd60e51b815260206004820152603960248201527f54686520536b79546f6b656e3a2043616e6e6f7420757064617465206d61785760448201527f616c6c6574416d6f756e7420746f2073616d652076616c7565000000000000006064820152608401610938565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610e9b5760405162461bcd60e51b815260206004820152603860248201527f54686520536b79546f6b656e3a20416d6f756e74206d757374206265206c657360448201527f73207468616e20746f74616c207265666c656374696f6e7300000000000000006064820152608401610938565b6000610ea5612588565b9050610eb18184613c27565b9392505050565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161093890613b0d565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610bc2918590610d3e90866125ab565b60006a1f04ef12cb04cf15800000831115610f975760405162461bcd60e51b815260206004820152602d60248201527f54686520536b79546f6b656e3a20416d6f756e74206d757374206265206c657360448201526c73207468616e20737570706c7960981b6064820152608401610938565b6000610fa1612588565b90506000610faf8286613c3b565b905083610fbf579150610bc69050565b601e546000908390606490610fde90600160281b900460ff1689613c3b565b610fe89190613c27565b610ff29190613c3b565b905060006110008284613bcb565b9450610bc69350505050565b6000546001600160a01b031633146110365760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03811660009081526016602052604090205460ff166110aa5760405162461bcd60e51b8152602060048201526024808201527f54686520536b79546f6b656e3a204163636f756e74206973206e6f7420626c636044820152631bdad95960e21b6064820152608401610938565b6001600160a01b038116600081815260166020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146111215760405162461bcd60e51b815260040161093890613b0d565b6000471161118e5760405162461bcd60e51b815260206004820152603460248201527f54686520536b79546f6b656e3a2043616e6e6f742073656e64206d6f7265207460448201527368616e20636f6e74726163742062616c616e636560601b6064820152608401610938565b4760006111a36000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146111ed576040519150601f19603f3d011682016040523d82523d6000602084013e6111f2565b606091505b505090508015611231576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b0381166000908152601b602052604081205460ff161561127257506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610bc690610e21565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260040161093890613b0d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113325760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036113725760405162461bcd60e51b815260040161093890613b42565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610ba9565b6000546001600160a01b031633146113f45760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03811660009081526016602052604090205460ff161561146e5760405162461bcd60e51b815260206004820152602860248201527f54686520536b79546f6b656e3a204163636f756e7420697320616c726561647960448201526708189b1bd8dad95960c21b6064820152608401610938565b6203f480601554426114809190613bcb565b106114e65760405162461bcd60e51b815260206004820152603060248201527f54686520536b79546f6b656e3a2054696d6520746f20626c6f636b206163636f60448201526f1d5b9d1cc81a185cc8195e1c1a5c995960821b6064820152608401610938565b6001600160a01b038116600081815260166020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146115625760405162461bcd60e51b815260040161093890613b0d565b600d546001600160a01b0385811691161461164a576001600160a01b0384166115e35760405162461bcd60e51b815260206004820152602d60248201527f54686520536b79546f6b656e3a20546865206c697175696469747957616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610938565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f0160405190819003812090600080516020613db083398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b03848116911614611732576001600160a01b0383166116cb5760405162461bcd60e51b815260206004820152602d60248201527f54686520536b79546f6b656e3a20546865206d61726b6574696e6757616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610938565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f0160405190819003812090600080516020613db083398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b0383811691161461180e576001600160a01b0382166117ad5760405162461bcd60e51b815260206004820152602760248201527f54686520536b79546f6b656e3a205468652064657657616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610938565b6010546040516819195d95d85b1b195d60ba1b81526001600160a01b039182169184169060090160405190819003812090600080516020613db083398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146118f2576001600160a01b03811661188d5760405162461bcd60e51b815260206004820152602b60248201527f54686520536b79546f6b656e3a20546865206275794261636b57616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610938565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d0160405190819003812090600080516020613db083398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b031633146119225760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036119625760405162461bcd60e51b815260040161093890613b42565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ba9565b6000546001600160a01b031633146119e45760405162461bcd60e51b815260040161093890613b0d565b6119f36011868686868661260a565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610bc23384610d3e85604051806060016040528060258152602001613e18602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061254e565b6000610bc2338484611f96565b6000546001600160a01b03163314611af75760405162461bcd60e51b815260040161093890613b0d565b600b548103611b785760405162461bcd60e51b815260206004820152604160248201527f54686520536b79546f6b656e3a2043616e6e6f7420757064617465206d696e6960448201527f6d756d546f6b656e734265666f72655377617020746f2073616d652076616c756064820152606560f81b608482015260a401610938565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611bd55760405162461bcd60e51b815260040161093890613b0d565b611be4601186868686866128ee565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a0c565b6000546001600160a01b03163314611c2c5760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c6c5760405162461bcd60e51b815260040161093890613b42565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ba9565b6000546001600160a01b03163314611cee5760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610ba9565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260040161093890613b0d565b6001600160a01b038116611dd55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610938565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610eb183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bee565b6001600160a01b038316611ed45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610938565b6001600160a01b038216611f355760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610938565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610938565b6001600160a01b03821661205c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610938565b600081116120be5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610938565b6120c783611235565b81111561212e5760405162461bcd60e51b815260206004820152602f60248201527f54686520536b79546f6b656e3a2043616e6e6f74207472616e73666572206d6f60448201526e7265207468616e2062616c616e636560881b6064820152608401610938565b6001600160a01b038084166000818152601a6020908152604080832054948716835280832054938352601c90915290205460ff92831692918216911615801561219057506001600160a01b0384166000908152601c602052604090205460ff16155b1561243b5760075460ff166121fc5760405162461bcd60e51b815260206004820152602c60248201527f54686520536b79546f6b656e3a2054726164696e672069732063757272656e7460448201526b363c903234b9b0b13632b21760a11b6064820152608401610938565b6001600160a01b03841660009081526016602052604090205460ff16156122655760405162461bcd60e51b815260206004820181905260248201527f54686520536b79546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610938565b6001600160a01b03851660009081526016602052604090205460ff16156122ce5760405162461bcd60e51b815260206004820181905260248201527f54686520536b79546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610938565b6001600160a01b03841660009081526019602052604090205460ff1615801561231057506001600160a01b03851660009081526019602052604090205460ff16155b15612386576009548311156123865760405162461bcd60e51b815260206004820152603660248201527f54686520536b79546f6b656e3a205472616e7366657220616d6f756e7420657860448201527531b2b2b239903a34329036b0bc2a3c20b6b7bab73a1760511b6064820152608401610938565b6001600160a01b03841660009081526018602052604090205460ff1661243b57600854836123b386611235565b6123bd9190613c5a565b111561243b5760405162461bcd60e51b815260206004820152604160248201527f54686520536b79546f6b656e3a2045787065637465642077616c6c657420616d60448201527f6f756e74206578636565647320746865206d617857616c6c6574416d6f756e746064820152601760f91b608482015260a401610938565b6124458282612c1c565b6000600b5461245330611235565b600754911115915060ff1680156124675750805b80156124765750600a5460ff16155b801561248d5750601e54600160281b900460ff1615155b80156124b157506001600160a01b0385166000908152601a602052604090205460ff165b156124d657600a805460ff191660011790556124cb612e65565b600a805460ff191690555b600a5460009060ff161580156124ee575060075460ff165b6001600160a01b03881660009081526017602052604090205490915060ff168061253057506001600160a01b03861660009081526017602052604090205460ff165b15612539575060005b61254587878784613157565b50505050505050565b600081848411156125725760405162461bcd60e51b815260040161093891906138e7565b50600061257f8486613bcb565b95945050505050565b6000806000612595613328565b90925090506125a48282611e30565b9250505090565b6000806125b88385613c5a565b905083811015610eb15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610938565b600286015460ff86811691161461268b57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613df8833981519152916126719160481b90613c72565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461271f57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613df8833981519152916126fe9160481b90613c72565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146127b2576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613df88339815191529161278e9160481b90613c72565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b909204161461284b576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613df8833981519152916128259160481b90613c72565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146128e6576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613df8833981519152916128be9160481b90613c72565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461297f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613df8833981519152916129609160481b90613c72565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a1857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613df8833981519152916129f59160481b90613c72565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612aad576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613df883398151915291612a889160481b90613c72565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b48576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613df883398151915291612b219160481b90613c72565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146128e6576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613df883398151915291612bbc9160481b90613c72565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612c0f5760405162461bcd60e51b815260040161093891906138e7565b50600061257f8486613c27565b601e805464ffffffffff191690558115612cce57600560145443612c409190613bcb565b11612c5757601e805460ff19166064179055612cce565b601354601e805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612d7657601354601e805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790556015546203f48090612d5b9042613bcb565b11612d7657601e805464ffffffffff1916640208030a021790555b601e5460ff600160201b820481169163010000008104821691620100008204811691612daa91610100820481169116613c89565b612db49190613c89565b612dbe9190613c89565b612dc89190613c89565b601e805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001611228565b6000612e7030611235565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612eba888c613c3b565b612ec49190613c27565b612ece9190613c27565b90506000612edc828b613bcb565b9050612ee7816134cd565b6000612ef38a47613bcb565b9050600084612f0360028b613cae565b612f0d908c613cd0565b612f179190613cd0565b60ff16905060006002828b60ff1685612f309190613c3b565b612f3a9190613c27565b612f449190613c27565b9050600082612f5660ff8b1686613c3b565b612f609190613c27565b9050600083612f7260ff8b1687613c3b565b612f7c9190613c27565b9050600081612f8b8486613c5a565b612f959190613c5a565b612f9f9087613bcb565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612fda573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613015573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613050573d6000803e3d6000fd5b5087156130a357613061888561361f565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b600080600061316685856136d3565b925092509250600080600080613185898787613180612588565b61379d565b6001600160a01b038f166000908152601b60205260409020549397509195509350915060ff16156131ee576001600160a01b038b166000908152600360205260409020546131d4908a90613bcb565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601b602052604090205460ff161561324d576001600160a01b038a16600090815260036020526040902054613233908890613c5a565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054613271908590613bcb565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546132a1908490613c5a565b6001600160a01b038b166000908152600260205260409020556132c481866137f5565b6132ce828761385a565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161331391815260200190565b60405180910390a35050505050505050505050565b60055460009081906a1f04ef12cb04cf15800000825b601d5481101561348b578260026000601d848154811061336057613360613b9f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133cb57508160036000601d84815481106133a4576133a4613b9f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133e9575050600554936a1f04ef12cb04cf158000009350915050565b60026000601d838154811061340057613400613b9f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461342f9084613bcb565b925060036000601d838154811061344857613448613b9f565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134779083613bcb565b91508061348381613bf8565b91505061333e565b506a1f04ef12cb04cf158000006005546134a59190613c27565b8210156134c4575050600554926a1f04ef12cb04cf1580000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350257613502613b9f565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561355b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357f9190613cf3565b8160018151811061359257613592613b9f565b6001600160a01b0392831660209182029290920101526001546135b89130911684611e72565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906135f1908590600090869030904290600401613d10565b600060405180830381600087803b15801561360b57600080fd5b505af11580156128e6573d6000803e3d6000fd5b6001546136379030906001600160a01b031684611e72565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156136a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136cc9190613d81565b5050505050565b6000806000836136eb57508391506000905080613796565b601e5460009060649061370890600160201b900460ff1688613c3b565b6137129190613c27565b601e5490915060009060649060ff6301000000820481169161010081048216916137459162010000810482169116613c89565b61374f9190613c89565b6137599190613c89565b6137669060ff1689613c3b565b6137709190613c27565b9050600061377e8284613c5a565b6137889089613bcb565b955091935091506137969050565b9250925092565b6000808080806137ad868a613c3b565b905060006137bb878a613c3b565b905060006137c9888a613c3b565b905060006137d78284613c5a565b6137e19085613bcb565b939c939b5091995097509095505050505050565b306000908152601b602052604090205460ff161561383257306000908152600360205260408120805483929061382c908490613c5a565b90915550505b3060009081526002602052604081208054849290613851908490613c5a565b90915550505050565b816005600082825461386c9190613bcb565b9250508190555080600660008282546138519190613c5a565b6001600160a01b038116811461389a57600080fd5b50565b803580151581146138ad57600080fd5b919050565b600080604083850312156138c557600080fd5b82356138d081613885565b91506138de6020840161389d565b90509250929050565b600060208083528351808285015260005b81811015613914578581018301518582016040015282016138f8565b81811115613926576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561394f57600080fd5b823561395a81613885565b946020939093013593505050565b60006020828403121561397a57600080fd5b5035919050565b60008060006060848603121561399657600080fd5b83356139a181613885565b925060208401356139b181613885565b929592945050506040919091013590565b600080604083850312156139d557600080fd5b823591506138de6020840161389d565b6000602082840312156139f757600080fd5b8135610eb181613885565b60008060008060808587031215613a1857600080fd5b8435613a2381613885565b93506020850135613a3381613885565b92506040850135613a4381613885565b91506060850135613a5381613885565b939692955090935050565b803560ff811681146138ad57600080fd5b600080600080600060a08688031215613a8757600080fd5b613a9086613a5e565b9450613a9e60208701613a5e565b9350613aac60408701613a5e565b9250613aba60608701613a5e565b9150613ac860808701613a5e565b90509295509295909350565b60008060408385031215613ae757600080fd5b8235613af281613885565b91506020830135613b0281613885565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526038908201527f54686520536b79546f6b656e3a204163636f756e7420697320616c726561647960408201527f207468652076616c7565206f6620276578636c75646564270000000000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613bdd57613bdd613bb5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613c0a57613c0a613bb5565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613c3657613c36613c11565b500490565b6000816000190483118215151615613c5557613c55613bb5565b500290565b60008219821115613c6d57613c6d613bb5565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613ca657613ca6613bb5565b019392505050565b600060ff831680613cc157613cc1613c11565b8060ff84160491505092915050565b600060ff821660ff841680821015613cea57613cea613bb5565b90039392505050565b600060208284031215613d0557600080fd5b8151610eb181613885565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d605784516001600160a01b031683529383019391830191600101613d3b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613d9657600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122056e9a94e9b337761375781c87313e1fc2a070d7530d7eeb1e9204b1743e08e2764736f6c634300080d0033
Deployed Bytecode Sourcemap
7734:25793:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19496:832;;;;;;;;;;-1:-1:-1;19496:832:0;;;;;:::i;:::-;;:::i;:::-;;8415:28;;;;;;;;;;-1:-1:-1;8415:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8415:28:0;;;;;;;;20979:76;;;;;;;;;;-1:-1:-1;21045:5:0;;;;;;;;;;;;-1:-1:-1;;;21045:5:0;;;;20979:76;;;;;;;:::i;13339:146::-;;;;;;;;;;-1:-1:-1;13339:146:0;;;;;:::i;:::-;;:::i;14553:201::-;;;;;;;;;;;;;:::i;21518:80::-;;;;;;;;;;-1:-1:-1;21583:10:0;;21518:80;;;1895:25:1;;;1883:2;1868:18;21518:80:0;1749:177:1;7842:30:0;;;;;;;;;;-1:-1:-1;7842:30:0;;;;-1:-1:-1;;;;;7842:30:0;;;;;;-1:-1:-1;;;;;2110:32:1;;;2092:51;;2080:2;2065:18;7842:30:0;1931:218:1;21228:88:0;;;;;;;;;;-1:-1:-1;8309:17:0;21228:88;;8908:28;;;;;;;;;;-1:-1:-1;8908:28:0;;;;-1:-1:-1;;;;;8908:28:0;;;19226:267;;;;;;;;;;-1:-1:-1;19226:267:0;;;;;:::i;:::-;;:::i;13488:292::-;;;;;;;;;;-1:-1:-1;13488:292:0;;;;;:::i;:::-;;:::i;18962:261::-;;;;;;;;;;-1:-1:-1;18962:261:0;;;;;:::i;:::-;;:::i;22185:243::-;;;;;;;;;;-1:-1:-1;22185:243:0;;;;;:::i;:::-;;:::i;21141:84::-;;;;;;;;;;-1:-1:-1;21141:84:0;;8049:2;3150:36:1;;3138:2;3123:18;21141:84:0;3008:184:1;14757:82:0;;;;;;;;;;;;;:::i;13783:202::-;;;;;;;;;;-1:-1:-1;13783:202:0;;;;;:::i;:::-;;:::i;22431:484::-;;;;;;;;;;-1:-1:-1;22431:484:0;;;;;:::i;:::-;;:::i;7876:38::-;;;;;;;;;;;;;;;15495:216;;;;;;;;;;-1:-1:-1;15495:216:0;;;;;:::i;:::-;;:::i;20644:317::-;;;;;;;;;;;;;:::i;21319:196::-;;;;;;;;;;-1:-1:-1;21319:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;8874:30::-;;;;;;;;;;-1:-1:-1;8874:30:0;;;;-1:-1:-1;;;;;8874:30:0;;;16212:324;;;;;;;;;;-1:-1:-1;16212:324:0;;;;;:::i;:::-;;:::i;15153:339::-;;;;;;;;;;-1:-1:-1;15153:339:0;;;;;:::i;:::-;;:::i;16883:1194::-;;;;;;;;;;-1:-1:-1;16883:1194:0;;;;;:::i;:::-;;:::i;16539:341::-;;;;;;;;;;-1:-1:-1;16539:341:0;;;;;:::i;:::-;;:::i;8577:36::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;8940:24;;;;;;;;;;-1:-1:-1;8940:24:0;;;;-1:-1:-1;;;;;8940:24:0;;;21058:80;;;;;;;;;;-1:-1:-1;21126:7:0;;;;;;;;;;;;-1:-1:-1;;;21126:7:0;;;;21058:80;;18098:421;;;;;;;;;;-1:-1:-1;18098:421:0;;;;;:::i;:::-;;:::i;13988:253::-;;;;;;;;;;-1:-1:-1;13988:253:0;;;;;:::i;:::-;;:::i;13182:154::-;;;;;;;;;;-1:-1:-1;13182:154:0;;;;;:::i;:::-;;:::i;8490:40::-;;;;;;;;;;;;;;;;20331:310;;;;;;;;;;-1:-1:-1;20331:310:0;;;;;:::i;:::-;;:::i;18522:437::-;;;;;;;;;;-1:-1:-1;18522:437:0;;;;;:::i;:::-;;:::i;9832:58::-;;;;;;;;;;-1:-1:-1;9832:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15919:287;;;;;;;;;;-1:-1:-1;15919:287:0;;;;;:::i;:::-;;:::i;21743:215::-;;;;;;;;;;-1:-1:-1;21839:23:0;;;;;;;21864;;;;;;-1:-1:-1;;;21889:17:0;;;;;-1:-1:-1;;;21908:21:0;;;;;-1:-1:-1;;;21931:21:0;;;;21743:215;;;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;;;;5427:17;;5422:2;5407:18;;5400:45;5482:17;;;5476:3;5461:19;;5454:46;5234:3;5219:19;21743:215:0;5008:498:1;8693:64:0;;;;;;;;;;;;;;;;15714:202;;;;;;;;;;-1:-1:-1;15714:202:0;;;;;:::i;:::-;;:::i;8837:30::-;;;;;;;;;;-1:-1:-1;8837:30:0;;;;-1:-1:-1;;;;;8837:30:0;;;21601:136;;;;;;;;;;-1:-1:-1;21601:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;21705:18:0;;;21684:7;21705:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21601:136;7504:223;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;21961:221::-;;;;;;;;;;-1:-1:-1;22058:24:0;;;;;;;;;22084;;;;;;-1:-1:-1;;;22110:18:0;;;;;-1:-1:-1;;;22130:22:0;;;;;-1:-1:-1;;;22154:22:0;;;;21961:221;;19496:832;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;19588:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;19580:114:::1;;;;-1:-1:-1::0;;;19580:114:0::1;;;;;;;:::i;:::-;19702:8;19699:570;;;-1:-1:-1::0;;;;;19721:16:0;::::1;19740:1;19721:16:::0;;;:7:::1;:16;::::0;;;;;:20;19718:95:::1;;-1:-1:-1::0;;;;;19789:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19769:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19750:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19718:95:::1;-1:-1:-1::0;;;;;19818:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;19818:44:0::1;::::0;::::1;;;::::0;;19868:22:::1;:36:::0;;-1:-1:-1;19868:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;19868:36:0::1;::::0;;::::1;::::0;;19699:570:::1;;;19927:9;19922:342;19946:22;:29:::0;19942:33;::::1;19922:342;;;20022:7;-1:-1:-1::0;;;;;19993:36:0::1;:22;20016:1;19993:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19993:25:0::1;:36:::0;19989:269:::1;;20067:22;20090:29:::0;;:33:::1;::::0;20122:1:::1;::::0;20090:33:::1;:::i;:::-;20067:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20039:22:::1;:25:::0;;-1:-1:-1;;;;;20067:57:0;;::::1;::::0;20062:1;;20039:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;20039:85:0::1;-1:-1:-1::0;;;;;20039:85:0;;::::1;;::::0;;20132:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20160:24:::1;:33:::0;;;;:41;;-1:-1:-1;;20160:41:0::1;::::0;;20209:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20209:28:0;;;;;-1:-1:-1;;;;;;20209:28:0::1;::::0;;;;;20245:5:::1;;19989:269;19977:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19922:342;;;;19699:570;20305:7;-1:-1:-1::0;;;;;20278:45:0::1;;20314:8;20278:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;20278:45:0::1;;;;;;;;19496:832:::0;;:::o;13339:146::-;13414:4;13425:39;6648:10;13448:7;13457:6;13425:8;:39::i;:::-;-1:-1:-1;13476:4:0;13339:146;;;;;:::o;14553:201::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14604:16:::1;:23:::0;;-1:-1:-1;;14604:23:0::1;14623:4;14604:23;::::0;;14642:16:::1;::::0;14604::::1;14642:21:::0;14638:112:::1;;14690:15;14671:16;:34:::0;14732:12:::1;14711:18;:33:::0;14638:112:::1;14553:201::o:0;19226:267::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19321:11:::1;;19309:8;:23:::0;19301:89:::1;;;::::0;-1:-1:-1;;;19301:89:0;;7558:2:1;19301:89:0::1;::::0;::::1;7540:21:1::0;7597:2;7577:18;;;7570:30;7636:34;7616:18;;;7609:62;-1:-1:-1;;;7687:18:1;;;7680:51;7748:19;;19301:89:0::1;7356:417:1::0;19301:89:0::1;19443:11;::::0;19406:49:::1;::::0;19433:8;;19406:49:::1;::::0;;;::::1;19466:11;:22:::0;19226:267::o;13488:292::-;13587:4;13598:36;13608:6;13616:9;13627:6;13598:9;:36::i;:::-;13639:120;13648:6;6648:10;13670:88;13708:6;13670:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13670:19:0;;;;;;:11;:19;;;;;;;;6648:10;13670:33;;;;;;;;;;:37;:88::i;:::-;13639:8;:120::i;:::-;-1:-1:-1;13771:4:0;13488:292;;;;;:::o;18962:261::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19052:15:::1;;19040:8;:27:::0;19032:97:::1;;;::::0;-1:-1:-1;;;19032:97:0;;7980:2:1;19032:97:0::1;::::0;::::1;7962:21:1::0;8019:2;7999:18;;;7992:30;8058:34;8038:18;;;8031:62;8129:27;8109:18;;;8102:55;8174:19;;19032:97:0::1;7778:421:1::0;19032:97:0::1;19171:15;::::0;19139:48:::1;::::0;19161:8;;19139:48:::1;::::0;;;::::1;19192:15;:26:::0;18962:261::o;22185:243::-;22251:7;22284;;22273;:18;;22265:87;;;;-1:-1:-1;;;22265:87:0;;8406:2:1;22265:87:0;;;8388:21:1;8445:2;8425:18;;;8418:30;8484:34;8464:18;;;8457:62;8555:26;8535:18;;;8528:54;8599:19;;22265:87:0;8204:420:1;22265:87:0;22357:19;22380:10;:8;:10::i;:::-;22357:33;-1:-1:-1;22402:21:0;22357:33;22402:7;:21;:::i;:::-;22395:28;22185:243;-1:-1:-1;;;22185:243:0:o;14757:82::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14810:16:::1;:24:::0;;-1:-1:-1;;14810:24:0::1;::::0;;14757:82::o;13783:202::-;6648:10;13873:4;13913:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13913:34:0;;;;;;;;;;13873:4;;13883:81;;13905:7;;13913:50;;13952:10;13913:38;:50::i;22431:484::-;22524:7;8309:17;22546:7;:18;;22538:76;;;;-1:-1:-1;;;22538:76:0;;9088:2:1;22538:76:0;;;9070:21:1;9127:2;9107:18;;;9100:30;9166:34;9146:18;;;9139:62;-1:-1:-1;;;9217:18:1;;;9210:43;9270:19;;22538:76:0;8886:409:1;22538:76:0;22619:19;22641:10;:8;:10::i;:::-;22619:32;-1:-1:-1;22656:15:0;22675:21;22619:32;22675:7;:21;:::i;:::-;22656:40;;22706:17;22701:210;;22738:7;-1:-1:-1;22731:14:0;;-1:-1:-1;22731:14:0;22701:210;22797:9;;22766:17;;22815:11;;22809:3;;22787:19;;-1:-1:-1;;;22797:9:0;;;;22787:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;22766:60;-1:-1:-1;22832:23:0;22858:19;22766:60;22858:7;:19;:::i;:::-;22832:45;-1:-1:-1;22883:22:0;;-1:-1:-1;;;;22883:22:0;15495:216;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15568:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15560:68;;;::::0;-1:-1:-1;;;15560:68:0;;9675:2:1;15560:68:0::1;::::0;::::1;9657:21:1::0;9714:2;9694:18;;;9687:30;9753:34;9733:18;;;9726:62;-1:-1:-1;;;9804:18:1;;;9797:34;9848:19;;15560:68:0::1;9473:400:1::0;15560:68:0::1;-1:-1:-1::0;;;;;15633:19:0;::::1;15655:5;15633:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;15633:27:0::1;::::0;;15670:36;15655:5;;15633:19;15670:36:::1;::::0;15655:5;;15670:36:::1;15495:216:::0;:::o;20644:317::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20728:1:::1;20704:21;:25;20696:90;;;::::0;-1:-1:-1;;;20696:90:0;;10080:2:1;20696:90:0::1;::::0;::::1;10062:21:1::0;10119:2;10099:18;;;10092:30;10158:34;10138:18;;;10131:62;-1:-1:-1;;;10209:18:1;;;10202:50;10269:19;;20696:90:0::1;9878:416:1::0;20696:90:0::1;20814:21;20797:14;20866:7;7220::::0;7241:6;-1:-1:-1;;;;;7241:6:0;;7182:70;20866:7:::1;-1:-1:-1::0;;;;;20858:21:0::1;20888:6;20858:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20840:59;;;20908:7;20904:53;;;20927:24;::::0;1895:25:1;;;20927:24:0::1;::::0;1883:2:1;1868:18;20927:24:0::1;;;;;;;;20904:53;20691:270;;20644:317::o:0;21319:196::-;-1:-1:-1;;;;;21403:33:0;;21385:7;21403:33;;;:24;:33;;;;;;;;21399:62;;;-1:-1:-1;;;;;;21445:16:0;;;;;:7;:16;;;;;;;21319:196::o;21399:62::-;-1:-1:-1;;;;;21493:16:0;;;;;;:7;:16;;;;;;21473:37;;:19;:37::i;7366:133::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;7467:1:::1;7451:6:::0;;7430:40:::1;::::0;-1:-1:-1;;;;;7451:6:0;;::::1;::::0;7430:40:::1;::::0;7467:1;;7430:40:::1;7492:1;7475:19:::0;;-1:-1:-1;;;;;;7475:19:0::1;::::0;;7366:133::o;16212:324::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16311:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;16303:119:::1;;;;-1:-1:-1::0;;;16303:119:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16427:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;16427:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16486:45;;775:41:1;;;16486:45:0::1;::::0;748:18:1;16486:45:0::1;635:187:1::0;15153:339:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15225:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15224:20;15216:73;;;::::0;-1:-1:-1;;;15216:73:0;;10711:2:1;15216:73:0::1;::::0;::::1;10693:21:1::0;10750:2;10730:18;;;10723:30;10789:34;10769:18;;;10762:62;-1:-1:-1;;;10840:18:1;;;10833:38;10888:19;;15216:73:0::1;10509:404:1::0;15216:73:0::1;9496:6;15321:16;;15303:15;:34;;;;:::i;:::-;15302:56;15294:117;;;::::0;-1:-1:-1;;;15294:117:0;;11120:2:1;15294:117:0::1;::::0;::::1;11102:21:1::0;11159:2;11139:18;;;11132:30;11198:34;11178:18;;;11171:62;-1:-1:-1;;;11249:18:1;;;11242:46;11305:19;;15294:117:0::1;10918:412:1::0;15294:117:0::1;-1:-1:-1::0;;;;;15416:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;15416:26:0::1;15438:4;15416:26:::0;;::::1;::::0;;;15452:35;;15438:4;;15416:19;15452:35:::1;::::0;::::1;15153:339:::0;:::o;16883:1194::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;17034:15:::1;::::0;-1:-1:-1;;;;;17034:37:0;;::::1;:15:::0;::::1;:37;17031:274;;-1:-1:-1::0;;;;;17096:32:0;::::1;17088:90;;;::::0;-1:-1:-1;;;17088:90:0;;11537:2:1;17088:90:0::1;::::0;::::1;11519:21:1::0;11576:2;11556:18;;;11549:30;11615:34;11595:18;;;11588:62;-1:-1:-1;;;11666:18:1;;;11659:43;11719:19;;17088:90:0::1;11335:409:1::0;17088:90:0::1;17241:15;::::0;17189:68:::1;::::0;-1:-1:-1;;;11951:30:1;;-1:-1:-1;;;;;17241:15:0;;::::1;::::0;17189:68;::::1;::::0;12006:2:1;11997:12;17189:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17189:68:0;;;::::1;17263:15;:36:::0;;-1:-1:-1;;;;;;17263:36:0::1;-1:-1:-1::0;;;;;17263:36:0;::::1;;::::0;;17031:274:::1;17318:15;::::0;-1:-1:-1;;;;;17318:37:0;;::::1;:15:::0;::::1;:37;17315:274;;-1:-1:-1::0;;;;;17380:32:0;::::1;17372:90;;;::::0;-1:-1:-1;;;17372:90:0;;12222:2:1;17372:90:0::1;::::0;::::1;12204:21:1::0;12261:2;12241:18;;;12234:30;12300:34;12280:18;;;12273:62;-1:-1:-1;;;12351:18:1;;;12344:43;12404:19;;17372:90:0::1;12020:409:1::0;17372:90:0::1;17525:15;::::0;17473:68:::1;::::0;-1:-1:-1;;;12636:30:1;;-1:-1:-1;;;;;17525:15:0;;::::1;::::0;17473:68;::::1;::::0;12691:2:1;12682:12;17473:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17473:68:0;;;::::1;17547:15;:36:::0;;-1:-1:-1;;;;;;17547:36:0::1;-1:-1:-1::0;;;;;17547:36:0;::::1;;::::0;;17315:274:::1;17596:9;::::0;-1:-1:-1;;;;;17596:25:0;;::::1;:9:::0;::::1;:25;17593:220;;-1:-1:-1::0;;;;;17646:26:0;::::1;17638:78;;;::::0;-1:-1:-1;;;17638:78:0;;12907:2:1;17638:78:0::1;::::0;::::1;12889:21:1::0;12946:2;12926:18;;;12919:30;12985:34;12965:18;;;12958:62;-1:-1:-1;;;13036:18:1;;;13029:37;13083:19;;17638:78:0::1;12705:403:1::0;17638:78:0::1;17767:9;::::0;17727:50:::1;::::0;-1:-1:-1;;;13315:24:1;;-1:-1:-1;;;;;17767:9:0;;::::1;::::0;17727:50;::::1;::::0;13364:1:1;13355:11;17727:50:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17727:50:0;;;::::1;17783:9;:24:::0;;-1:-1:-1;;;;;;17783:24:0::1;-1:-1:-1::0;;;;;17783:24:0;::::1;;::::0;;17593:220:::1;17820:13;::::0;-1:-1:-1;;;;;17820:33:0;;::::1;:13:::0;::::1;:33;17817:256;;-1:-1:-1::0;;;;;17878:30:0;::::1;17870:86;;;::::0;-1:-1:-1;;;17870:86:0;;13579:2:1;17870:86:0::1;::::0;::::1;13561:21:1::0;13618:2;13598:18;;;13591:30;13657:34;13637:18;;;13630:62;-1:-1:-1;;;13708:18:1;;;13701:41;13759:19;;17870:86:0::1;13377:407:1::0;17870:86:0::1;18015:13;::::0;17967:62:::1;::::0;-1:-1:-1;;;13991:28:1;;-1:-1:-1;;;;;18015:13:0;;::::1;::::0;17967:62;::::1;::::0;14044:2:1;14035:12;17967:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17967:62:0;;;::::1;18035:13;:32:::0;;-1:-1:-1;;;;;;18035:32:0::1;-1:-1:-1::0;;;;;18035:32:0;::::1;;::::0;;17817:256:::1;16883:1194:::0;;;;:::o;16539:341::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16643:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16635:124:::1;;;;-1:-1:-1::0;;;16635:124:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16764:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;16764:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16828:47;;775:41:1;;;16828:47:0::1;::::0;748:18:1;16828:47:0::1;635:187:1::0;18098:421:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18270:119:::1;18293:5;18300:18;18320;18340:12;18354:16;18372;18270:22;:119::i;:::-;18399:115;::::0;-1:-1:-1;;;14260:27:1;;14312:2;14303:12;18399:115:0::1;;::::0;;;;;::::1;::::0;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;5427:17;;;5422:2;5407:18;;5400:45;5482:17;;5476:3;5461:19;;5454:46;18399:115:0;;;;::::1;::::0;;;;;5234:3:1;18399:115:0;;::::1;18098:421:::0;;;;;:::o;13988:253::-;14083:4;14094:126;6648:10;14116:7;14124:95;14163:15;14124:95;;;;;;;;;;;;;;;;;6648:10;14124:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14124:34:0;;;;;;;;;;;;:38;:95::i;13182:154::-;13262:4;13273:42;6648:10;13297:9;13308:6;13273:9;:42::i;20331:310::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20429:23:::1;;20417:8;:35:::0;20409:113:::1;;;::::0;-1:-1:-1;;;20409:113:0;;14528:2:1;20409:113:0::1;::::0;::::1;14510:21:1::0;14567:2;14547:18;;;14540:30;14606:34;14586:18;;;14579:62;14677:34;14657:18;;;14650:62;-1:-1:-1;;;14728:19:1;;;14721:32;14770:19;;20409:113:0::1;14326:469:1::0;20409:113:0::1;20573:23;::::0;20532:65:::1;::::0;20563:8;;20532:65:::1;::::0;;;::::1;20602:23;:34:::0;20331:310::o;18522:437::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18698:125:::1;18722:5;18729:19;18750;18771:13;18786:17;18805;18698:23;:125::i;:::-;18833:121;::::0;-1:-1:-1;;;15002:28:1;;15055:2;15046:12;18833:121:0::1;14800:264:1::0;15919:287:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16008:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;16000:108:::1;;;;-1:-1:-1::0;;;16000:108:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16113:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;16113:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16161:40;;775:41:1;;;16161:40:0::1;::::0;748:18:1;16161:40:0::1;635:187:1::0;15714:202:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15803:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;15803:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15861:50;;775:41:1;;;15861:50:0::1;::::0;748:18:1;15861:50:0::1;635:187:1::0;7504:223:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7587:22:0;::::1;7579:73;;;::::0;-1:-1:-1;;;7579:73:0;;15271:2:1;7579:73:0::1;::::0;::::1;15253:21:1::0;15310:2;15290:18;;;15283:30;15349:34;15329:18;;;15322:62;-1:-1:-1;;;15400:18:1;;;15393:36;15446:19;;7579:73:0::1;15069:402:1::0;7579:73:0::1;7683:6;::::0;;7662:38:::1;::::0;-1:-1:-1;;;;;7662:38:0;;::::1;::::0;7683:6;::::1;::::0;7662:38:::1;::::0;::::1;7705:6;:17:::0;;-1:-1:-1;;;;;;7705:17:0::1;-1:-1:-1::0;;;;;7705:17:0;;;::::1;::::0;;;::::1;::::0;;7504:223::o;2663:123::-;2721:7;2742:39;2746:1;2749;2742:39;;;;;;;;;;;;;;;;;:3;:39::i;14244:306::-;-1:-1:-1;;;;;14329:19:0;;14321:68;;;;-1:-1:-1;;;14321:68:0;;15678:2:1;14321:68:0;;;15660:21:1;15717:2;15697:18;;;15690:30;15756:34;15736:18;;;15729:62;-1:-1:-1;;;15807:18:1;;;15800:34;15851:19;;14321:68:0;15476:400:1;14321:68:0;-1:-1:-1;;;;;14402:21:0;;14394:68;;;;-1:-1:-1;;;14394:68:0;;16083:2:1;14394:68:0;;;16065:21:1;16122:2;16102:18;;;16095:30;16161:34;16141:18;;;16134:62;-1:-1:-1;;;16212:18:1;;;16205:32;16254:19;;14394:68:0;15881:398:1;14394:68:0;-1:-1:-1;;;;;14467:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14513:32;;1895:25:1;;;14513:32:0;;1868:18:1;14513:32:0;;;;;;;14244:306;;;:::o;22930:1717::-;-1:-1:-1;;;;;23023:18:0;;23015:68;;;;-1:-1:-1;;;23015:68:0;;16486:2:1;23015:68:0;;;16468:21:1;16525:2;16505:18;;;16498:30;16564:34;16544:18;;;16537:62;-1:-1:-1;;;16615:18:1;;;16608:35;16660:19;;23015:68:0;16284:401:1;23015:68:0;-1:-1:-1;;;;;23096:16:0;;23088:64;;;;-1:-1:-1;;;23088:64:0;;16892:2:1;23088:64:0;;;16874:21:1;16931:2;16911:18;;;16904:30;16970:34;16950:18;;;16943:62;-1:-1:-1;;;17021:18:1;;;17014:33;17064:19;;23088:64:0;16690:399:1;23088:64:0;23174:1;23165:6;:10;23157:64;;;;-1:-1:-1;;;23157:64:0;;17296:2:1;23157:64:0;;;17278:21:1;17335:2;17315:18;;;17308:30;17374:34;17354:18;;;17347:62;-1:-1:-1;;;17425:18:1;;;17418:39;17474:19;;23157:64:0;17094:405:1;23157:64:0;23244:15;23254:4;23244:9;:15::i;:::-;23234:6;:25;;23226:85;;;;-1:-1:-1;;;23226:85:0;;17706:2:1;23226:85:0;;;17688:21:1;17745:2;17725:18;;;17718:30;17784:34;17764:18;;;17757:62;-1:-1:-1;;;17835:18:1;;;17828:45;17890:19;;23226:85:0;17504:411:1;23226:85:0;-1:-1:-1;;;;;23337:31:0;;;23318:16;23337:31;;;:25;:31;;;;;;;;;23391:29;;;;;;;;;23431:35;;;:29;:35;;;;;;23337:31;;;;;23391:29;;;;23431:35;23430:36;:74;;;;-1:-1:-1;;;;;;23471:33:0;;;;;;:29;:33;;;;;;;;23470:34;23430:74;23427:714;;;23520:16;;;;23512:73;;;;-1:-1:-1;;;23512:73:0;;18122:2:1;23512:73:0;;;18104:21:1;18161:2;18141:18;;;18134:30;18200:34;18180:18;;;18173:62;-1:-1:-1;;;18251:18:1;;;18244:42;18303:19;;23512:73:0;17920:408:1;23512:73:0;-1:-1:-1;;;;;23609:14:0;;;;;;:10;:14;;;;;;;;23608:15;23600:60;;;;-1:-1:-1;;;23600:60:0;;18535:2:1;23600:60:0;;;18517:21:1;;;18554:18;;;18547:30;18613:34;18593:18;;;18586:62;18665:18;;23600:60:0;18333:356:1;23600:60:0;-1:-1:-1;;;;;23675:16:0;;;;;;:10;:16;;;;;;;;23674:17;23666:62;;;;-1:-1:-1;;;23666:62:0;;18535:2:1;23666:62:0;;;18517:21:1;;;18554:18;;;18547:30;18613:34;18593:18;;;18586:62;18665:18;;23666:62:0;18333:356:1;23666:62:0;-1:-1:-1;;;;;23748:38:0;;;;;;:34;:38;;;;;;;;23747:39;:84;;;;-1:-1:-1;;;;;;23791:40:0;;;;;;:34;:40;;;;;;;;23790:41;23747:84;23743:213;;;23870:11;;23860:6;:21;;23852:88;;;;-1:-1:-1;;;23852:88:0;;18896:2:1;23852:88:0;;;18878:21:1;18935:2;18915:18;;;18908:30;18974:34;18954:18;;;18947:62;-1:-1:-1;;;19025:18:1;;;19018:52;19087:19;;23852:88:0;18694:418:1;23852:88:0;-1:-1:-1;;;;;23966:33:0;;;;;;:29;:33;;;;;;;;23961:175;;24044:15;;24033:6;24017:13;24027:2;24017:9;:13::i;:::-;:22;;;;:::i;:::-;24016:43;;24008:121;;;;-1:-1:-1;;;24008:121:0;;19452:2:1;24008:121:0;;;19434:21:1;19491:2;19471:18;;;19464:30;19530:34;19510:18;;;19503:62;19601:34;19581:18;;;19574:62;-1:-1:-1;;;19652:19:1;;;19645:32;19694:19;;24008:121:0;19250:469:1;24008:121:0;24147:37;24160:11;24173:10;24147:12;:37::i;:::-;24189:12;24232:23;;24204:24;24222:4;24204:9;:24::i;:::-;24271:16;;24204:51;-1:-1:-1;24204:51:0;;-1:-1:-1;24271:16:0;;:31;;;;;24295:7;24271:31;:49;;;;-1:-1:-1;24311:9:0;;;;24310:10;24271:49;:70;;;;-1:-1:-1;24328:9:0;;-1:-1:-1;;;24328:9:0;;;;:13;;24271:70;:107;;;;-1:-1:-1;;;;;;24349:29:0;;;;;;:25;:29;;;;;;;;24271:107;24262:196;;;24390:9;:16;;-1:-1:-1;;24390:16:0;24402:4;24390:16;;;24412:17;:15;:17::i;:::-;24435:9;:17;;-1:-1:-1;;24435:17:0;;;24262:196;24480:9;;24464:12;;24480:9;;24479:10;:30;;;;-1:-1:-1;24493:16:0;;;;24479:30;-1:-1:-1;;;;;24519:24:0;;;;;;:18;:24;;;;;;24464:45;;-1:-1:-1;24519:24:0;;;:50;;-1:-1:-1;;;;;;24547:22:0;;;;;;:18;:22;;;;;;;;24519:50;24516:81;;;-1:-1:-1;24586:5:0;24516:81;24601:41;24616:4;24622:2;24626:6;24634:7;24601:14;:41::i;:::-;23010:1637;;;;22930:1717;;;:::o;2071:171::-;2157:7;2187:12;2179:6;;;;2171:29;;;;-1:-1:-1;;;2171:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2205:9:0;2217:5;2221:1;2217;:5;:::i;:::-;2205:17;2071:171;-1:-1:-1;;;;;2071:171:0:o;26344:149::-;26386:7;26401:15;26418;26437:19;:17;:19::i;:::-;26400:56;;-1:-1:-1;26400:56:0;-1:-1:-1;26468:20:0;26400:56;;26468:11;:20::i;:::-;26461:27;;;;26344:149;:::o;1774:160::-;1832:7;;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;;1881:1;1876;:6;;1868:46;;;;-1:-1:-1;;;1868:46:0;;19926:2:1;1868:46:0;;;19908:21:1;19965:2;19945:18;;;19938:30;20004:29;19984:18;;;19977:57;20051:18;;1868:46:0;19724:351:1;29825:1249:0;30047:21;;;;:43;;;;:21;;:43;30043:215;;30103:101;;-1:-1:-1;;;20282:32:1;;20339:2;20330:12;30103:101:0;;;;;;;;30145:21;;;;30189:14;;30103:101;;30145:21;;;;;30103:101;;;;-1:-1:-1;;;;;;;;;;;30103:101:0;;;30189:14;;;30103:101;:::i;:::-;;;;;;;;30210:21;;;:42;;-1:-1:-1;;30210:42:0;;;;;;;30043:215;30266:21;;;;:43;;;;:21;;;;;:43;30262:215;;30322:101;;-1:-1:-1;;;20769:32:1;;20826:2;20817:12;30322:101:0;;;;;;;;30364:21;;;;30408:14;;30322:101;;30364:21;;;;;;;;30322:101;;;;-1:-1:-1;;;;;;;;;;;30322:101:0;;;30408:14;;;30322:101;:::i;:::-;;;;;;;;30429:21;;;:42;;-1:-1:-1;;30429:42:0;;;;;;;;;30262:215;30491:15;;;;:31;;;;-1:-1:-1;;;30491:15:0;;;;:31;30487:173;;30535:83;;-1:-1:-1;;;21042:26:1;;21093:2;21084:12;30535:83:0;;;;;;;;30571:15;;;;30603:14;;30535:83;;30571:15;-1:-1:-1;;;30571:15:0;;;;;;30535:83;;;;-1:-1:-1;;;;;;;;;;;30535:83:0;;;30603:14;;;30535:83;:::i;:::-;;;;;;;;30624:15;;;:30;;-1:-1:-1;;30624:30:0;-1:-1:-1;;;30624:30:0;;;;;;;30487:173;30668:19;;;;:39;;;;-1:-1:-1;;;30668:19:0;;;;:39;30664:201;;30720:95;;-1:-1:-1;;;21309:30:1;;21364:2;21355:12;30720:95:0;;;;;;;;30760:19;;;;30800:14;;30720:95;;30760:19;-1:-1:-1;;;30760:19:0;;;;;;30720:95;;;;-1:-1:-1;;;;;;;;;;;30720:95:0;;;30800:14;;;30720:95;:::i;:::-;;;;;;;;30821:19;;;:38;;-1:-1:-1;;30821:38:0;-1:-1:-1;;;30821:38:0;;;;;;;30664:201;30873:19;;;;:39;;;;-1:-1:-1;;;30873:19:0;;;;:39;30869:201;;30925:95;;-1:-1:-1;;;21580:30:1;;21635:2;21626:12;30925:95:0;;;;;;;;30965:19;;;;31005:14;;30925:95;;30965:19;-1:-1:-1;;;30965:19:0;;;;;;30925:95;;;;-1:-1:-1;;;;;;;;;;;30925:95:0;;;31005:14;;;30925:95;:::i;:::-;;;;;;;;31026:19;;;:38;;-1:-1:-1;;31026:38:0;-1:-1:-1;;;31026:38:0;;;;;;;30869:201;29825:1249;;;;;;:::o;28532:1290::-;28760:22;;;;:45;;;;:22;;;;;:45;28756:222;;28818:104;;-1:-1:-1;;;21851:33:1;;21909:2;21900:12;28818:104:0;;;;;;;;28861:22;;;;28907:14;;28818:104;;28861:22;;;;;;;;28818:104;;;;-1:-1:-1;;;;;;;;;;;28818:104:0;;;28907:14;;;28818:104;:::i;:::-;;;;;;;;28928:22;;;:44;;-1:-1:-1;;28928:44:0;;;;;;;;;28756:222;28986:22;;;;:45;;;;:22;;;;;:45;28982:222;;29044:104;;-1:-1:-1;;;22125:33:1;;22183:2;22174:12;29044:104:0;;;;;;;;29087:22;;;;29133:14;;29044:104;;29087:22;;;;;;;;29044:104;;;;-1:-1:-1;;;;;;;;;;;29044:104:0;;;29133:14;;;29044:104;:::i;:::-;;;;;;;;29154:22;;;:44;;-1:-1:-1;;29154:44:0;;;;;;;;;28982:222;29218:16;;;;:33;;;;-1:-1:-1;;;29218:16:0;;;;:33;29214:180;;29264:86;;-1:-1:-1;;;22399:27:1;;22451:2;22442:12;29264:86:0;;;;;;;;29301:16;;;;29335:14;;29264:86;;29301:16;-1:-1:-1;;;29301:16:0;;;;;;29264:86;;;;-1:-1:-1;;;;;;;;;;;29264:86:0;;;29335:14;;;29264:86;:::i;:::-;;;;;;;;29356:16;;;:32;;-1:-1:-1;;29356:32:0;-1:-1:-1;;;29356:32:0;;;;;;;29214:180;29402:20;;;;:41;;;;-1:-1:-1;;;29402:20:0;;;;:41;29398:208;;29456:98;;-1:-1:-1;;;22667:31:1;;22723:2;22714:12;29456:98:0;;;;;;;;29497:20;;;;29539:14;;29456:98;;29497:20;-1:-1:-1;;;29497:20:0;;;;;;29456:98;;;;-1:-1:-1;;;;;;;;;;;29456:98:0;;;29539:14;;;29456:98;:::i;:::-;;;;;;;;29560:20;;;:40;;-1:-1:-1;;29560:40:0;-1:-1:-1;;;29560:40:0;;;;;;;29398:208;29614:20;;;;:41;;;;-1:-1:-1;;;29614:20:0;;;;:41;29610:208;;29668:98;;-1:-1:-1;;;22939:31:1;;22995:2;22986:12;29668:98:0;;;;;;;;29709:20;;;;29751:14;;29668:98;;29709:20;-1:-1:-1;;;29709:20:0;;;;;;29668:98;;;;-1:-1:-1;;;;;;;;;;;29668:98:0;;;29751:14;;;29668:98;:::i;:::-;;;;;;;;29772:20;;;:40;;;;;-1:-1:-1;;;29772:40:0;-1:-1:-1;;29772:40:0;;;;;;28532:1290;;;;;;:::o;2791:251::-;2877:7;2906:12;2899:5;2891:28;;;;-1:-1:-1;;;2891:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2924:9:0;2936:5;2940:1;2936;:5;:::i;27266:1263::-;27336:13;:17;;-1:-1:-1;;27416:15:0;;;27438:408;;;;27513:1;27490:18;;27475:12;:33;;;;:::i;:::-;27474:40;27470:371;;27523:13;:19;;-1:-1:-1;;27523:19:0;27539:3;27523:19;;;27470:371;;;27590:23;;27574:13;:39;;27590:23;;;;-1:-1:-1;;27632:27:0;;;;;;;-1:-1:-1;;;27642:17:0;;;;;27632:27;;;;;;;;-1:-1:-1;;27736:35:0;27590:23;27694;;;;;27678:39;;;;-1:-1:-1;;27736:35:0;;;;;-1:-1:-1;;;27750:21:0;;;;27736:35;;;-1:-1:-1;;27790:35:0;-1:-1:-1;;;27804:21:0;;;;;;;27790:35;;;;;;;27470:371;27854:10;27850:494;;;27897:24;;27881:13;:40;;27897:24;;;;;;;;-1:-1:-1;;27927:28:0;;;;;;;-1:-1:-1;;;27937:18:0;;;;27927:28;;;-1:-1:-1;;28007:36:0;27977:24;;;;;;27961:40;;;;-1:-1:-1;;28007:36:0;;-1:-1:-1;;;28021:22:0;;;;28007:36;;;;;-1:-1:-1;;28049:36:0;-1:-1:-1;;;28063:22:0;;;;-1:-1:-1;;;28049:36:0;;;;;;;28124:16;;28144:6;;28106:34;;:15;:34;:::i;:::-;:44;28102:237;;28171:13;:17;;-1:-1:-1;;28308:15:0;;;;;28102:237;28416:11;;;-1:-1:-1;;;28416:11:0;;;;;28402;;;;;;28392:7;;;;;;28360:29;;28416:11;28376:13;;;;;28360;:29;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:67;;;;:::i;:::-;28348:9;:79;;-1:-1:-1;;28348:79:0;;-1:-1:-1;;;28348:79:0;;;;;;;;;;;;;28437:87;;;28449:13;;;;;;;;;;23504:34:1;;28348:79:0;28464:13;;;;23569:2:1;23554:18;;23547:43;28479:7:0;;;;;23606:18:1;;;23599:43;;;;28488:11:0;;;;;23673:2:1;23658:18;;23651:43;-1:-1:-1;;;28501:11:0;;;;23725:3:1;23710:19;;23703:44;28514:9:0;;;;;;23778:3:1;23763:19;;23756:44;28437:87:0;;23468:3:1;23453:19;28437:87:0;23218:588:1;31077:1685:0;31117:23;31143:24;31161:4;31143:9;:24::i;:::-;31250:9;;31117:50;;-1:-1:-1;31200:21:0;;31250:9;-1:-1:-1;;;31250:9:0;;;;;31296:13;;;;31250:9;31346:13;;;;;31390:7;;;;;;31433:11;;;;;;-1:-1:-1;;;31473:11:0;;;31172:25;31390:7;31250:9;31517:31;31296:13;31117:50;31517:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;31491:73;-1:-1:-1;31569:26:0;31598:33;31491:73;31598:15;:33;:::i;:::-;31569:62;;31638:37;31656:18;31638:17;:37::i;:::-;31682:27;31712:41;31736:17;31712:21;:41;:::i;:::-;31682:71;-1:-1:-1;31758:19:0;31823:15;31797:21;31817:1;31797:17;:21;:::i;:::-;31780:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;31758:81;;;;31844:26;31929:1;31915:11;31895:17;31873:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;31844:86;-1:-1:-1;31935:20:0;31994:11;31958:33;;;;:19;:33;:::i;:::-;:47;;;;:::i;:::-;31935:70;-1:-1:-1;32010:24:0;32077:11;32037:37;;;;:19;:37;:::i;:::-;:51;;;;:::i;:::-;32010:78;-1:-1:-1;32093:26:0;32010:78;32145:33;32166:12;32145:18;:33;:::i;:::-;:52;;;;:::i;:::-;32122:76;;:19;:76;:::i;:::-;32213:15;;32205:53;;32093:105;;-1:-1:-1;;;;;;32213:15:0;;32205:53;;;;;32093:105;;32213:15;32205:53;32213:15;32205:53;32093:105;32213:15;32205:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32271:9:0;;32263:41;;-1:-1:-1;;;;;32271:9:0;;;;32263:41;;;;;32291:12;;32271:9;32263:41;32271:9;32263:41;32291:12;32271:9;32263:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32317:13:0;;32309:49;;-1:-1:-1;;;;;32317:13:0;;;;32309:49;;;;;32341:16;;32317:13;32309:49;32317:13;32309:49;32341:16;32317:13;32309:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32369:19:0;;32365:169;;32396:50;32410:15;32427:18;32396:13;:50::i;:::-;32457:71;;;24383:25:1;;;24439:2;24424:18;;24417:34;;;24467:18;;;24460:34;;;32457:71:0;;24371:2:1;24356:18;32457:71:0;;;;;;;32365:169;32550:13;32538:9;;:25;;;;;;;;;;;;;;;;;;32590:17;32574:13;;:33;;;;;;;;;;;;;;;;;;32634:17;32618:13;;:33;;;;;;;;;;;;;;;;;;32672:11;32662:7;;:21;;;;;;;;;;;;;;;;;;32708:15;32694:11;;:29;;;;;;;;;;;;;;;;;;32742:15;32728:11;;:29;;;;;;;;;;;;;;;;;;31112:1650;;;;;;;;;;;;;;;;31077:1685::o;24650:762::-;24753:23;24777:12;24791:14;24809:29;24821:7;24830;24809:11;:29::i;:::-;24752:86;;;;;;24844:15;24861:23;24886:12;24900:14;24918:46;24930:7;24939:4;24945:6;24953:10;:8;:10::i;:::-;24918:11;:46::i;:::-;-1:-1:-1;;;;;24975:32:0;;;;;;:24;:32;;;;;;24843:121;;-1:-1:-1;24843:121:0;;-1:-1:-1;24843:121:0;-1:-1:-1;24843:121:0;-1:-1:-1;24975:32:0;;24971:93;;;-1:-1:-1;;;;;25033:15:0;;;;;;:7;:15;;;;;;:25;;25051:7;;25033:25;:::i;:::-;-1:-1:-1;;;;;25015:15:0;;;;;;:7;:15;;;;;:43;24971:93;-1:-1:-1;;;;;25072:35:0;;;;;;:24;:35;;;;;;;;25068:110;;;-1:-1:-1;;;;;25136:18:0;;;;;;:7;:18;;;;;;:36;;25157:15;;25136:36;:::i;:::-;-1:-1:-1;;;;;25115:18:0;;;;;;:7;:18;;;;;:57;25068:110;-1:-1:-1;;;;;25200:15:0;;;;;;:7;:15;;;;;;:25;;25218:7;;25200:25;:::i;:::-;-1:-1:-1;;;;;25182:15:0;;;;;;;:7;:15;;;;;;:43;;;;25251:18;;;;;;;:36;;25272:15;;25251:36;:::i;:::-;-1:-1:-1;;;;;25230:18:0;;;;;;:7;:18;;;;;:57;25292:33;25310:6;25318;25292:17;:33::i;:::-;25330:23;25342:4;25348;25330:11;:23::i;:::-;25380:9;-1:-1:-1;;;;;25363:44:0;25372:6;-1:-1:-1;;;;;25363:44:0;;25391:15;25363:44;;;;1895:25:1;;1883:2;1868:18;;1749:177;25363:44:0;;;;;;;;24747:665;;;;;;;24650:762;;;;:::o;26496:562::-;26588:7;;26547;;;;8309:17;26547:7;26630:331;26654:22;:29;26650:33;;26630:331;;;26743:7;26706;:34;26714:22;26737:1;26714:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26714:25:0;26706:34;;;;;;;;;;;;;:44;;:97;;;26796:7;26759;:34;26767:22;26790:1;26767:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26767:25:0;26759:34;;;;;;;;;;;;;:44;26706:97;26696:139;;;-1:-1:-1;;26818:7:0;;;8309:17;;-1:-1:-1;26496:562:0;-1:-1:-1;;26496:562:0:o;26696:139::-;26861:7;:34;26869:22;26892:1;26869:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26869:25:0;26861:34;;;;;;;;;;;;;26851:44;;:7;:44;:::i;:::-;26841:54;;26921:7;:34;26929:22;26952:1;26929:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26929:25:0;26921:34;;;;;;;;;;;;;26911:44;;:7;:44;:::i;:::-;26901:54;-1:-1:-1;26685:3:0;;;;:::i;:::-;;;;26630:331;;;;8309:17;26979:7;;:17;;;;:::i;:::-;26969:7;:27;26965:58;;;-1:-1:-1;;27006:7:0;;;8309:17;;-1:-1:-1;26496:562:0;-1:-1:-1;26496:562:0:o;26965:58::-;27036:7;;27045;;-1:-1:-1;26496:562:0;-1:-1:-1;26496:562:0:o;32765:411::-;32850:16;;;32864:1;32850:16;;;;;;;;32826:21;;32850:16;;;;;;;;;;-1:-1:-1;32850:16:0;32826:40;;32889:4;32871;32876:1;32871:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32871:23:0;;;:7;;;;;;;;;;:23;;;;32909:15;;:22;;;-1:-1:-1;;;32909:22:0;;;;:15;;;;;:20;;:22;;;;;32871:7;;32909:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32899:4;32904:1;32899:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32899:32:0;;;:7;;;;;;;;;:32;32968:15;;32936:62;;32953:4;;32968:15;32986:11;32936:8;:62::i;:::-;33003:15;;:168;;-1:-1:-1;;;33003:168:0;;-1:-1:-1;;;;;33003:15:0;;;;:66;;:168;;33074:11;;33003:15;;33124:4;;33141;;33151:15;;33003:168;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33179:345;33287:15;;33255:62;;33272:4;;-1:-1:-1;;;;;33287:15:0;33305:11;33255:8;:62::i;:::-;33322:15;;33476;;33322:194;;-1:-1:-1;;;33322:194:0;;33384:4;33322:194;;;26219:34:1;26269:18;;;26262:34;;;33322:15:0;26312:18:1;;;26305:34;;;26355:18;;;26348:34;-1:-1:-1;;;;;33476:15:0;;;26398:19:1;;;26391:44;33496:15:0;26451:19:1;;;26444:35;33322:15:0;;;:31;;33361:9;;26153:19:1;;33322:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33179:345;;:::o;25523:413::-;25597:7;25605;25613;25631;25626:306;;-1:-1:-1;25654:7:0;;-1:-1:-1;25663:1:0;;-1:-1:-1;25663:1:0;25646:22;;25626:306;25714:11;;25689:12;;25728:3;;25704:21;;-1:-1:-1;;;25714:11:0;;;;25704:7;:21;:::i;:::-;:27;;;;:::i;:::-;25807:11;;25689:42;;-1:-1:-1;25737:14:0;;25822:3;;25807:11;;;;;;;;25791:13;;;;;25765:23;;25781:7;;;;;;25765:13;:23;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;25754:65;;;;:7;:65;:::i;:::-;:71;;;;:::i;:::-;25737:88;-1:-1:-1;25831:23:0;25868:13;25737:88;25868:4;:13;:::i;:::-;25857:25;;:7;:25;:::i;:::-;25831:51;-1:-1:-1;25913:4:0;;-1:-1:-1;25919:6:0;-1:-1:-1;25888:38:0;;-1:-1:-1;25888:38:0;25626:306;25523:413;;;;;:::o;25939:402::-;26068:7;;;;;26127:21;26137:11;26127:7;:21;:::i;:::-;26109:39;-1:-1:-1;26153:12:0;26168:18;26175:11;26168:4;:18;:::i;:::-;26153:33;-1:-1:-1;26191:14:0;26208:20;26217:11;26208:6;:20;:::i;:::-;26191:37;-1:-1:-1;26233:23:0;26270:13;26191:37;26270:4;:13;:::i;:::-;26259:25;;:7;:25;:::i;:::-;26297:7;;;;-1:-1:-1;26323:4:0;;-1:-1:-1;26323:4:0;-1:-1:-1;25939:402:0;;-1:-1:-1;;;;;;25939:402:0:o;27061:202::-;27170:4;27137:39;;;;:24;:39;;;;;;;;27133:89;;;27200:4;27184:22;;;;:7;:22;;;;;:32;;27210:6;;27184:22;:32;;27210:6;;27184:32;:::i;:::-;;;;-1:-1:-1;;27133:89:0;27242:4;27226:22;;;;:7;:22;;;;;:32;;27252:6;;27226:22;:32;;27252:6;;27226:32;:::i;:::-;;;;-1:-1:-1;;;;27061:202:0:o;25415:105::-;25488:4;25477:7;;:15;;;;;;;:::i;:::-;;;;;;;;25511:4;25497:10;;:18;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:160::-;215:20;;271:13;;264:21;254:32;;244:60;;300:1;297;290:12;244:60;150:160;;;:::o;315:315::-;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:31;540:5;515:31;:::i;:::-;565:5;-1:-1:-1;589:35:1;620:2;605:18;;589:35;:::i;:::-;579:45;;315:315;;;;;:::o;827:597::-;939:4;968:2;997;986:9;979:21;1029:6;1023:13;1072:6;1067:2;1056:9;1052:18;1045:34;1097:1;1107:140;1121:6;1118:1;1115:13;1107:140;;;1216:14;;;1212:23;;1206:30;1182:17;;;1201:2;1178:26;1171:66;1136:10;;1107:140;;;1265:6;1262:1;1259:13;1256:91;;;1335:1;1330:2;1321:6;1310:9;1306:22;1302:31;1295:42;1256:91;-1:-1:-1;1408:2:1;1387:15;-1:-1:-1;;1383:29:1;1368:45;;;;1415:2;1364:54;;827:597;-1:-1:-1;;;827:597:1:o;1429:315::-;1497:6;1505;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;:::-;1682:5;1734:2;1719:18;;;;1706:32;;-1:-1:-1;;;1429:315:1:o;2362:180::-;2421:6;2474:2;2462:9;2453:7;2449:23;2445:32;2442:52;;;2490:1;2487;2480:12;2442:52;-1:-1:-1;2513:23:1;;2362:180;-1:-1:-1;2362:180:1:o;2547:456::-;2624:6;2632;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2748:9;2735:23;2767:31;2792:5;2767:31;:::i;:::-;2817:5;-1:-1:-1;2874:2:1;2859:18;;2846:32;2887:33;2846:32;2887:33;:::i;:::-;2547:456;;2939:7;;-1:-1:-1;;;2993:2:1;2978:18;;;;2965:32;;2547:456::o;3197:248::-;3262:6;3270;3323:2;3311:9;3302:7;3298:23;3294:32;3291:52;;;3339:1;3336;3329:12;3291:52;3375:9;3362:23;3352:33;;3404:35;3435:2;3424:9;3420:18;3404:35;:::i;3450:247::-;3509:6;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;3702:671::-;3788:6;3796;3804;3812;3865:3;3853:9;3844:7;3840:23;3836:33;3833:53;;;3882:1;3879;3872:12;3833:53;3921:9;3908:23;3940:31;3965:5;3940:31;:::i;:::-;3990:5;-1:-1:-1;4047:2:1;4032:18;;4019:32;4060:33;4019:32;4060:33;:::i;:::-;4112:7;-1:-1:-1;4171:2:1;4156:18;;4143:32;4184:33;4143:32;4184:33;:::i;:::-;4236:7;-1:-1:-1;4295:2:1;4280:18;;4267:32;4308:33;4267:32;4308:33;:::i;:::-;3702:671;;;;-1:-1:-1;3702:671:1;;-1:-1:-1;;3702:671:1:o;4378:156::-;4444:20;;4504:4;4493:16;;4483:27;;4473:55;;4524:1;4521;4514:12;4539:464;4624:6;4632;4640;4648;4656;4709:3;4697:9;4688:7;4684:23;4680:33;4677:53;;;4726:1;4723;4716:12;4677:53;4749:27;4766:9;4749:27;:::i;:::-;4739:37;;4795:36;4827:2;4816:9;4812:18;4795:36;:::i;:::-;4785:46;;4850:36;4882:2;4871:9;4867:18;4850:36;:::i;:::-;4840:46;;4905:36;4937:2;4926:9;4922:18;4905:36;:::i;:::-;4895:46;;4960:37;4992:3;4981:9;4977:19;4960:37;:::i;:::-;4950:47;;4539:464;;;;;;;;:::o;5511:388::-;5579:6;5587;5640:2;5628:9;5619:7;5615:23;5611:32;5608:52;;;5656:1;5653;5646:12;5608:52;5695:9;5682:23;5714:31;5739:5;5714:31;:::i;:::-;5764:5;-1:-1:-1;5821:2:1;5806:18;;5793:32;5834:33;5793:32;5834:33;:::i;:::-;5886:7;5876:17;;;5511:388;;;;;:::o;5904:356::-;6106:2;6088:21;;;6125:18;;;6118:30;6184:34;6179:2;6164:18;;6157:62;6251:2;6236:18;;5904:356::o;6265:420::-;6467:2;6449:21;;;6506:2;6486:18;;;6479:30;6545:34;6540:2;6525:18;;6518:62;6616:26;6611:2;6596:18;;6589:54;6675:3;6660:19;;6265:420::o;6690:127::-;6751:10;6746:3;6742:20;6739:1;6732:31;6782:4;6779:1;6772:15;6806:4;6803:1;6796:15;6822:127;6883:10;6878:3;6874:20;6871:1;6864:31;6914:4;6911:1;6904:15;6938:4;6935:1;6928:15;6954:125;6994:4;7022:1;7019;7016:8;7013:34;;;7027:18;;:::i;:::-;-1:-1:-1;7064:9:1;;6954:125::o;7084:127::-;7145:10;7140:3;7136:20;7133:1;7126:31;7176:4;7173:1;7166:15;7200:4;7197:1;7190:15;7216:135;7255:3;7276:17;;;7273:43;;7296:18;;:::i;:::-;-1:-1:-1;7343:1:1;7332:13;;7216:135::o;8629:127::-;8690:10;8685:3;8681:20;8678:1;8671:31;8721:4;8718:1;8711:15;8745:4;8742:1;8735:15;8761:120;8801:1;8827;8817:35;;8832:18;;:::i;:::-;-1:-1:-1;8866:9:1;;8761:120::o;9300:168::-;9340:7;9406:1;9402;9398:6;9394:14;9391:1;9388:21;9383:1;9376:9;9369:17;9365:45;9362:71;;;9413:18;;:::i;:::-;-1:-1:-1;9453:9:1;;9300:168::o;19117:128::-;19157:3;19188:1;19184:6;19181:1;19178:13;19175:39;;;19194:18;;:::i;:::-;-1:-1:-1;19230:9:1;;19117:128::o;20353:209::-;-1:-1:-1;;20517:38:1;;;;20499:57;;20487:2;20472:18;;20353:209::o;23009:204::-;23047:3;23083:4;23080:1;23076:12;23115:4;23112:1;23108:12;23150:3;23144:4;23140:14;23135:3;23132:23;23129:49;;;23158:18;;:::i;:::-;23194:13;;23009:204;-1:-1:-1;;;23009:204:1:o;23811:165::-;23849:1;23883:4;23880:1;23876:12;23907:3;23897:37;;23914:18;;:::i;:::-;23966:3;23959:4;23956:1;23952:12;23948:22;23943:27;;;23811:165;;;;:::o;23981:195::-;24019:4;24056;24053:1;24049:12;24088:4;24085:1;24081:12;24113:3;24108;24105:12;24102:38;;;24120:18;;:::i;:::-;24157:13;;;23981:195;-1:-1:-1;;;23981:195:1:o;24637:251::-;24707:6;24760:2;24748:9;24739:7;24735:23;24731:32;24728:52;;;24776:1;24773;24766:12;24728:52;24808:9;24802:16;24827:31;24852:5;24827:31;:::i;24893:980::-;25155:4;25203:3;25192:9;25188:19;25234:6;25223:9;25216:25;25260:2;25298:6;25293:2;25282:9;25278:18;25271:34;25341:3;25336:2;25325:9;25321:18;25314:31;25365:6;25400;25394:13;25431:6;25423;25416:22;25469:3;25458:9;25454:19;25447:26;;25508:2;25500:6;25496:15;25482:29;;25529:1;25539:195;25553:6;25550:1;25547:13;25539:195;;;25618:13;;-1:-1:-1;;;;;25614:39:1;25602:52;;25709:15;;;;25674:12;;;;25650:1;25568:9;25539:195;;;-1:-1:-1;;;;;;;25790:32:1;;;;25785:2;25770:18;;25763:60;-1:-1:-1;;;25854:3:1;25839:19;25832:35;25751:3;24893:980;-1:-1:-1;;;24893:980:1:o;26490:306::-;26578:6;26586;26594;26647:2;26635:9;26626:7;26622:23;26618:32;26615:52;;;26663:1;26660;26653:12;26615:52;26692:9;26686:16;26676:26;;26742:2;26731:9;26727:18;26721:25;26711:35;;26786:2;26775:9;26771:18;26765:25;26755:35;;26490:306;;;;;:::o
Swarm Source
ipfs://56e9a94e9b337761375781c87313e1fc2a070d7530d7eeb1e9204b1743e08e27
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.