Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
596,666 YBASE
Holders
22
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.22015539 YBASEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
YingYangBase
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-02 */ // t.me/yinyangbase // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; library SafeCast { function toUint128(uint256 value) internal pure returns (uint128) { require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits"); return uint128(value); } function toUinta64(uint256 value) internal pure returns (uint64) { require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits"); return uint64(value); } function toUint32(uint256 value) internal pure returns (uint32) { require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits"); return uint32(value); } function toUint16(uint256 value) internal pure returns (uint16) { require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits"); return uint16(value); } function toUint8(uint256 value) internal pure returns (uint8) { require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits"); return uint8(value); } function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } function toInt256(uint256 value) internal pure returns (int256) { require(value < 2**255, "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract Initializable { bool private initialized; bool private initializing; modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } function isConstructor() private view returns (bool) { address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } uint256[50] private ______gap; } contract ContextUpgradeSafe is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } contract ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; function __ERC20_init(string memory name, string memory symbol) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name, symbol); } function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer { _name = name; _symbol = symbol; _decimals = 18; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } uint256[44] private __gap; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } contract YingYangBase is ERC20UpgradeSafe, OwnableUpgradeSafe { using SafeCast for int256; using SafeMath for uint256; using Address for address; struct Transaction { bool enabled; address destination; bytes data; } event TransactionFailed(address indexed destination, uint index, bytes data); // Stable ordering is not guaranteed. Transaction[] public transactions; uint256 private _epoch; event LogRebase(uint256 indexed epoch, uint256 totalSupply); mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private _totalSupply; uint256 private constant MAX = ~uint256(0); uint256 private _rTotal; uint256 private _tFeeTotal; uint256 private constant DECIMALS = 9; uint256 private constant RATE_PRECISION = 10 ** DECIMALS; uint256 public _tFeePercent; address public _rebaser; uint256 public _limitTransferAmount; uint256 public _limitMaxBalance; uint256 public _limitSellFeePercent; uint256 public _limitTimestamp; uint256 public _presaleTimestamp; uint256 public _presaleEth; bool public endSale; uint256 public _presaleRate; IUniswapV2Router02 public uniswapRouterV2; IUniswapV2Factory public uniswapFactory; function initialize() public initializer { __ERC20_init("YinYangBase", "YBASE"); _setupDecimals(uint8(DECIMALS)); __Ownable_init(); _totalSupply = 666666 * 10**9 ; _rTotal = (MAX - (MAX % _totalSupply)); _rebaser = _msgSender(); _tFeePercent = 266; //2.6682% _rOwned[address(this)] = _rTotal; emit Transfer(address(0), address(this), _totalSupply); _presaleTimestamp = now + 3 days; endSale = false; _presaleEth = 50 ether; _presaleRate = 6000; excludeAccount(_msgSender()); excludeAccount(address(this)); uniswapRouterV2 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapFactory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); } receive() external payable { require(!endSale, "PreSale Ended"); require(_presaleEth >= msg.value, "Sold out"); _presaleEth = _presaleEth.sub(msg.value); uint256 amountBought = msg.value.div(10**9).mul(_presaleRate); _transfer(address(this), msg.sender, amountBought ); } function listToken() external onlyOwner() { require(!endSale, 'already listed'); require(_presaleEth == 0 || _presaleTimestamp < now, "Sale has not ended yet"); endSale = true; _transfer(address(this), _msgSender(), 66666 * 10**9); address tokenUniswapPair = uniswapFactory.createPair( address(uniswapRouterV2.WETH()), address(address(this)) ); IUniswapV2Pair pair = IUniswapV2Pair(tokenUniswapPair); address WETH = uniswapRouterV2.WETH(); uint256 ethToSend = address(this).balance; IWETH(WETH).deposit{value : ethToSend}(); require(address(this).balance == 0 , "Transfer Failed"); uint256 tokenToAdd = 300000 * 10**9; if(_presaleEth != 0) { tokenToAdd = ethToSend.div(10**9).mul(_presaleRate); uint256 unsoldTokens = balanceOf(address(this)) - tokenToAdd; _transfer(address(this), address(0), unsoldTokens); } IWETH(WETH).transfer(address(pair),ethToSend); _transfer(address(this), address(pair), tokenToAdd); pair.mint(address(this)); IERC20(address(pair)).transfer(msg.sender, IERC20(address(pair)).balanceOf(address(this))); } function setRebaser(address rebaser) external onlyOwner() { _rebaser = rebaser; } function setTransferFeePercent(uint256 tFeePercent) external onlyOwner() { _tFeePercent = tFeePercent; } function setLimit(uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() { require(_limitTimestamp == 0, "Limit changes not allowed"); _limitTransferAmount = transferAmount; _limitMaxBalance = maxBalance; _limitSellFeePercent = sellFeePercent; _limitTimestamp = now; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function rebase(int256 supplyDelta) external returns (uint256) { require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized"); _epoch = _epoch.add(1); if (supplyDelta == 0) { emit LogRebase(_epoch, _totalSupply); return _totalSupply; } uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256(); uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply); uint256 multiplier; if (supplyDelta < 0) { multiplier = RATE_PRECISION.sub(rate); } else { multiplier = RATE_PRECISION.add(rate); } if (supplyDelta < 0) { _totalSupply = _totalSupply.sub(uSupplyDelta); } else { _totalSupply = _totalSupply.add(uSupplyDelta); } if (_totalSupply > MAX) { _totalSupply = MAX; } for (uint256 i = 0; i < _excluded.length; i++) { if(_tOwned[_excluded[i]] > 0) { _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION); } } emit LogRebase(_epoch, _totalSupply); for (uint i = 0; i < transactions.length; i++) { Transaction storage t = transactions[i]; if (t.enabled) { bool result = externalCall(t.destination, t.data); if (!result) { emit TransactionFailed(t.destination, i, t.data); revert("Transaction Failed"); } } } return _totalSupply; } /** * @notice Adds a transaction that gets called for a downstream receiver of rebases * @param destination Address of contract destination * @param data Transaction data payload */ function addTransaction(address destination, bytes memory data) external onlyOwner { transactions.push(Transaction({ enabled: true, destination: destination, data: data })); } /** * @param index Index of transaction to remove. * Transaction ordering may have changed since adding. */ function removeTransaction(uint index) external onlyOwner { require(index < transactions.length, "index out of bounds"); if (index < transactions.length - 1) { transactions[index] = transactions[transactions.length - 1]; } transactions.pop(); } /** * @param index Index of transaction. Transaction ordering may have changed since adding. * @param enabled True for enabled, false for disabled. */ function setTransactionEnabled(uint index, bool enabled) external onlyOwner { require(index < transactions.length, "index must be in range of stored tx list"); transactions[index].enabled = enabled; } /** * @return Number of transactions, both enabled and disabled, in transactions list. */ function transactionsSize() external view returns (uint256) { return transactions.length; } /** * @dev wrapper to call the encoded transactions on downstream consumers. * @param destination Address of destination contract. * @param data The encoded data payload. * @return True on success */ function externalCall(address destination, bytes memory data) internal returns (bool) { bool result; assembly { // solhint-disable-line no-inline-assembly // "Allocate" memory for output // (0x40 is where "free memory" pointer is stored by convention) let outputAddress := mload(0x40) // First 32 bytes are the padded length of data, so exclude that let dataAddress := add(data, 32) result := call( // 34710 is the value that solidity is currently emitting // It includes callGas (700) + callVeryLow (3, to pay for SUB) // + callValueTransferGas (9000) + callNewAccountGas // (25000, in case the destination address does not exist and needs creating) sub(gas(), 34710), destination, 0, // transfer value in wei dataAddress, mload(data), // Size of the input, in bytes. Stored in position 0 of the array. outputAddress, 0 // Output is ignored, therefore the output size is zero ) } return result; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromRefraction(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function refract(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function refractionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _totalSupply, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); return rAmount; } else { (,uint256 rTransferAmount,,,) = _getValues(tAmount, _tFeePercent); return rTransferAmount; } } function tokenFromRefraction(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total refractions"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromRefraction(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) public onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) internal override { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) internal override { require(sender != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(endSale || sender == owner() || sender == address(this), "transfer paused for sale"); if(sender == address(this) || sender == owner()) { _transferBothExcluded(sender, recipient, amount, 0); } else if(_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount, _tFeePercent); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount, _tFeePercent); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount, _tFeePercent); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount, 0); } else { _transferStandard(sender, recipient, amount, _tFeePercent); } } function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _refractFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount, uint256 tFeePercent) private view returns (uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tFeePercent); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee); } function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) { uint256 tFee = tAmount.mul(tFeePercent).div(10000); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _totalSupply; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply); return (rSupply, tSupply); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionsSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50613a5c806100206000396000f3fe60806040526004361061026b5760003560e01c8063596fa9e31161014457806395d89b41116100b6578063cba0e9961161007a578063cba0e99614610a1e578063dd62ed3e14610a51578063e46adf6214610a8c578063f2cc0c1814610abf578063f2fde38b14610af2578063f84354f114610b2557610338565b806395d89b41146108aa57806397d0677b146108bf5780639ace38c2146108f1578063a457c2d7146109ac578063a9059cbb146109e557610338565b8063715018a611610108578063715018a61461082c5780637d449789146108415780638129fc1c146108565780638bdb2afa1461086b5780638da5cb5b1461088057806391d4ec181461089557610338565b8063596fa9e3146107675780635c31a7131461077c57806365cccc80146107b25780636e9dde99146107c757806370a08231146107f957610338565b806323b872dd116101dd578063313ce567116101a1578063313ce5671461067e578063380d831b146106a957806339509351146106be5780633aa8d4be146106f7578063456e0a5d1461072857806346c3bd1f1461073d57610338565b806323b872dd146105d25780632ae427dc146106155780632bc1281e1461062a5780632d7da5a41461063f578063303bb0b61461065457610338565b8063126e19be1161022f578063126e19be1461047c57806313114a9d1461053f57806314f43f7e1461055457806316007d291461057e57806318160ddd146105935780631f36d925146105a857610338565b8063030ba6bf1461033d57806306fdde031461035457806308d1dd8a146103de578063095ea7b3146104055780630ab114f91461045257610338565b366103385760db5460ff16156102b8576040805162461bcd60e51b815260206004820152600d60248201526c141c9954d85b1948115b991959609a1b604482015290519081900360640190fd5b3460da5410156102fa576040805162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b604482015290519081900360640190fd5b60da546103079034610b58565b60da5560dc546000906103289061032234633b9aca00610ba3565b90610be5565b9050610335303383610c3e565b50005b600080fd5b34801561034957600080fd5b50610352610ef7565b005b34801561036057600080fd5b50610369611476565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a357818101518382015260200161038b565b50505050905090810190601f1680156103d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ea57600080fd5b506103f361150c565b60408051918252519081900360200190f35b34801561041157600080fd5b5061043e6004803603604081101561042857600080fd5b506001600160a01b038135169060200135611512565b604080519115158252519081900360200190f35b34801561045e57600080fd5b506103f36004803603602081101561047557600080fd5b503561152f565b34801561048857600080fd5b506103526004803603604081101561049f57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156104ca57600080fd5b8201836020820111156104dc57600080fd5b803590602001918460018302840111640100000000831117156104fe57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506119d0945050505050565b34801561054b57600080fd5b506103f3611af1565b34801561056057600080fd5b506103526004803603602081101561057757600080fd5b5035611af7565b34801561058a57600080fd5b506103f3611bd2565b34801561059f57600080fd5b506103f3611bd8565b3480156105b457600080fd5b50610352600480360360208110156105cb57600080fd5b5035611bde565b3480156105de57600080fd5b5061043e600480360360608110156105f557600080fd5b506001600160a01b03813581169160208101359091169060400135611c3b565b34801561062157600080fd5b506103f3611cc2565b34801561063657600080fd5b506103f3611cc8565b34801561064b57600080fd5b506103f3611cce565b34801561066057600080fd5b506103f36004803603602081101561067757600080fd5b5035611cd4565b34801561068a57600080fd5b50610693611d34565b6040805160ff9092168252519081900360200190f35b3480156106b557600080fd5b5061043e611d3d565b3480156106ca57600080fd5b5061043e600480360360408110156106e157600080fd5b506001600160a01b038135169060200135611d46565b34801561070357600080fd5b5061070c611d94565b604080516001600160a01b039092168252519081900360200190f35b34801561073457600080fd5b506103f3611da3565b34801561074957600080fd5b506103526004803603602081101561076057600080fd5b5035611da9565b34801561077357600080fd5b5061070c611f41565b34801561078857600080fd5b506103526004803603606081101561079f57600080fd5b5080359060208101359060400135611f50565b3480156107be57600080fd5b506103f361200f565b3480156107d357600080fd5b50610352600480360360408110156107ea57600080fd5b50803590602001351515612015565b34801561080557600080fd5b506103f36004803603602081101561081c57600080fd5b50356001600160a01b03166120de565b34801561083857600080fd5b50610352612140565b34801561084d57600080fd5b506103f36121e2565b34801561086257600080fd5b506103526121e8565b34801561087757600080fd5b5061070c612403565b34801561088c57600080fd5b5061070c612412565b3480156108a157600080fd5b506103f3612421565b3480156108b657600080fd5b50610369612427565b3480156108cb57600080fd5b506103f3600480360360408110156108e257600080fd5b50803590602001351515612488565b3480156108fd57600080fd5b5061091b6004803603602081101561091457600080fd5b503561251e565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561096f578181015183820152602001610957565b50505050905090810190601f16801561099c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b3480156109b857600080fd5b5061043e600480360360408110156109cf57600080fd5b506001600160a01b0381351690602001356125e3565b3480156109f157600080fd5b5061043e60048036036040811015610a0857600080fd5b506001600160a01b03813516906020013561264b565b348015610a2a57600080fd5b5061043e60048036036020811015610a4157600080fd5b50356001600160a01b031661265f565b348015610a5d57600080fd5b506103f360048036036040811015610a7457600080fd5b506001600160a01b038135811691602001351661267d565b348015610a9857600080fd5b5061035260048036036020811015610aaf57600080fd5b50356001600160a01b03166126a8565b348015610acb57600080fd5b5061035260048036036020811015610ae257600080fd5b50356001600160a01b0316612722565b348015610afe57600080fd5b5061035260048036036020811015610b1557600080fd5b50356001600160a01b03166128a8565b348015610b3157600080fd5b5061035260048036036020811015610b4857600080fd5b50356001600160a01b03166129a1565b6000610b9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b62565b90505b92915050565b6000610b9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf9565b600082610bf457506000610b9d565b82820282848281610c0157fe5b0414610b9a5760405162461bcd60e51b81526004018080602001828103825260218152602001806138a36021913960400191505060405180910390fd5b6001600160a01b038316610c835760405162461bcd60e51b815260040180806020018281038252602581526020018061398d6025913960400191505060405180910390fd5b60008111610cc25760405162461bcd60e51b815260040180806020018281038252602981526020018061390c6029913960400191505060405180910390fd5b60db5460ff1680610ceb5750610cd6612412565b6001600160a01b0316836001600160a01b0316145b80610cfe57506001600160a01b03831630145b610d4f576040805162461bcd60e51b815260206004820152601860248201527f7472616e736665722070617573656420666f722073616c650000000000000000604482015290519081900360640190fd5b6001600160a01b038316301480610d7e5750610d69612412565b6001600160a01b0316836001600160a01b0316145b15610d9557610d908383836000612c5e565b610ef2565b6001600160a01b038316600090815260ce602052604090205460ff168015610dd657506001600160a01b038216600090815260ce602052604090205460ff16155b15610de957610d9083838360d354612dad565b6001600160a01b038316600090815260ce602052604090205460ff16158015610e2a57506001600160a01b038216600090815260ce602052604090205460ff165b15610e3d57610d9083838360d354612e4d565b6001600160a01b038316600090815260ce602052604090205460ff16158015610e7f57506001600160a01b038216600090815260ce602052604090205460ff16155b15610e9257610d9083838360d354612e8f565b6001600160a01b038316600090815260ce602052604090205460ff168015610ed257506001600160a01b038216600090815260ce602052604090205460ff165b15610ee457610d908383836000612c5e565b610ef283838360d354612e8f565b505050565b610eff612ed1565b6097546001600160a01b03908116911614610f4f576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60db5460ff1615610f98576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b1a5cdd195960921b604482015290519081900360640190fd5b60da541580610fa857504260d954105b610ff2576040805162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc81b9bdd08195b991959081e595d60521b604482015290519081900360640190fd5b60db805460ff191660011790556110173061100b612ed1565b653ca1e33fa400610c3e565b60de5460dd54604080516315ab88c960e31b815290516000936001600160a01b039081169363c9c653969391169163ad5c464891600480820192602092909190829003018186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156110e457600080fd5b505af11580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b505160dd54604080516315ab88c960e31b8152905192935083926000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561115a57600080fd5b505afa15801561116e573d6000803e3d6000fd5b505050506040513d602081101561118457600080fd5b505160408051630d0e30db60e41b8152905191925047916001600160a01b0384169163d0e30db091849160048082019260009290919082900301818588803b1580156111cf57600080fd5b505af11580156111e3573d6000803e3d6000fd5b50505050504760001461122f576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b60da54660110d9316ec00090156112745760dc546112559061032284633b9aca00610ba3565b9050600081611263306120de565b03905061127230600083610c3e565b505b826001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156112cb57600080fd5b505af11580156112df573d6000803e3d6000fd5b505050506040513d60208110156112f557600080fd5b506113039050308583610c3e565b604080516335313c2160e11b815230600482015290516001600160a01b03861691636a6278429160248083019260209291908290030181600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b505050506040513d602081101561137557600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b0386169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d60208110156113f257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b505050506040513d602081101561146d57600080fd5b50505050505050565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115025780601f106114d757610100808354040283529160200191611502565b820191906000526020600020905b8154815290600101906020018083116114e557829003601f168201915b5050505050905090565b60d85481565b600061152661151f612ed1565b8484612ed5565b50600192915050565b6000611539612412565b6001600160a01b031661154a612ed1565b6001600160a01b03161480611579575060d4546001600160a01b031661156e612ed1565b6001600160a01b0316145b6115c2576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca546115d0906001612fc1565b60ca55816116195760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d0546119cb565b60006116366000841261162c5783611631565b836000035b61301b565b60d0549091506000906116579061165184633b9aca00610be5565b90610ba3565b905060008085121561167857611671633b9aca0083610b58565b9050611689565b611686633b9aca0083612fc1565b90505b60008512156116a75760d05461169f9084610b58565b60d0556116b8565b60d0546116b49084612fc1565b60d0555b60005b60cf5481101561178a57600060cc600060cf84815481106116d857fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411156117825761174b6009600a0a6116518460cc600060cf878154811061172057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205490610be5565b60cc600060cf848154811061175c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b6001016116bb565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c9548110156119c157600060c982815481106117df57fe5b60009182526020909120600290910201805490915060ff16156119b85780546001808301805460408051602060026101009685161587026000190190941693909304601f81018490048402820184019092528181526000956118a79590046001600160a01b031693909290919083018282801561189d5780601f106118725761010080835404028352916020019161189d565b820191906000526020600020905b81548152906001019060200180831161188057829003601f168201915b5050505050613076565b9050806119b65781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c2639388939192906060830190849080156119655780601f1061193a57610100808354040283529160200191611965565b820191906000526020600020905b81548152906001019060200180831161194857829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b506001016117c6565b5060d05493505050505b919050565b6119d8612ed1565b6097546001600160a01b03908116911614611a28576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193611aea937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d29019291909101906136ee565b5050505050565b60d25490565b6000611b01612ed1565b6001600160a01b038116600090815260ce602052604090205490915060ff1615611b5c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806139d6602c913960400191505060405180910390fd5b6000611b6a8360d354613099565b505050506001600160a01b038316600090815260cb6020526040902054909150611b949082610b58565b6001600160a01b038316600090815260cb602052604090205560d154611bba9082610b58565b60d15560d254611bca9084612fc1565b60d255505050565b60dc5481565b60d05490565b611be6612ed1565b6097546001600160a01b03908116911614611c36576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60d355565b6000611c48848484610c3e565b611cb884611c54612ed1565b611cb3856040518060600160405280602881526020016138c4602891396001600160a01b038a16600090815260cd6020526040812090611c92612ed1565b6001600160a01b031681526020810191909152604001600020549190612b62565b612ed5565b5060019392505050565b60d35481565b60d55481565b60d95481565b600060d154821115611d175760405162461bcd60e51b815260040180806020018281038252602a815260200180613963602a913960400191505060405180910390fd5b6000611d216130e7565b9050611d2d8382610ba3565b9392505050565b606a5460ff1690565b60db5460ff1681565b6000611526611d53612ed1565b84611cb38560cd6000611d64612ed1565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612fc1565b60d4546001600160a01b031681565b60d65481565b611db1612ed1565b6097546001600160a01b03908116911614611e01576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60c9548110611e4d576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b60c95460001901811015611efe5760c980546000198101908110611e6d57fe5b906000526020600020906002020160c98281548110611e8857fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b03168202178255600180850180549394611efa948387019492938116159092026000190190911604613768565b5050505b60c9805480611f0957fe5b60008281526020812060026000199093019283020180546001600160a81b031916815590611f3a60018301826137dd565b5050905550565b60dd546001600160a01b031681565b611f58612ed1565b6097546001600160a01b03908116911614611fa8576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60d85415611ffd576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d59290925560d65560d7554260d855565b60da5481565b61201d612ed1565b6097546001600160a01b0390811691161461206d576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60c95482106120ad5760405162461bcd60e51b815260040180806020018281038252602881526020018061387b6028913960400191505060405180910390fd5b8060c983815481106120bb57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff161561211e57506001600160a01b038116600090815260cc60205260409020546119cb565b6001600160a01b038216600090815260cb6020526040902054610b9d90611cd4565b612148612ed1565b6097546001600160a01b03908116911614612198576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60d75481565b600054610100900460ff1680612201575061220161310a565b8061220f575060005460ff16155b61224a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015612275576000805460ff1961ff0019909116610100171660011790555b6122bf6040518060400160405280600b81526020016a59696e59616e674261736560a81b81525060405180604001604052806005815260200164594241534560d81b815250613110565b6122c960096131c5565b6122d16131db565b66025e54461d240060d05566013923635193ff1960d1556122f0612ed1565b60d480546001600160a01b0319166001600160a01b039290921691909117905561010a60d35560d15430600081815260cb602090815260408083209490945560d05484519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36203f480420160d95560db805460ff191690556802b5e3af16b188000060da5561177060dc5561239d612398612ed1565b612722565b6123a630612722565b60dd80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560de8054909116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f1790558015612400576000805461ff00191690555b50565b60de546001600160a01b031681565b6097546001600160a01b031690565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115025780601f106114d757610100808354040283529160200191611502565b600060d0548311156124e1576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816125025760006124f48460d354613099565b50929450610b9d9350505050565b60006125108460d354613099565b50919450610b9d9350505050565b60c9818154811061252b57fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b031694929390928301828280156125d95780601f106125ae576101008083540402835291602001916125d9565b820191906000526020600020905b8154815290600101906020018083116125bc57829003601f168201915b5050505050905083565b60006115266125f0612ed1565b84611cb385604051806060016040528060258152602001613a026025913960cd600061261a612ed1565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612b62565b6000611526612658612ed1565b8484610c3e565b6001600160a01b0316600090815260ce602052604090205460ff1690565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b6126b0612ed1565b6097546001600160a01b03908116911614612700576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b61272a612ed1565b6097546001600160a01b0390811691161461277a576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16156127e8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415612842576001600160a01b038116600090815260cb602052604090205461282890611cd4565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b6128b0612ed1565b6097546001600160a01b03908116911614612900576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6001600160a01b0381166129455760405162461bcd60e51b81526004018080602001828103825260268152602001806138336026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b6129a9612ed1565b6097546001600160a01b039081169116146129f9576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612a66576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf54811015612b5e57816001600160a01b031660cf8281548110612a8a57fe5b6000918252602090912001546001600160a01b03161415612b565760cf80546000198101908110612ab757fe5b60009182526020909120015460cf80546001600160a01b039092169183908110612add57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf805480612b2f57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612b5e565b600101612a69565b5050565b60008184841115612bf15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bb6578181015183820152602001612b9e565b50505050905090810190601f168015612be35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612c485760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612bb6578181015183820152602001612b9e565b506000838581612c5457fe5b0495945050505050565b6000806000806000612c708787613099565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612ca09088610b58565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612ccf9086610b58565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc9091522054612d059083612fc1565b6001600160a01b038916600090815260cc602090815260408083209390935560cb90522054612d349085612fc1565b6001600160a01b038916600090815260cb6020526040902055612d57838261328c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b6000806000806000612dbf8787613099565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612def9088610b58565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612e1e9086610b58565b6001600160a01b03808b16600090815260cb602052604080822093909355908a1681522054612d349085612fc1565b6000806000806000612e5f8787613099565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612ccf9086610b58565b6000806000806000612ea18787613099565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612e1e9086610b58565b3390565b6001600160a01b038316612f1a5760405162461bcd60e51b81526004018080602001828103825260248152602001806139b26024913960400191505060405180910390fd5b6001600160a01b038216612f5f5760405162461bcd60e51b81526004018080602001828103825260228152602001806138596022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610b9a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215613072576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006130ae89896132b0565b9150915060006130bc6130e7565b905060008060006130ce8d86866132de565b919f909e50909c50959a50939850939650505050505050565b60008060006130f461331a565b90925090506131038282610ba3565b9250505090565b303b1590565b600054610100900460ff1680613129575061312961310a565b80613137575060005460ff16155b6131725760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff1615801561319d576000805460ff1961ff0019909116610100171660011790555b6131a561347d565b6131af838361351d565b8015610ef2576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff16806131f457506131f461310a565b80613202575060005460ff16155b61323d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015613268576000805460ff1961ff0019909116610100171660011790555b61327061347d565b6132786135f5565b8015612400576000805461ff001916905550565b60d1546132999083610b58565b60d15560d2546132a99082612fc1565b60d2555050565b600080806132c46127106116518787610be5565b905060006132d28683610b58565b96919550909350505050565b60008080806132ed8786610be5565b905060006132fb8787610be5565b905060006133098383610b58565b929992985090965090945050505050565b60d15460d0546000918291825b60cf5481101561344b578260cb600060cf848154811061334357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133a857508160cc600060cf848154811061338157fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133bf5760d15460d05494509450505050613479565b6133ff60cb600060cf84815481106133d357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610b58565b925061344160cc600060cf848154811061341557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610b58565b9150600101613327565b5060d05460d15461345b91610ba3565b8210156134735760d15460d054935093505050613479565b90925090505b9091565b600054610100900460ff1680613496575061349661310a565b806134a4575060005460ff16155b6134df5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015613278576000805460ff1961ff0019909116610100171660011790558015612400576000805461ff001916905550565b600054610100900460ff1680613536575061353661310a565b80613544575060005460ff16155b61357f5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff161580156135aa576000805460ff1961ff0019909116610100171660011790555b82516135bd9060689060208601906136ee565b5081516135d19060699060208501906136ee565b50606a805460ff191660121790558015610ef2576000805461ff0019169055505050565b600054610100900460ff168061360e575061360e61310a565b8061361c575060005460ff16155b6136575760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015613682576000805460ff1961ff0019909116610100171660011790555b600061368c612ed1565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612400576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061372f57805160ff191683800117855561375c565b8280016001018555821561375c579182015b8281111561375c578251825591602001919060010190613741565b5061307292915061381d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137a1578054855561375c565b8280016001018555821561375c57600052602060002091601f016020900482015b8281111561375c5782548255916001019190600101906137c2565b50805460018160011615610100020316600290046000825580601f106138035750612400565b601f01602090049060005260206000209081019061240091905b5b80821115613072576000815560010161381e56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041087cd998ff5462a28efc1159e3ed5d18d41840447bb15c8b71c40a6040222c64736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c8063596fa9e31161014457806395d89b41116100b6578063cba0e9961161007a578063cba0e99614610a1e578063dd62ed3e14610a51578063e46adf6214610a8c578063f2cc0c1814610abf578063f2fde38b14610af2578063f84354f114610b2557610338565b806395d89b41146108aa57806397d0677b146108bf5780639ace38c2146108f1578063a457c2d7146109ac578063a9059cbb146109e557610338565b8063715018a611610108578063715018a61461082c5780637d449789146108415780638129fc1c146108565780638bdb2afa1461086b5780638da5cb5b1461088057806391d4ec181461089557610338565b8063596fa9e3146107675780635c31a7131461077c57806365cccc80146107b25780636e9dde99146107c757806370a08231146107f957610338565b806323b872dd116101dd578063313ce567116101a1578063313ce5671461067e578063380d831b146106a957806339509351146106be5780633aa8d4be146106f7578063456e0a5d1461072857806346c3bd1f1461073d57610338565b806323b872dd146105d25780632ae427dc146106155780632bc1281e1461062a5780632d7da5a41461063f578063303bb0b61461065457610338565b8063126e19be1161022f578063126e19be1461047c57806313114a9d1461053f57806314f43f7e1461055457806316007d291461057e57806318160ddd146105935780631f36d925146105a857610338565b8063030ba6bf1461033d57806306fdde031461035457806308d1dd8a146103de578063095ea7b3146104055780630ab114f91461045257610338565b366103385760db5460ff16156102b8576040805162461bcd60e51b815260206004820152600d60248201526c141c9954d85b1948115b991959609a1b604482015290519081900360640190fd5b3460da5410156102fa576040805162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b604482015290519081900360640190fd5b60da546103079034610b58565b60da5560dc546000906103289061032234633b9aca00610ba3565b90610be5565b9050610335303383610c3e565b50005b600080fd5b34801561034957600080fd5b50610352610ef7565b005b34801561036057600080fd5b50610369611476565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a357818101518382015260200161038b565b50505050905090810190601f1680156103d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ea57600080fd5b506103f361150c565b60408051918252519081900360200190f35b34801561041157600080fd5b5061043e6004803603604081101561042857600080fd5b506001600160a01b038135169060200135611512565b604080519115158252519081900360200190f35b34801561045e57600080fd5b506103f36004803603602081101561047557600080fd5b503561152f565b34801561048857600080fd5b506103526004803603604081101561049f57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156104ca57600080fd5b8201836020820111156104dc57600080fd5b803590602001918460018302840111640100000000831117156104fe57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506119d0945050505050565b34801561054b57600080fd5b506103f3611af1565b34801561056057600080fd5b506103526004803603602081101561057757600080fd5b5035611af7565b34801561058a57600080fd5b506103f3611bd2565b34801561059f57600080fd5b506103f3611bd8565b3480156105b457600080fd5b50610352600480360360208110156105cb57600080fd5b5035611bde565b3480156105de57600080fd5b5061043e600480360360608110156105f557600080fd5b506001600160a01b03813581169160208101359091169060400135611c3b565b34801561062157600080fd5b506103f3611cc2565b34801561063657600080fd5b506103f3611cc8565b34801561064b57600080fd5b506103f3611cce565b34801561066057600080fd5b506103f36004803603602081101561067757600080fd5b5035611cd4565b34801561068a57600080fd5b50610693611d34565b6040805160ff9092168252519081900360200190f35b3480156106b557600080fd5b5061043e611d3d565b3480156106ca57600080fd5b5061043e600480360360408110156106e157600080fd5b506001600160a01b038135169060200135611d46565b34801561070357600080fd5b5061070c611d94565b604080516001600160a01b039092168252519081900360200190f35b34801561073457600080fd5b506103f3611da3565b34801561074957600080fd5b506103526004803603602081101561076057600080fd5b5035611da9565b34801561077357600080fd5b5061070c611f41565b34801561078857600080fd5b506103526004803603606081101561079f57600080fd5b5080359060208101359060400135611f50565b3480156107be57600080fd5b506103f361200f565b3480156107d357600080fd5b50610352600480360360408110156107ea57600080fd5b50803590602001351515612015565b34801561080557600080fd5b506103f36004803603602081101561081c57600080fd5b50356001600160a01b03166120de565b34801561083857600080fd5b50610352612140565b34801561084d57600080fd5b506103f36121e2565b34801561086257600080fd5b506103526121e8565b34801561087757600080fd5b5061070c612403565b34801561088c57600080fd5b5061070c612412565b3480156108a157600080fd5b506103f3612421565b3480156108b657600080fd5b50610369612427565b3480156108cb57600080fd5b506103f3600480360360408110156108e257600080fd5b50803590602001351515612488565b3480156108fd57600080fd5b5061091b6004803603602081101561091457600080fd5b503561251e565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561096f578181015183820152602001610957565b50505050905090810190601f16801561099c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b3480156109b857600080fd5b5061043e600480360360408110156109cf57600080fd5b506001600160a01b0381351690602001356125e3565b3480156109f157600080fd5b5061043e60048036036040811015610a0857600080fd5b506001600160a01b03813516906020013561264b565b348015610a2a57600080fd5b5061043e60048036036020811015610a4157600080fd5b50356001600160a01b031661265f565b348015610a5d57600080fd5b506103f360048036036040811015610a7457600080fd5b506001600160a01b038135811691602001351661267d565b348015610a9857600080fd5b5061035260048036036020811015610aaf57600080fd5b50356001600160a01b03166126a8565b348015610acb57600080fd5b5061035260048036036020811015610ae257600080fd5b50356001600160a01b0316612722565b348015610afe57600080fd5b5061035260048036036020811015610b1557600080fd5b50356001600160a01b03166128a8565b348015610b3157600080fd5b5061035260048036036020811015610b4857600080fd5b50356001600160a01b03166129a1565b6000610b9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b62565b90505b92915050565b6000610b9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf9565b600082610bf457506000610b9d565b82820282848281610c0157fe5b0414610b9a5760405162461bcd60e51b81526004018080602001828103825260218152602001806138a36021913960400191505060405180910390fd5b6001600160a01b038316610c835760405162461bcd60e51b815260040180806020018281038252602581526020018061398d6025913960400191505060405180910390fd5b60008111610cc25760405162461bcd60e51b815260040180806020018281038252602981526020018061390c6029913960400191505060405180910390fd5b60db5460ff1680610ceb5750610cd6612412565b6001600160a01b0316836001600160a01b0316145b80610cfe57506001600160a01b03831630145b610d4f576040805162461bcd60e51b815260206004820152601860248201527f7472616e736665722070617573656420666f722073616c650000000000000000604482015290519081900360640190fd5b6001600160a01b038316301480610d7e5750610d69612412565b6001600160a01b0316836001600160a01b0316145b15610d9557610d908383836000612c5e565b610ef2565b6001600160a01b038316600090815260ce602052604090205460ff168015610dd657506001600160a01b038216600090815260ce602052604090205460ff16155b15610de957610d9083838360d354612dad565b6001600160a01b038316600090815260ce602052604090205460ff16158015610e2a57506001600160a01b038216600090815260ce602052604090205460ff165b15610e3d57610d9083838360d354612e4d565b6001600160a01b038316600090815260ce602052604090205460ff16158015610e7f57506001600160a01b038216600090815260ce602052604090205460ff16155b15610e9257610d9083838360d354612e8f565b6001600160a01b038316600090815260ce602052604090205460ff168015610ed257506001600160a01b038216600090815260ce602052604090205460ff165b15610ee457610d908383836000612c5e565b610ef283838360d354612e8f565b505050565b610eff612ed1565b6097546001600160a01b03908116911614610f4f576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60db5460ff1615610f98576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b1a5cdd195960921b604482015290519081900360640190fd5b60da541580610fa857504260d954105b610ff2576040805162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc81b9bdd08195b991959081e595d60521b604482015290519081900360640190fd5b60db805460ff191660011790556110173061100b612ed1565b653ca1e33fa400610c3e565b60de5460dd54604080516315ab88c960e31b815290516000936001600160a01b039081169363c9c653969391169163ad5c464891600480820192602092909190829003018186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156110e457600080fd5b505af11580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b505160dd54604080516315ab88c960e31b8152905192935083926000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561115a57600080fd5b505afa15801561116e573d6000803e3d6000fd5b505050506040513d602081101561118457600080fd5b505160408051630d0e30db60e41b8152905191925047916001600160a01b0384169163d0e30db091849160048082019260009290919082900301818588803b1580156111cf57600080fd5b505af11580156111e3573d6000803e3d6000fd5b50505050504760001461122f576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b60da54660110d9316ec00090156112745760dc546112559061032284633b9aca00610ba3565b9050600081611263306120de565b03905061127230600083610c3e565b505b826001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156112cb57600080fd5b505af11580156112df573d6000803e3d6000fd5b505050506040513d60208110156112f557600080fd5b506113039050308583610c3e565b604080516335313c2160e11b815230600482015290516001600160a01b03861691636a6278429160248083019260209291908290030181600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b505050506040513d602081101561137557600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b0386169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d60208110156113f257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b505050506040513d602081101561146d57600080fd5b50505050505050565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115025780601f106114d757610100808354040283529160200191611502565b820191906000526020600020905b8154815290600101906020018083116114e557829003601f168201915b5050505050905090565b60d85481565b600061152661151f612ed1565b8484612ed5565b50600192915050565b6000611539612412565b6001600160a01b031661154a612ed1565b6001600160a01b03161480611579575060d4546001600160a01b031661156e612ed1565b6001600160a01b0316145b6115c2576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca546115d0906001612fc1565b60ca55816116195760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d0546119cb565b60006116366000841261162c5783611631565b836000035b61301b565b60d0549091506000906116579061165184633b9aca00610be5565b90610ba3565b905060008085121561167857611671633b9aca0083610b58565b9050611689565b611686633b9aca0083612fc1565b90505b60008512156116a75760d05461169f9084610b58565b60d0556116b8565b60d0546116b49084612fc1565b60d0555b60005b60cf5481101561178a57600060cc600060cf84815481106116d857fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411156117825761174b6009600a0a6116518460cc600060cf878154811061172057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205490610be5565b60cc600060cf848154811061175c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b6001016116bb565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c9548110156119c157600060c982815481106117df57fe5b60009182526020909120600290910201805490915060ff16156119b85780546001808301805460408051602060026101009685161587026000190190941693909304601f81018490048402820184019092528181526000956118a79590046001600160a01b031693909290919083018282801561189d5780601f106118725761010080835404028352916020019161189d565b820191906000526020600020905b81548152906001019060200180831161188057829003601f168201915b5050505050613076565b9050806119b65781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c2639388939192906060830190849080156119655780601f1061193a57610100808354040283529160200191611965565b820191906000526020600020905b81548152906001019060200180831161194857829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b506001016117c6565b5060d05493505050505b919050565b6119d8612ed1565b6097546001600160a01b03908116911614611a28576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193611aea937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d29019291909101906136ee565b5050505050565b60d25490565b6000611b01612ed1565b6001600160a01b038116600090815260ce602052604090205490915060ff1615611b5c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806139d6602c913960400191505060405180910390fd5b6000611b6a8360d354613099565b505050506001600160a01b038316600090815260cb6020526040902054909150611b949082610b58565b6001600160a01b038316600090815260cb602052604090205560d154611bba9082610b58565b60d15560d254611bca9084612fc1565b60d255505050565b60dc5481565b60d05490565b611be6612ed1565b6097546001600160a01b03908116911614611c36576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60d355565b6000611c48848484610c3e565b611cb884611c54612ed1565b611cb3856040518060600160405280602881526020016138c4602891396001600160a01b038a16600090815260cd6020526040812090611c92612ed1565b6001600160a01b031681526020810191909152604001600020549190612b62565b612ed5565b5060019392505050565b60d35481565b60d55481565b60d95481565b600060d154821115611d175760405162461bcd60e51b815260040180806020018281038252602a815260200180613963602a913960400191505060405180910390fd5b6000611d216130e7565b9050611d2d8382610ba3565b9392505050565b606a5460ff1690565b60db5460ff1681565b6000611526611d53612ed1565b84611cb38560cd6000611d64612ed1565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612fc1565b60d4546001600160a01b031681565b60d65481565b611db1612ed1565b6097546001600160a01b03908116911614611e01576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60c9548110611e4d576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b60c95460001901811015611efe5760c980546000198101908110611e6d57fe5b906000526020600020906002020160c98281548110611e8857fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b03168202178255600180850180549394611efa948387019492938116159092026000190190911604613768565b5050505b60c9805480611f0957fe5b60008281526020812060026000199093019283020180546001600160a81b031916815590611f3a60018301826137dd565b5050905550565b60dd546001600160a01b031681565b611f58612ed1565b6097546001600160a01b03908116911614611fa8576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60d85415611ffd576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d59290925560d65560d7554260d855565b60da5481565b61201d612ed1565b6097546001600160a01b0390811691161461206d576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60c95482106120ad5760405162461bcd60e51b815260040180806020018281038252602881526020018061387b6028913960400191505060405180910390fd5b8060c983815481106120bb57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff161561211e57506001600160a01b038116600090815260cc60205260409020546119cb565b6001600160a01b038216600090815260cb6020526040902054610b9d90611cd4565b612148612ed1565b6097546001600160a01b03908116911614612198576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60d75481565b600054610100900460ff1680612201575061220161310a565b8061220f575060005460ff16155b61224a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015612275576000805460ff1961ff0019909116610100171660011790555b6122bf6040518060400160405280600b81526020016a59696e59616e674261736560a81b81525060405180604001604052806005815260200164594241534560d81b815250613110565b6122c960096131c5565b6122d16131db565b66025e54461d240060d05566013923635193ff1960d1556122f0612ed1565b60d480546001600160a01b0319166001600160a01b039290921691909117905561010a60d35560d15430600081815260cb602090815260408083209490945560d05484519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36203f480420160d95560db805460ff191690556802b5e3af16b188000060da5561177060dc5561239d612398612ed1565b612722565b6123a630612722565b60dd80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560de8054909116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f1790558015612400576000805461ff00191690555b50565b60de546001600160a01b031681565b6097546001600160a01b031690565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115025780601f106114d757610100808354040283529160200191611502565b600060d0548311156124e1576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816125025760006124f48460d354613099565b50929450610b9d9350505050565b60006125108460d354613099565b50919450610b9d9350505050565b60c9818154811061252b57fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b031694929390928301828280156125d95780601f106125ae576101008083540402835291602001916125d9565b820191906000526020600020905b8154815290600101906020018083116125bc57829003601f168201915b5050505050905083565b60006115266125f0612ed1565b84611cb385604051806060016040528060258152602001613a026025913960cd600061261a612ed1565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612b62565b6000611526612658612ed1565b8484610c3e565b6001600160a01b0316600090815260ce602052604090205460ff1690565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b6126b0612ed1565b6097546001600160a01b03908116911614612700576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b61272a612ed1565b6097546001600160a01b0390811691161461277a576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16156127e8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415612842576001600160a01b038116600090815260cb602052604090205461282890611cd4565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b6128b0612ed1565b6097546001600160a01b03908116911614612900576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6001600160a01b0381166129455760405162461bcd60e51b81526004018080602001828103825260268152602001806138336026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b6129a9612ed1565b6097546001600160a01b039081169116146129f9576040805162461bcd60e51b815260206004820181905260248201526000805160206138ec833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612a66576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf54811015612b5e57816001600160a01b031660cf8281548110612a8a57fe5b6000918252602090912001546001600160a01b03161415612b565760cf80546000198101908110612ab757fe5b60009182526020909120015460cf80546001600160a01b039092169183908110612add57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf805480612b2f57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612b5e565b600101612a69565b5050565b60008184841115612bf15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bb6578181015183820152602001612b9e565b50505050905090810190601f168015612be35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612c485760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612bb6578181015183820152602001612b9e565b506000838581612c5457fe5b0495945050505050565b6000806000806000612c708787613099565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612ca09088610b58565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612ccf9086610b58565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc9091522054612d059083612fc1565b6001600160a01b038916600090815260cc602090815260408083209390935560cb90522054612d349085612fc1565b6001600160a01b038916600090815260cb6020526040902055612d57838261328c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b6000806000806000612dbf8787613099565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612def9088610b58565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612e1e9086610b58565b6001600160a01b03808b16600090815260cb602052604080822093909355908a1681522054612d349085612fc1565b6000806000806000612e5f8787613099565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612ccf9086610b58565b6000806000806000612ea18787613099565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612e1e9086610b58565b3390565b6001600160a01b038316612f1a5760405162461bcd60e51b81526004018080602001828103825260248152602001806139b26024913960400191505060405180910390fd5b6001600160a01b038216612f5f5760405162461bcd60e51b81526004018080602001828103825260228152602001806138596022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610b9a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215613072576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006130ae89896132b0565b9150915060006130bc6130e7565b905060008060006130ce8d86866132de565b919f909e50909c50959a50939850939650505050505050565b60008060006130f461331a565b90925090506131038282610ba3565b9250505090565b303b1590565b600054610100900460ff1680613129575061312961310a565b80613137575060005460ff16155b6131725760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff1615801561319d576000805460ff1961ff0019909116610100171660011790555b6131a561347d565b6131af838361351d565b8015610ef2576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff16806131f457506131f461310a565b80613202575060005460ff16155b61323d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015613268576000805460ff1961ff0019909116610100171660011790555b61327061347d565b6132786135f5565b8015612400576000805461ff001916905550565b60d1546132999083610b58565b60d15560d2546132a99082612fc1565b60d2555050565b600080806132c46127106116518787610be5565b905060006132d28683610b58565b96919550909350505050565b60008080806132ed8786610be5565b905060006132fb8787610be5565b905060006133098383610b58565b929992985090965090945050505050565b60d15460d0546000918291825b60cf5481101561344b578260cb600060cf848154811061334357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133a857508160cc600060cf848154811061338157fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133bf5760d15460d05494509450505050613479565b6133ff60cb600060cf84815481106133d357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610b58565b925061344160cc600060cf848154811061341557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610b58565b9150600101613327565b5060d05460d15461345b91610ba3565b8210156134735760d15460d054935093505050613479565b90925090505b9091565b600054610100900460ff1680613496575061349661310a565b806134a4575060005460ff16155b6134df5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015613278576000805460ff1961ff0019909116610100171660011790558015612400576000805461ff001916905550565b600054610100900460ff1680613536575061353661310a565b80613544575060005460ff16155b61357f5760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff161580156135aa576000805460ff1961ff0019909116610100171660011790555b82516135bd9060689060208601906136ee565b5081516135d19060699060208501906136ee565b50606a805460ff191660121790558015610ef2576000805461ff0019169055505050565b600054610100900460ff168061360e575061360e61310a565b8061361c575060005460ff16155b6136575760405162461bcd60e51b815260040180806020018281038252602e815260200180613935602e913960400191505060405180910390fd5b600054610100900460ff16158015613682576000805460ff1961ff0019909116610100171660011790555b600061368c612ed1565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612400576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061372f57805160ff191683800117855561375c565b8280016001018555821561375c579182015b8281111561375c578251825591602001919060010190613741565b5061307292915061381d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137a1578054855561375c565b8280016001018555821561375c57600052602060002091601f016020900482015b8281111561375c5782548255916001019190600101906137c2565b50805460018160011615610100020316600290046000825580601f106138035750612400565b601f01602090049060005260206000209081019061240091905b5b80821115613072576000815560010161381e56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041087cd998ff5462a28efc1159e3ed5d18d41840447bb15c8b71c40a6040222c64736f6c634300060c0033
Deployed Bytecode Sourcemap
18849:19188:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21381:7;;;;21380:8;21372:34;;;;;-1:-1:-1;;;21372:34:0;;;;;;;;;;;;-1:-1:-1;;;21372:34:0;;;;;;;;;;;;;;;21440:9;21425:11;;:24;;21417:45;;;;;-1:-1:-1;;;21417:45:0;;;;;;;;;;;;-1:-1:-1;;;21417:45:0;;;;;;;;;;;;;;;21497:11;;:26;;21513:9;21497:15;:26::i;:::-;21483:11;:40;21582:12;;21534:20;;21557:38;;:20;:9;21571:5;21557:13;:20::i;:::-;:24;;:38::i;:::-;21534:61;;21606:51;21624:4;21631:10;21643:12;21606:9;:51::i;:::-;21334:331;18849:19188;;;;;21673:1263;;;;;;;;;;;;;:::i;:::-;;7585:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20144:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29112:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29112:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23675:1761;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23675:1761:0;;:::i;25662:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25662:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25662:260:0;;-1:-1:-1;25662:260:0;;-1:-1:-1;;;;;25662:260:0:i;30241:87::-;;;;;;;;;;;;;:::i;30336:390::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30336:390:0;;:::i;20281:27::-;;;;;;;;;;;;;:::i;23563:100::-;;;;;;;;;;;;;:::i;23055:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23055:120:0;;:::i;29281:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29281:313:0;;;;;;;;;;;;;;;;;:::i;19940:27::-;;;;;;;;;;;;;:::i;20016:35::-;;;;;;;;;;;;;:::i;20183:32::-;;;;;;;;;;;;;:::i;31209:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31209:253:0;;:::i;7771:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20255:19;;;;;;;;;;;;;:::i;29602:227::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29602:227:0;;;;;;;;:::i;19980:23::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19980:23:0;;;;;;;;;;;;;;20058:31;;;;;;;;;;;;;:::i;26074:325::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26074:325:0;;:::i;20321:41::-;;;;;;;;;;;;;:::i;23187:364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23187:364:0;;;;;;;;;;;;:::i;20222:26::-;;;;;;;;;;;;;:::i;26581:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26581:246:0;;;;;;;;;:::i;28580:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28580:198:0;-1:-1:-1;;;;;28580:198:0;;:::i;3449:148::-;;;;;;;;;;;;;:::i;20096:35::-;;;;;;;;;;;;;:::i;20421:905::-;;;;;;;;;;;;;:::i;20369:39::-;;;;;;;;;;;;;:::i;3235:79::-;;;;;;;;;;;;;:::i;26942:137::-;;;;;;;;;;;;;:::i;7676:87::-;;;;;;;;;;;;;:::i;30734:467::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30734:467:0;;;;;;;;;:::i;19264:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19264:33:0;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;19264:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29837:278;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29837:278:0;;;;;;;;:::i;28786:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28786:167:0;;;;;;;;:::i;30123:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30123:110:0;-1:-1:-1;;;;;30123:110:0;;:::i;28961:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28961:143:0;;;;;;;;;;:::i;22948:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22948:95:0;-1:-1:-1;;;;;22948:95:0;;:::i;31470:330::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31470:330:0;-1:-1:-1;;;;;31470:330:0;;:::i;3605:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3605:244:0;-1:-1:-1;;;;;3605:244:0;;:::i;31808:476::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31808:476:0;-1:-1:-1;;;;;31808:476:0;;:::i;4799:136::-;4857:7;4884:43;4888:1;4891;4884:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4877:50;;4799:136;;;;;:::o;5405:132::-;5463:7;5490:39;5494:1;5497;5490:39;;;;;;;;;;;;;;;;;:3;:39::i;5147:250::-;5205:7;5229:6;5225:47;;-1:-1:-1;5259:1:0;5252:8;;5225:47;5296:5;;;5300:1;5296;:5;:1;5320:5;;;;;:10;5312:56;;;;-1:-1:-1;;;5312:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32647:1157;-1:-1:-1;;;;;32754:20:0;;32746:70;;;;-1:-1:-1;;;32746:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32844:1;32835:6;:10;32827:64;;;;-1:-1:-1;;;32827:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32910:7;;;;;:28;;;32931:7;:5;:7::i;:::-;-1:-1:-1;;;;;32921:17:0;:6;-1:-1:-1;;;;;32921:17:0;;32910:28;:55;;;-1:-1:-1;;;;;;32942:23:0;;32960:4;32942:23;32910:55;32902:92;;;;;-1:-1:-1;;;32902:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33008:23:0;;33026:4;33008:23;;:44;;;33045:7;:5;:7::i;:::-;-1:-1:-1;;;;;33035:17:0;:6;-1:-1:-1;;;;;33035:17:0;;33008:44;33005:792;;;33069:51;33091:6;33099:9;33110:6;33118:1;33069:21;:51::i;:::-;33005:792;;;-1:-1:-1;;;;;33141:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33165:22:0;;;;;;:11;:22;;;;;;;;33164:23;33141:46;33138:659;;;33204:62;33226:6;33234:9;33245:6;33253:12;;33204:21;:62::i;33138:659::-;-1:-1:-1;;;;;33289:19:0;;;;;;:11;:19;;;;;;;;33288:20;:46;;;;-1:-1:-1;;;;;;33312:22:0;;;;;;:11;:22;;;;;;;;33288:46;33284:513;;;33355:60;33375:6;33383:9;33394:6;33402:12;;33355:19;:60::i;33284:513::-;-1:-1:-1;;;;;33438:19:0;;;;;;:11;:19;;;;;;;;33437:20;:47;;;;-1:-1:-1;;;;;;33462:22:0;;;;;;:11;:22;;;;;;;;33461:23;33437:47;33433:364;;;33501:58;33519:6;33527:9;33538:6;33546:12;;33501:17;:58::i;33433:364::-;-1:-1:-1;;;;;33581:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33604:22:0;;;;;;:11;:22;;;;;;;;33581:45;33577:220;;;33643:51;33665:6;33673:9;33684:6;33692:1;33643:21;:51::i;33577:220::-;33727:58;33745:6;33753:9;33764:6;33772:12;;33727:17;:58::i;:::-;32647:1157;;;:::o;21673:1263::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;21735:7:::1;::::0;::::1;;21734:8;21726:35;;;::::0;;-1:-1:-1;;;21726:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21726:35:0;;;;;;;;;;;;;::::1;;21780:11;::::0;:16;;:43:::1;;;21820:3;21800:17;;:23;21780:43;21772:78;;;::::0;;-1:-1:-1;;;21772:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21772:78:0;;;;;;;;;;;;;::::1;;21861:7;:14:::0;;-1:-1:-1;;21861:14:0::1;21871:4;21861:14;::::0;;21886:53:::1;21904:4;21911:12;:10;:12::i;:::-;21925:13;21886:9;:53::i;:::-;21977:14;::::0;22025:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22025:22:0;;;;21950:24:::1;::::0;-1:-1:-1;;;;;21977:14:0;;::::1;::::0;:25:::1;::::0;22025:15;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22025:22:0;21977:119:::1;::::0;;-1:-1:-1;;;;;;21977:119:0::1;::::0;;;;;;-1:-1:-1;;;;;21977:119:0;;::::1;;::::0;::::1;::::0;22079:4:::1;21977:119:::0;;;;;;;;;;22025:22:::1;::::0;21977:119;;;;;;;-1:-1:-1;21977:119:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21977:119:0;22187:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22187:22:0;;;;21977:119;;-1:-1:-1;21977:119:0;;22107:19:::1;::::0;-1:-1:-1;;;;;22187:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;21977:119:::1;::::0;22187:22;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22187:22:0;22272:40:::1;::::0;;-1:-1:-1;;;22272:40:0;;;;22187:22;;-1:-1:-1;22240:21:0::1;::::0;-1:-1:-1;;;;;22272:19:0;::::1;::::0;::::1;::::0;22240:21;;22272:40:::1;::::0;;::::1;::::0;22220:17:::1;::::0;22272:40;;;;;;;;22240:21;22272:19;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;22331:21;22356:1;22331:26;22323:55;;;::::0;;-1:-1:-1;;;22323:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22323:55:0;;;;;;;;;;;;;::::1;;22438:11;::::0;22410:14:::1;::::0;22438:16;22435:240:::1;;22509:12;::::0;22484:38:::1;::::0;:20:::1;:9:::0;22498:5:::1;22484:13;:20::i;:38::-;22471:51;;22537:20;22587:10;22560:24;22578:4;22560:9;:24::i;:::-;:37;22537:60;;22613:50;22631:4;22646:1;22650:12;22613:9;:50::i;:::-;22435:240;;22691:4;-1:-1:-1::0;;;;;22685:20:0::1;;22714:4;22720:9;22685:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;22685:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22741:51:0::1;::::0;-1:-1:-1;22759:4:0::1;22774::::0;22781:10;22741:9:::1;:51::i;:::-;22803:24;::::0;;-1:-1:-1;;;22803:24:0;;22821:4:::1;22803:24;::::0;::::1;::::0;;;-1:-1:-1;;;;;22803:9:0;::::1;::::0;::::1;::::0;:24;;;;;::::1;::::0;;;;;;;;-1:-1:-1;22803:9:0;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;22881:46:0::1;::::0;;-1:-1:-1;;;22881:46:0;;22921:4:::1;22881:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;22838:30:0;::::1;::::0;::::1;::::0;22869:10:::1;::::0;22838:30;;22881:31:::1;::::0;:46;;;;;22803:24:::1;::::0;22881:46;;;;;;;;22838:30;22881:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22881:46:0;22838:90:::1;::::0;;-1:-1:-1;;;;;;22838:90:0::1;::::0;;;;;;-1:-1:-1;;;;;22838:90:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;22881:46:::1;::::0;22838:90;;;;;;;-1:-1:-1;22838:90:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;;;21673:1263:0:o;7585:83::-;7655:5;7648:12;;;;;;;;-1:-1:-1;;7648:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7622:13;;7648:12;;7655:5;;7648:12;;7655:5;7648:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7585:83;:::o;20144:30::-;;;;:::o;29112:161::-;29187:4;29204:39;29213:12;:10;:12::i;:::-;29227:7;29236:6;29204:8;:39::i;:::-;-1:-1:-1;29261:4:0;29112:161;;;;:::o;23675:1761::-;23747:7;23796;:5;:7::i;:::-;-1:-1:-1;;;;;23780:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;23780:23:0;;:51;;;-1:-1:-1;23823:8:0;;-1:-1:-1;;;;;23823:8:0;23807:12;:10;:12::i;:::-;-1:-1:-1;;;;;23807:24:0;;23780:51;23772:85;;;;;-1:-1:-1;;;23772:85:0;;;;;;;;;;;;-1:-1:-1;;;23772:85:0;;;;;;;;;;;;;;;23887:6;;:13;;23898:1;23887:10;:13::i;:::-;23878:6;:22;23919:16;23915:119;;23967:6;;23975:12;;23957:31;;;;;;;;;;;;;;;;-1:-1:-1;24010:12:0;;24003:19;;23915:119;24054:20;24077:58;24092:1;24078:11;:15;:44;;24111:11;24078:44;;;24097:11;24096:12;;24078:44;24077:56;:58::i;:::-;24198:12;;24054:81;;-1:-1:-1;24146:12:0;;24161:50;;:32;24054:81;19913:14;24161:16;:32::i;:::-;:36;;:50::i;:::-;24146:65;;24222:18;24279:1;24265:11;:15;24261:155;;;24310:24;19913:14;24329:4;24310:18;:24::i;:::-;24297:37;;24261:155;;;24380:24;19913:14;24399:4;24380:18;:24::i;:::-;24367:37;;24261:155;24454:1;24440:11;:15;24436:171;;;24487:12;;:30;;24504:12;24487:16;:30::i;:::-;24472:12;:45;24436:171;;;24565:12;;:30;;24582:12;24565:16;:30::i;:::-;24550:12;:45;24436:171;24721:9;24716:219;24740:9;:16;24736:20;;24716:219;;;24805:1;24781:7;:21;24789:9;24799:1;24789:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24789:12:0;24781:21;;;;;;;;;;;;;:25;24778:146;;;24851:57;19863:1;19913:2;:14;24851:37;24877:10;24851:7;:21;24859:9;24869:1;24859:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24859:12:0;24851:21;;;;;;;;;;;;;;:25;:37::i;:57::-;24827:7;:21;24835:9;24845:1;24835:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24835:12:0;24827:21;;;;;;;;;;;;:81;24778:146;24758:3;;24716:219;;;-1:-1:-1;24970:6:0;;24978:12;;24960:31;;;;;;;;;;;;;;;;25003:6;24998:399;25019:12;:19;25015:23;;24998:399;;;25060:21;25084:12;25097:1;25084:15;;;;;;;;;;;;;;;;;;;;;25118:9;;25084:15;;-1:-1:-1;25118:9:0;;25114:272;;;25175:13;;;25190:6;;;25162:35;;;;;;;25175:13;25162:35;;;;;;-1:-1:-1;;25162:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25162:35:0;;25175:13;;-1:-1:-1;;;;;25175:13:0;;25162:35;;25190:6;;25162:35;;;25190:6;25162:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;25148:49;;25221:6;25216:155;;25275:13;;25257:43;;;;;;;;;;;;25275:13;25293:6;;;25257:43;;;25275:13;25257:43;;;;;;-1:-1:-1;;25257:43:0;;;;;;;;;;;25275:13;;-1:-1:-1;;;;;25275:13:0;;25257:43;;;;25293:6;;25257:43;;;;;25293:6;;25257:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25323:28;;;-1:-1:-1;;;25323:28:0;;;;;;;;;;;;-1:-1:-1;;;25323:28:0;;;;;;;;;;;;;;25216:155;25114:272;;-1:-1:-1;25040:3:0;;24998:399;;;;25416:12;;25409:19;;;;;23675:1761;;;;:::o;25662:260::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;25797:116:::1;::::0;;::::1;::::0;::::1;::::0;;25833:4:::1;25797:116:::0;;;-1:-1:-1;;;;;25797:116:0;;::::1;;::::0;;::::1;::::0;;;;;;;;;25779:12:::1;:135:::0;;;;::::1;::::0;;-1:-1:-1;25779:135:0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;;-1:-1:-1::0;;;;;;25779:135:0;::::1;;-1:-1:-1::0;;25779:135:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;25797:116;;25779:135;;::::1;::::0;;;;;;;::::1;::::0;::::1;:::i;:::-;;;;25662:260:::0;;:::o;30241:87::-;30310:10;;30241:87;:::o;30336:390::-;30388:14;30405:12;:10;:12::i;:::-;-1:-1:-1;;;;;30437:19:0;;;;;;:11;:19;;;;;;30388:29;;-1:-1:-1;30437:19:0;;30436:20;30428:77;;;;-1:-1:-1;;;30428:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30517:15;30540:33;30551:7;30560:12;;30540:10;:33::i;:::-;-1:-1:-1;;;;;;;;;30602:15:0;;;;;;:7;:15;;;;;;30516:57;;-1:-1:-1;30602:28:0;;30516:57;30602:19;:28::i;:::-;-1:-1:-1;;;;;30584:15:0;;;;;;:7;:15;;;;;:46;30651:7;;:20;;30663:7;30651:11;:20::i;:::-;30641:7;:30;30695:10;;:23;;30710:7;30695:14;:23::i;:::-;30682:10;:36;-1:-1:-1;;;30336:390:0:o;20281:27::-;;;;:::o;23563:100::-;23643:12;;23563:100;:::o;23055:120::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;23141:12:::1;:26:::0;23055:120::o;29281:313::-;29379:4;29396:36;29406:6;29414:9;29425:6;29396:9;:36::i;:::-;29443:121;29452:6;29460:12;:10;:12::i;:::-;29474:89;29512:6;29474:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29474:19:0;;;;;;:11;:19;;;;;;29494:12;:10;:12::i;:::-;-1:-1:-1;;;;;29474:33:0;;;;;;;;;;;;-1:-1:-1;29474:33:0;;;:89;:37;:89::i;:::-;29443:8;:121::i;:::-;-1:-1:-1;29582:4:0;29281:313;;;;;:::o;19940:27::-;;;;:::o;20016:35::-;;;;:::o;20183:32::-;;;;:::o;31209:253::-;31275:7;31314;;31303;:18;;31295:73;;;;-1:-1:-1;;;31295:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31379:19;31402:10;:8;:10::i;:::-;31379:33;-1:-1:-1;31430:24:0;:7;31379:33;31430:11;:24::i;:::-;31423:31;31209:253;-1:-1:-1;;;31209:253:0:o;7771:83::-;7837:9;;;;7771:83;:::o;20255:19::-;;;;;;:::o;29602:227::-;29699:4;29716:83;29725:12;:10;:12::i;:::-;29739:7;29748:50;29787:10;29748:11;:25;29760:12;:10;:12::i;:::-;-1:-1:-1;;;;;29748:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29748:25:0;;;:34;;;;;;;;;;;:38;:50::i;19980:23::-;;;-1:-1:-1;;;;;19980:23:0;;:::o;20058:31::-;;;;:::o;26074:325::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;26182:12:::1;:19:::0;26174:27;::::1;26166:59;;;::::0;;-1:-1:-1;;;26166:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26166:59:0;;;;;;;;;;;;;::::1;;26250:12;:19:::0;-1:-1:-1;;26250:23:0;26242:31;::::1;26238:123;;;26312:12;26325:19:::0;;-1:-1:-1;;26325:23:0;;;26312:37;::::1;;;;;;;;;;;;;;;26290:12;26303:5;26290:19;;;;;;;;;::::0;;;::::1;::::0;;;:59;;:19:::1;::::0;;::::1;::::0;;::::1;:59:::0;;-1:-1:-1;;26290:59:0::1;;::::0;;::::1;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;;;;;26290:59:0;;::::1;;::::0;;;::::1;-1:-1:-1::0;;;;;26290:59:0::1;::::0;::::1;;::::0;;-1:-1:-1;26290:59:0;;::::1;::::0;;:19;;:59:::1;::::0;;;::::1;::::0;;;;::::1;;::::0;;::::1;-1:-1:-1::0;;26290:59:0;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;26238:123:0::1;26373:12;:18;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;26373:18:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;26373:18:0;;;;::::1;;::::0;::::1;::::0;::::1;:::i;:::-;;;;;26074:325:::0;:::o;20321:41::-;;;-1:-1:-1;;;;;20321:41:0;;:::o;23187:364::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;23313:15:::1;::::0;:20;23305:58:::1;;;::::0;;-1:-1:-1;;;23305:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23384:20;:37:::0;;;;23432:16:::1;:29:::0;23472:20:::1;:37:::0;23540:3:::1;23522:15;:21:::0;23187:364::o;20222:26::-;;;;:::o;26581:246::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;26707:12:::1;:19:::0;26699:27;::::1;26691:80;;;;-1:-1:-1::0;;;26691:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26812:7;26782:12;26795:5;26782:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;;-1:-1:-1;;26782:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;26581:246:0:o;28580:198::-;-1:-1:-1;;;;;28670:20:0;;28646:7;28670:20;;;:11;:20;;;;;;;;28666:49;;;-1:-1:-1;;;;;;28699:16:0;;;;;;:7;:16;;;;;;28692:23;;28666:49;-1:-1:-1;;;;;28753:16:0;;;;;;:7;:16;;;;;;28733:37;;:19;:37::i;3449:148::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;3540:6:::1;::::0;3519:40:::1;::::0;3556:1:::1;::::0;-1:-1:-1;;;;;3540:6:0::1;::::0;3519:40:::1;::::0;3556:1;;3519:40:::1;3570:6;:19:::0;;-1:-1:-1;;;;;;3570:19:0::1;::::0;;3449:148::o;20096:35::-;;;;:::o;20421:905::-;1547:12;;;;;;;;:31;;;1563:15;:13;:15::i;:::-;1547:47;;;-1:-1:-1;1583:11:0;;;;1582:12;1547:47;1539:106;;;;-1:-1:-1;;;1539:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1654:19;1677:12;;;;;;1676:13;1696:83;;;;1725:12;:19;;-1:-1:-1;;;;1725:19:0;;;;;1753:18;1740:4;1753:18;;;1696:83;20496:36:::1;;;;;;;;;;;;;;-1:-1:-1::0;;;20496:36:0::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;20496:36:0::1;;::::0;:12:::1;:36::i;:::-;20543:31;19863:1;20543:14;:31::i;:::-;20585:16;:14;:16::i;:::-;20637:14;20622:12;:29:::0;-1:-1:-1;;20663:7:0::1;:38:::0;20733:12:::1;:10;:12::i;:::-;20722:8;:23:::0;;-1:-1:-1;;;;;;20722:23:0::1;-1:-1:-1::0;;;;;20722:23:0;;;::::1;::::0;;;::::1;::::0;;20781:3:::1;20766:12;:18:::0;20832:7:::1;::::0;20823:4:::1;-1:-1:-1::0;20807:22:0;;;:7:::1;:22;::::0;;;;;;;:32;;;;20891:12:::1;::::0;20855:49;;;;;;;20823:4;;-1:-1:-1;;20855:49:0::1;::::0;;;;;;;;::::1;20944:6;20937:3;:13;20917:17;:33:::0;20961:7:::1;:15:::0;;-1:-1:-1;;20961:15:0::1;::::0;;21001:8:::1;20987:11;:22:::0;21035:4:::1;21020:12;:19:::0;21060:28:::1;21075:12;:10;:12::i;:::-;21060:14;:28::i;:::-;21099:29;21122:4;21099:14;:29::i;:::-;21149:15;:80:::0;;-1:-1:-1;;;;;;21149:80:0;;::::1;21186:42;21149:80;::::0;;;21240:14:::1;:78:::0;;;;::::1;21275:42;21240:78;::::0;;1797:57;;;;1841:5;1826:20;;-1:-1:-1;;1826:20:0;;;1797:57;20421:905;:::o;20369:39::-;;;-1:-1:-1;;;;;20369:39:0;;:::o;3235:79::-;3300:6;;-1:-1:-1;;;;;3300:6:0;3235:79;:::o;26942:137::-;27052:12;:19;26942:137;:::o;7676:87::-;7748:7;7741:14;;;;;;;;-1:-1:-1;;7741:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7715:13;;7741:14;;7748:7;;7741:14;;7748:7;7741:14;;;;;;;;;;;;;;;;;;;;;;;;30734:467;30824:7;30863:12;;30852:7;:23;;30844:67;;;;;-1:-1:-1;;;30844:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30927:17;30922:272;;30962:15;30985:33;30996:7;31005:12;;30985:10;:33::i;:::-;-1:-1:-1;30961:57:0;;-1:-1:-1;31033:14:0;;-1:-1:-1;;;;31033:14:0;30922:272;31082:23;31112:33;31123:7;31132:12;;31112:10;:33::i;:::-;-1:-1:-1;31080:65:0;;-1:-1:-1;31160:22:0;;-1:-1:-1;;;;31160:22:0;19264:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19264:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19264:33:0;;;;-1:-1:-1;;;;;19264:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29837:278::-;29939:4;29956:129;29965:12;:10;:12::i;:::-;29979:7;29988:96;30027:15;29988:96;;;;;;;;;;;;;;;;;:11;:25;30000:12;:10;:12::i;:::-;-1:-1:-1;;;;;29988:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29988:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;28786:167::-;28864:4;28881:42;28891:12;:10;:12::i;:::-;28905:9;28916:6;28881:9;:42::i;30123:110::-;-1:-1:-1;;;;;30205:20:0;30181:4;30205:20;;;:11;:20;;;;;;;;;30123:110::o;28961:143::-;-1:-1:-1;;;;;29069:18:0;;;29042:7;29069:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28961:143::o;22948:95::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;23017:8:::1;:18:::0;;-1:-1:-1;;;;;;23017:18:0::1;-1:-1:-1::0;;;;;23017:18:0;;;::::1;::::0;;;::::1;::::0;;22948:95::o;31470:330::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31550:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31549:21;31541:61;;;::::0;;-1:-1:-1;;;31541:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;31616:16:0;::::1;31635:1;31616:16:::0;;;:7:::1;:16;::::0;;;;;:20;31613:108:::1;;-1:-1:-1::0;;;;;31692:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31672:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31653:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31613:108:::1;-1:-1:-1::0;;;;;31731:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31731:27:0::1;31754:4;31731:27:::0;;::::1;::::0;;;31769:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31769:23:0::1;::::0;;::::1;::::0;;31470:330::o;3605:244::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3694:22:0;::::1;3686:73;;;;-1:-1:-1::0;;;3686:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3796:6;::::0;3775:38:::1;::::0;-1:-1:-1;;;;;3775:38:0;;::::1;::::0;3796:6:::1;::::0;3775:38:::1;::::0;3796:6:::1;::::0;3775:38:::1;3824:6;:17:::0;;-1:-1:-1;;;;;;3824:17:0::1;-1:-1:-1::0;;;;;3824:17:0;;;::::1;::::0;;;::::1;::::0;;3605:244::o;31808:476::-;3372:12;:10;:12::i;:::-;3362:6;;-1:-1:-1;;;;;3362:6:0;;;:22;;;3354:67;;;;;-1:-1:-1;;;3354:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3354:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31887:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31879:60;;;::::0;;-1:-1:-1;;;31879:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31955:9;31950:327;31974:9;:16:::0;31970:20;::::1;31950:327;;;32032:7;-1:-1:-1::0;;;;;32016:23:0::1;:9;32026:1;32016:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32016:12:0::1;:23;32012:254;;;32075:9;32085:16:::0;;-1:-1:-1;;32085:20:0;;;32075:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;32060:9:::1;:12:::0;;-1:-1:-1;;;;;32075:31:0;;::::1;::::0;32070:1;;32060:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32060:46:0::1;-1:-1:-1::0;;;;;32060:46:0;;::::1;;::::0;;32125:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32164:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32164:28:0::1;::::0;;32211:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32211:15:0;;;;;-1:-1:-1;;;;;;32211:15:0::1;::::0;;;;;32245:5:::1;;32012:254;31992:3;;31950:327;;;;31808:476:::0;:::o;4943:192::-;5029:7;5065:12;5057:6;;;;5049:29;;;;-1:-1:-1;;;5049:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5101:5:0;;;4943:192::o;5545:189::-;5631:7;5666:12;5659:5;5651:28;;;;-1:-1:-1;;;5651:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5690:9;5706:1;5702;:5;;;;;;;5545:189;-1:-1:-1;;;;;5545:189:0:o;35434:619::-;35558:15;35575:23;35600:12;35614:23;35639:12;35655:32;35666:7;35675:11;35655:10;:32::i;:::-;-1:-1:-1;;;;;35716:15:0;;;;;;:7;:15;;;;;;35557:130;;-1:-1:-1;35557:130:0;;-1:-1:-1;35557:130:0;;-1:-1:-1;35557:130:0;-1:-1:-1;35557:130:0;-1:-1:-1;35716:28:0;;35736:7;35716:19;:28::i;:::-;-1:-1:-1;;;;;35698:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35773:7;:15;;;;:28;;35793:7;35773:19;:28::i;:::-;-1:-1:-1;;;;;35755:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;35833:18;;;;;:7;:18;;;;;:39;;35856:15;35833:22;:39::i;:::-;-1:-1:-1;;;;;35812:18:0;;;;;;:7;:18;;;;;;;;:60;;;;35904:7;:18;;;;:39;;35927:15;35904:22;:39::i;:::-;-1:-1:-1;;;;;35883:18:0;;;;;;:7;:18;;;;;:60;35962:23;35974:4;35980;35962:11;:23::i;:::-;36018:9;-1:-1:-1;;;;;36001:44:0;36010:6;-1:-1:-1;;;;;36001:44:0;;36029:15;36001:44;;;;;;;;;;;;;;;;;;35434:619;;;;;;;;;:::o;34883:543::-;35007:15;35024:23;35049:12;35063:23;35088:12;35104:32;35115:7;35124:11;35104:10;:32::i;:::-;-1:-1:-1;;;;;35165:15:0;;;;;;:7;:15;;;;;;35006:130;;-1:-1:-1;35006:130:0;;-1:-1:-1;35006:130:0;;-1:-1:-1;35006:130:0;-1:-1:-1;35006:130:0;-1:-1:-1;35165:28:0;;35185:7;35165:19;:28::i;:::-;-1:-1:-1;;;;;35147:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35222:7;:15;;;;:28;;35242:7;35222:19;:28::i;:::-;-1:-1:-1;;;;;35204:15:0;;;;;;;:7;:15;;;;;;:46;;;;35282:18;;;;;;;:39;;35305:15;35282:22;:39::i;34312:563::-;34434:15;34451:23;34476:12;34490:23;34515:12;34531:32;34542:7;34551:11;34531:10;:32::i;:::-;-1:-1:-1;;;;;34592:15:0;;;;;;:7;:15;;;;;;34433:130;;-1:-1:-1;34433:130:0;;-1:-1:-1;34433:130:0;;-1:-1:-1;34433:130:0;-1:-1:-1;34433:130:0;-1:-1:-1;34592:28:0;;34433:130;34592:19;:28::i;33818:486::-;33938:15;33955:23;33980:12;33994:23;34019:12;34035:32;34046:7;34055:11;34035:10;:32::i;:::-;-1:-1:-1;;;;;34096:15:0;;;;;;:7;:15;;;;;;33937:130;;-1:-1:-1;33937:130:0;;-1:-1:-1;33937:130:0;;-1:-1:-1;33937:130:0;-1:-1:-1;33937:130:0;-1:-1:-1;34096:28:0;;33937:130;34096:19;:28::i;2309:106::-;2397:10;2309:106;:::o;32292:347::-;-1:-1:-1;;;;;32395:19:0;;32387:68;;;;-1:-1:-1;;;32387:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32474:21:0;;32466:68;;;;-1:-1:-1;;;32466:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32547:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32599:32;;;;;;;;;;;;;;;;;32292:347;;;:::o;4610:181::-;4668:7;4700:5;;;4724:6;;;;4716:46;;;;;-1:-1:-1;;;4716:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1049:171;1105:7;1142:1;1133:5;:10;;1125:55;;;;;-1:-1:-1;;;1125:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1206:5:0;1049:171::o;27322:1250::-;27420:4;27442:11;27682:4;27676:11;27810:2;27804:4;27800:13;28457:1;28425:13;28333:4;28327:11;28297;28252:1;28222:11;28193:5;28186;28182:17;27839:691;27829:701;27322:1250;-1:-1:-1;;;;;;27322:1250:0:o;36216:445::-;36296:7;36305;36314;36323;36332;36353:23;36378:12;36394:33;36406:7;36415:11;36394;:33::i;:::-;36352:75;;;;36438:19;36461:10;:8;:10::i;:::-;36438:33;;36483:15;36500:23;36525:12;36541:39;36553:7;36562:4;36568:11;36541;:39::i;:::-;36482:98;;;;-1:-1:-1;36482:98:0;;-1:-1:-1;36631:15:0;;-1:-1:-1;36648:4:0;;-1:-1:-1;36216:445:0;;-1:-1:-1;;;;;;;36216:445:0:o;37282:163::-;37323:7;37344:15;37361;37380:19;:17;:19::i;:::-;37343:56;;-1:-1:-1;37343:56:0;-1:-1:-1;37417:20:0;37343:56;;37417:11;:20::i;:::-;37410:27;;;;37282:163;:::o;1865:174::-;1948:4;1994:17;2026:7;1865:174;:::o;7208:177::-;1547:12;;;;;;;;:31;;;1563:15;:13;:15::i;:::-;1547:47;;;-1:-1:-1;1583:11:0;;;;1582:12;1547:47;1539:106;;;;-1:-1:-1;;;1539:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1654:19;1677:12;;;;;;1676:13;1696:83;;;;1725:12;:19;;-1:-1:-1;;;;1725:19:0;;;;;1753:18;1740:4;1753:18;;;1696:83;7304:26:::1;:24;:26::i;:::-;7341:36;7364:4;7370:6;7341:22;:36::i;:::-;1801:14:::0;1797:57;;;1841:5;1826:20;;-1:-1:-1;;1826:20:0;;;7208:177;;;:::o;10373:90::-;10434:9;:21;;-1:-1:-1;;10434:21:0;;;;;;;;;;;;10373:90::o;2892:129::-;1547:12;;;;;;;;:31;;;1563:15;:13;:15::i;:::-;1547:47;;;-1:-1:-1;1583:11:0;;;;1582:12;1547:47;1539:106;;;;-1:-1:-1;;;1539:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1654:19;1677:12;;;;;;1676:13;1696:83;;;;1725:12;:19;;-1:-1:-1;;;;1725:19:0;;;;;1753:18;1740:4;1753:18;;;1696:83;2950:26:::1;:24;:26::i;:::-;2987;:24;:26::i;:::-;1801:14:::0;1797:57;;;1841:5;1826:20;;-1:-1:-1;;1826:20:0;;;2892:129;:::o;36061:147::-;36139:7;;:17;;36151:4;36139:11;:17::i;:::-;36129:7;:27;36180:10;;:20;;36195:4;36180:14;:20::i;:::-;36167:10;:33;-1:-1:-1;;36061:147:0:o;36669:263::-;36750:7;;;36794:35;36823:5;36794:24;:7;36806:11;36794;:24::i;:35::-;36779:50;-1:-1:-1;36840:23:0;36866:17;:7;36779:50;36866:11;:17::i;:::-;36840:43;36919:4;;-1:-1:-1;36669:263:0;;-1:-1:-1;;;;36669:263:0:o;36940:334::-;37035:7;;;;37091:24;:7;37103:11;37091;:24::i;:::-;37073:42;-1:-1:-1;37126:12:0;37141:21;:4;37150:11;37141:8;:21::i;:::-;37126:36;-1:-1:-1;37173:23:0;37199:17;:7;37126:36;37199:11;:17::i;:::-;37235:7;;;;-1:-1:-1;37261:4:0;;-1:-1:-1;36940:334:0;;-1:-1:-1;;;;;36940:334:0:o;37453:581::-;37550:7;;37586:12;;37503:7;;;;;37615:294;37639:9;:16;37635:20;;37615:294;;;37705:7;37681;:21;37689:9;37699:1;37689:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37689:12:0;37681:21;;;;;;;;;;;;;:31;;:66;;;37740:7;37716;:21;37724:9;37734:1;37724:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37724:12:0;37716:21;;;;;;;;;;;;;:31;37681:66;37677:102;;;37757:7;;37766:12;;37749:30;;;;;;;;;37677:102;37804:34;37816:7;:21;37824:9;37834:1;37824:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37824:12:0;37816:21;;;;;;;;;;;;;37804:7;;:11;:34::i;:::-;37794:44;;37863:34;37875:7;:21;37883:9;37893:1;37883:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37883:12:0;37875:21;;;;;;;;;;;;;37863:7;;:11;:34::i;:::-;37853:44;-1:-1:-1;37657:3:0;;37615:294;;;-1:-1:-1;37945:12:0;;37933:7;;:25;;:11;:25::i;:::-;37923:7;:35;37919:71;;;37968:7;;37977:12;;37960:30;;;;;;;;37919:71;38009:7;;-1:-1:-1;38018:7:0;-1:-1:-1;37453:581:0;;;:::o;2236:65::-;1547:12;;;;;;;;:31;;;1563:15;:13;:15::i;:::-;1547:47;;;-1:-1:-1;1583:11:0;;;;1582:12;1547:47;1539:106;;;;-1:-1:-1;;;1539:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1654:19;1677:12;;;;;;1676:13;1696:83;;;;1725:12;:19;;-1:-1:-1;;;;1725:19:0;;;;;1753:18;1740:4;1753:18;;;1801:14;1797:57;;;1841:5;1826:20;;-1:-1:-1;;1826:20:0;;;2236:65;:::o;7393:184::-;1547:12;;;;;;;;:31;;;1563:15;:13;:15::i;:::-;1547:47;;;-1:-1:-1;1583:11:0;;;;1582:12;1547:47;1539:106;;;;-1:-1:-1;;;1539:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1654:19;1677:12;;;;;;1676:13;1696:83;;;;1725:12;:19;;-1:-1:-1;;;;1725:19:0;;;;;1753:18;1740:4;1753:18;;;1696:83;7503:12;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;7526:16:0;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;7553:9:0::1;:14:::0;;-1:-1:-1;;7553:14:0::1;7565:2;7553:14;::::0;;1797:57;;;;1841:5;1826:20;;-1:-1:-1;;1826:20:0;;;7393:184;;;:::o;3029:198::-;1547:12;;;;;;;;:31;;;1563:15;:13;:15::i;:::-;1547:47;;;-1:-1:-1;1583:11:0;;;;1582:12;1547:47;1539:106;;;;-1:-1:-1;;;1539:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1654:19;1677:12;;;;;;1676:13;1696:83;;;;1725:12;:19;;-1:-1:-1;;;;1725:19:0;;;;;1753:18;1740:4;1753:18;;;1696:83;3097:17:::1;3117:12;:10;:12::i;:::-;3140:6;:18:::0;;-1:-1:-1;;;;;;3140:18:0::1;-1:-1:-1::0;;;;;3140:18:0;::::1;::::0;;::::1;::::0;;;3174:43:::1;::::0;3140:18;;-1:-1:-1;3140:18:0;-1:-1:-1;;3174:43:0::1;::::0;-1:-1:-1;;3174:43:0::1;1787:1;1801:14:::0;1797:57;;;1841:5;1826:20;;-1:-1:-1;;1826:20:0;;;3029:198;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://41087cd998ff5462a28efc1159e3ed5d18d41840447bb15c8b71c40a6040222c
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.