ERC-20
Overview
Max Total Supply
10,000,000,000 Dorae
Holders
698
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
536,529.003232284419013767 DoraeValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Dorae
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-19 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { 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; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } function getTime() public view returns (uint256) { return block.timestamp; } function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; 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 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 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Dorae is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; bool public IsOpen; mapping(address => bool) public isAdmin; address payable public marketingAddress = payable(0x028C21b1b27E763828825145AEcE96C5fC8Ef91E); // Marketing Address //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D//0x10ED43C718714eb63d5aA57B78B54704E256024E address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; //0x243cDe27d4756a4BA53B83Eb85b84915CFEC31ca//0x55d398326f99059fF775485246999027B3197955 mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1*10**10 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Dorae"; string private _symbol = "Dorae"; uint8 private _decimals = 18; uint256 public _buyTaxFee = 0; uint256 private _previousBuyTaxFee = _buyTaxFee; uint256 public _buyMarketFee = 30; uint256 private _previousBuyMarketFee = _buyMarketFee; uint256 public _buyLiquidityFee = 0; uint256 private _previousBuyLiquidityFee = _buyLiquidityFee; uint256 public totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); uint256 public _sellTaxFee = 0; uint256 private _previousSellTaxFee = _sellTaxFee; uint256 public _sellMarketFee = 30; uint256 private _previousSellMarketFee = _sellMarketFee; uint256 public _sellLiquidityFee = 0; uint256 private _previousSellLiquidityFee = _sellLiquidityFee; uint256 public totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); uint256 public minimumTokensBeforeSwap = 1*10**7 * 10**18; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool public inSwapAndLiquify; bool private IsAllBool; bool public isBuy; event RewardLiquidityProviders(uint256 tokenAmount); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D//0x10ED43C718714eb63d5aA57B78B54704E256024E uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already 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) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function setIsOpen(bool bools)external onlyOwner(){ require(!IsOpen,"Is opened"); IsOpen=bools; } function setIsAdmin(address admin,bool bools)external onlyOwner(){ isAdmin[admin] = bools; } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(!IsOpen&& from != owner() && to != owner()&&!isAdmin[from]&&!isAdmin[to]){ require(false, "Is not open"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (!inSwapAndLiquify && to == uniswapV2Pair && from!= owner() && to!=owner()) { if (overMinimumTokenBalance) { swapTokens(contractTokenBalance,marketingAddress); } } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } isBuy = true; if(to == address(uniswapV2Pair)){ isBuy = false; } _tokenTransfer(from,to,amount,takeFee); } function swapTokens(uint256 contractTokenBalance,address market) private lockTheSwap { if(contractTokenBalance == 0){ return; } swapTokensForETH(contractTokenBalance,market); } function swapTokensForETH(uint256 tokenAmount,address market) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, market, block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarket(tMarket); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarket(tMarket); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarket(tMarket); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarket(tMarket); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { if(IsAllBool){ _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); }else{ _rOwned[address(this)] = _rOwned[address(this)].add(rFee); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tFee); } } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256,uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity,tMarket, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity,tMarket); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256,uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarket = calculateMarketFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarket); return (tTransferAmount, tFee, tLiquidity,tMarket); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rMarket = tMarket.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarket); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeMarket(uint256 tMarket) private { uint256 currentRate = _getRate(); uint256 rMarket = tMarket.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarket); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarket); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { uint256 tax; if(isBuy){ tax = _buyTaxFee; }else{ tax = _sellTaxFee; } return _amount.mul(tax).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { uint256 liquidityFee; if(isBuy){ liquidityFee = _buyLiquidityFee; }else{ liquidityFee = _sellLiquidityFee; } return _amount.mul(liquidityFee).div( 10**2 ); } function calculateMarketFee(uint256 _amount) private view returns (uint256) { uint256 marketFee; if(isBuy){ marketFee = _buyMarketFee; }else{ marketFee = _sellMarketFee; } return _amount.mul(marketFee).div( 10**2 ); } function removeAllFee() private { _previousBuyTaxFee = _buyTaxFee; _previousBuyLiquidityFee = _buyLiquidityFee; _previousBuyMarketFee = _buyMarketFee; _previousSellTaxFee = _sellTaxFee; _previousSellLiquidityFee = _sellLiquidityFee; _previousSellMarketFee = _sellMarketFee; _sellMarketFee = 0; _sellLiquidityFee = 0; _sellTaxFee = 0; _buyTaxFee = 0; _buyLiquidityFee = 0; _buyMarketFee = 0; } function restoreAllFee() private { _buyTaxFee = _previousBuyTaxFee; _buyLiquidityFee = _previousBuyLiquidityFee; _buyMarketFee = _previousBuyMarketFee; _sellTaxFee = _previousSellTaxFee; _sellLiquidityFee = _previousSellLiquidityFee; _sellMarketFee = _previousSellMarketFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address[] memory accounts,bool bools) public onlyOwner { for(uint i;i<accounts.length;i++){ _isExcludedFromFee[accounts[i]] = bools; } } function setIsAllBool(bool bools) public onlyOwner(){ IsAllBool = bools; } function setTaxFeePercent(uint256 buyTaxFeea,uint256 sellTaxFeea) external onlyOwner() { require(buyTaxFeea <= 30,"Maximum limit exceeded"); require(sellTaxFeea <= 30,"Maximum limit exceeded"); _buyTaxFee = buyTaxFeea; _sellTaxFee = sellTaxFeea; _previousBuyTaxFee = _buyTaxFee; _previousSellTaxFee = _sellTaxFee; totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); } function setLiquidityFeePercent(uint256 buyLiquidityFeea,uint256 sellLiquidityFeea) external onlyOwner() { require(buyLiquidityFeea <= 30,"Maximum limit exceeded"); require(sellLiquidityFeea <= 30,"Maximum limit exceeded"); _buyLiquidityFee = buyLiquidityFeea; _sellLiquidityFee = sellLiquidityFeea; _previousBuyLiquidityFee = _buyLiquidityFee; _previousSellLiquidityFee = _sellLiquidityFee; totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); } function setMarketFeePercent(uint256 buyMarketFeea,uint256 sellMarketFeea) external onlyOwner() { require(buyMarketFeea <= 30,"Maximum limit exceeded"); require(sellMarketFeea <= 30,"Maximum limit exceeded"); _buyMarketFee = buyMarketFeea; _sellMarketFee = sellMarketFeea; _previousBuyMarketFee = _buyMarketFee; _previousSellMarketFee = _sellMarketFee; totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setMarketingAddress(address _marketingAddress) external onlyOwner() { marketingAddress = payable(_marketingAddress); } function getEthAll() public onlyOwner(){ payable(msg.sender).transfer(address(this).balance); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"IsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"bools","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEthAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bool","name":"bools","type":"bool"}],"name":"setIsAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bools","type":"bool"}],"name":"setIsAllBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bools","type":"bool"}],"name":"setIsOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLiquidityFeea","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFeea","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketFeea","type":"uint256"},{"internalType":"uint256","name":"sellMarketFeea","type":"uint256"}],"name":"setMarketFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFeea","type":"uint256"},{"internalType":"uint256","name":"sellTaxFeea","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600580546001600160a01b03191673028c21b1b27e763828825145aece96c5fc8ef91e17905561dead6080526b204fce5e3e25026110000000600c81905561004d905f19610435565b610058905f19610468565b600d55604080518082019091526005815264446f72616560d81b6020820152600f906100849082610513565b50604080518082019091526005815264446f72616560d81b60208201526010906100ae9082610513565b506011805460ff191660129081179091555f908190556013819055601e60148190556015819055601682905560178290556100f591906100ef9082906103ca565b906103ca565b6018555f6019819055601a819055601e601b819055601c819055601d82905581815561012791906100ef9082906103ca565b601f556a084595161401484a000000602055348015610144575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d54335f9081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa1580156101e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020c91906105cd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610257573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027b91906105cd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156102c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e991906105cd565b6001600160a01b0390811660c05281811660a052600554165f9081526009602081905260408220805460ff19166001908117909155916103305f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff1995861617905530815260099092529020805490911660011790556103763390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516103bc91815260200190565b60405180910390a350610606565b5f806103d683856105f3565b90508381101561042c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b5f8261044f57634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561042f5761042f610454565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806104a357607f821691505b6020821081036104c157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561050e57805f5260205f20601f840160051c810160208510156104ec5750805b601f840160051c820191505b8181101561050b575f81556001016104f8565b50505b505050565b81516001600160401b0381111561052c5761052c61047b565b6105408161053a845461048f565b846104c7565b6020601f821160018114610572575f831561055b5750848201515b5f19600385901b1c1916600184901b17845561050b565b5f84815260208120601f198516915b828110156105a15787850151825560209485019460019092019101610581565b50848210156105be57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156105dd575f80fd5b81516001600160a01b038116811461042c575f80fd5b8082018082111561042f5761042f610454565b60805160a05160c051612e186106535f395f818161061801528181611b400152611c2b01525f818161041101528181612242015281816122f9015261233501525f6104eb0152612e185ff3fe608060405260043610610344575f3560e01c8063701cf6f4116101bd578063a5ece941116100f2578063dc44b6a011610092578063efcc52de1161006d578063efcc52de146109ac578063f0f165af146109c1578063f2d58c23146109e0578063f2fde38b146109ff575f80fd5b8063dc44b6a014610934578063dd46706414610949578063dd62ed3e14610968575f80fd5b8063a9aefd35116100cd578063a9aefd35146108cc578063c4d259ad146108eb578063cb85f76f1461090a578063d2d7ad831461091f575f80fd5b8063a5ece9411461087a578063a69df4b514610899578063a9059cbb146108ad575f80fd5b806388f820201161015d57806395d89b411161013857806395d89b411461081f5780639847b14f14610833578063a073d37f14610847578063a457c2d71461085b575f80fd5b806388f82020146107ad5780638da5cb5b146107e4578063906e9dd014610800575f80fd5b8063768dc71011610198578063768dc7101461073257806379fa2103146107605780637d315a2e1461077957806388790a6814610798575f80fd5b8063701cf6f4146106ea57806370a08231146106ff578063715018a61461071e575f80fd5b80632d8381191161029357806349bd5a5e116102335780635342acb41161020e5780635342acb414610678578063557ed1ba146106af578063602bc62b146106c1578063678fc4e6146106d5575f80fd5b806349bd5a5e146106075780634fb908481461063a57806352390c0214610659575f80fd5b80633685d4191161026e5780633685d4191461058b57806339509351146105aa5780633bd5d173146105c95780634549b039146105e8575f80fd5b80632d8381191461052c57806330b263ba1461054b578063313ce5671461056a575f80fd5b806318160ddd116102fe57806323b872dd116102d957806323b872dd1461048d57806324d7806c146104ac57806327c8f835146104da57806328875c161461050d575f80fd5b806318160ddd1461044b578063200a692d1461045f578063220f669614610474575f80fd5b806306fdde031461034f578063085a10cf14610379578063095ea7b31461039a5780630fda3349146103c957806313114a9d146103ec5780631694505e14610400575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b50610363610a1e565b60405161037091906128d9565b60405180910390f35b348015610384575f80fd5b50610398610393366004612922565b610aae565b005b3480156103a5575f80fd5b506103b96103b436600461295a565b610b32565b6040519015158152602001610370565b3480156103d4575f80fd5b506103de60145481565b604051908152602001610370565b3480156103f7575f80fd5b50600e546103de565b34801561040b575f80fd5b506104337f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610370565b348015610456575f80fd5b50600c546103de565b34801561046a575f80fd5b506103de60195481565b34801561047f575f80fd5b506021546103b99060ff1681565b348015610498575f80fd5b506103b96104a7366004612984565b610b48565b3480156104b7575f80fd5b506103b96104c63660046129c2565b60046020525f908152604090205460ff1681565b3480156104e5575f80fd5b506104337f000000000000000000000000000000000000000000000000000000000000000081565b348015610518575f80fd5b506103986105273660046129f1565b610baf565b348015610537575f80fd5b506103de610546366004612ace565b610c37565b348015610556575f80fd5b50610398610565366004612ae5565b610cb9565b348015610575575f80fd5b5060115460405160ff9091168152602001610370565b348015610596575f80fd5b506103986105a53660046129c2565b610d76565b3480156105b5575f80fd5b506103b96105c436600461295a565b610f1a565b3480156105d4575f80fd5b506103986105e3366004612ace565b610f4f565b3480156105f3575f80fd5b506103de610602366004612b05565b611037565b348015610612575f80fd5b506104337f000000000000000000000000000000000000000000000000000000000000000081565b348015610645575f80fd5b506021546103b99062010000900460ff1681565b348015610664575f80fd5b506103986106733660046129c2565b6110c3565b348015610683575f80fd5b506103b96106923660046129c2565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156106ba575f80fd5b50426103de565b3480156106cc575f80fd5b506002546103de565b3480156106e0575f80fd5b506103de601f5481565b3480156106f5575f80fd5b506103de601b5481565b34801561070a575f80fd5b506103de6107193660046129c2565b611210565b348015610729575f80fd5b5061039861126c565b34801561073d575f80fd5b506103b961074c3660046129c2565b60096020525f908152604090205460ff1681565b34801561076b575f80fd5b506003546103b99060ff1681565b348015610784575f80fd5b50610398610793366004612ae5565b6112ca565b3480156107a3575f80fd5b506103de601d5481565b3480156107b8575f80fd5b506103b96107c73660046129c2565b6001600160a01b03165f908152600a602052604090205460ff1690565b3480156107ef575f80fd5b505f546001600160a01b0316610433565b34801561080b575f80fd5b5061039861081a3660046129c2565b61135e565b34801561082a575f80fd5b506103636113a9565b34801561083e575f80fd5b506103986113b8565b348015610852575f80fd5b506020546103de565b348015610866575f80fd5b506103b961087536600461295a565b61140d565b348015610885575f80fd5b50600554610433906001600160a01b031681565b3480156108a4575f80fd5b5061039861145a565b3480156108b8575f80fd5b506103b96108c736600461295a565b61155d565b3480156108d7575f80fd5b506103986108e6366004612922565b611569565b3480156108f6575f80fd5b50610398610905366004612b26565b6115ac565b348015610915575f80fd5b506103de60185481565b34801561092a575f80fd5b506103de60205481565b34801561093f575f80fd5b506103de60165481565b348015610954575f80fd5b50610398610963366004612ace565b6115ff565b348015610973575f80fd5b506103de610982366004612b50565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b3480156109b7575f80fd5b506103de60125481565b3480156109cc575f80fd5b506103986109db366004612ace565b611680565b3480156109eb575f80fd5b506103986109fa366004612ae5565b6116ae565b348015610a0a575f80fd5b50610398610a193660046129c2565b611742565b6060600f8054610a2d90612b87565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5990612b87565b8015610aa45780601f10610a7b57610100808354040283529160200191610aa4565b820191905f5260205f20905b815481529060010190602001808311610a8757829003601f168201915b5050505050905090565b5f546001600160a01b03163314610ae05760405162461bcd60e51b8152600401610ad790612bbf565b60405180910390fd5b60035460ff1615610b1f5760405162461bcd60e51b8152602060048201526009602482015268125cc81bdc195b995960ba1b6044820152606401610ad7565b6003805460ff1916911515919091179055565b5f610b3e338484611816565b5060015b92915050565b5f610b54848484611939565b610ba58433610ba085604051806060016040528060288152602001612d76602891396001600160a01b038a165f9081526008602090815260408083203384529091529020549190611c75565b611816565b5060019392505050565b5f546001600160a01b03163314610bd85760405162461bcd60e51b8152600401610ad790612bbf565b5f5b8251811015610c32578160095f858481518110610bf957610bf9612bf4565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610bda565b505050565b5f600d54821115610c9d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ad7565b5f610ca6611cad565b9050610cb28382611cce565b9392505050565b5f546001600160a01b03163314610ce25760405162461bcd60e51b8152600401610ad790612bbf565b601e821115610d035760405162461bcd60e51b8152600401610ad790612c08565b601e811115610d245760405162461bcd60e51b8152600401610ad790612c08565b601282905560198190556013829055601a819055601654601454610d549190610d4e908590611d0f565b90611d0f565b601855601d54601b54601954610d6f9291610d4e9190611d0f565b601f555050565b5f546001600160a01b03163314610d9f5760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b0381165f908152600a602052604090205460ff16610e065760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b5f5b600b54811015610f1657816001600160a01b0316600b8281548110610e2f57610e2f612bf4565b5f918252602090912001546001600160a01b031603610f0e57600b8054610e5890600190612c4c565b81548110610e6857610e68612bf4565b5f91825260209091200154600b80546001600160a01b039092169183908110610e9357610e93612bf4565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b805480610eea57610eea612c5f565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b600101610e08565b5050565b335f8181526008602090815260408083206001600160a01b03871684529091528120549091610b3e918590610ba09086611d0f565b335f818152600a602052604090205460ff1615610fc35760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ad7565b5f610fcd83611d6d565b5050506001600160a01b0386165f90815260066020526040902054939450610ffa93925084915050611dc0565b6001600160a01b0383165f90815260066020526040902055600d5461101f9082611dc0565b600d55600e5461102f9084611d0f565b600e55505050565b5f600c5483111561108a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad7565b816110a9575f61109984611d6d565b50949650610b4295505050505050565b5f6110b384611d6d565b50939650610b4295505050505050565b5f546001600160a01b031633146110ec5760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b0381165f908152600a602052604090205460ff16156111545760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b6001600160a01b0381165f90815260066020526040902054156111ab576001600160a01b0381165f9081526006602052604090205461119290610c37565b6001600160a01b0382165f908152600760205260409020555b6001600160a01b03165f818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b0381165f908152600a602052604081205460ff161561124b57506001600160a01b03165f9081526007602052604090205490565b6001600160a01b0382165f90815260066020526040902054610b4290610c37565b5f546001600160a01b031633146112955760405162461bcd60e51b8152600401610ad790612bbf565b5f80546040516001600160a01b03909116905f80516020612d9e833981519152908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146112f35760405162461bcd60e51b8152600401610ad790612bbf565b601e8211156113145760405162461bcd60e51b8152600401610ad790612c08565b601e8111156113355760405162461bcd60e51b8152600401610ad790612c08565b6014829055601b8190556015829055601c819055601654601254610d549190610d4e9085611d0f565b5f546001600160a01b031633146113875760405162461bcd60e51b8152600401610ad790612bbf565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060108054610a2d90612b87565b5f546001600160a01b031633146113e15760405162461bcd60e51b8152600401610ad790612bbf565b60405133904780156108fc02915f818181858888f1935050505015801561140a573d5f803e3d5ffd5b50565b5f610b3e3384610ba085604051806060016040528060258152602001612dbe60259139335f9081526008602090815260408083206001600160a01b038d1684529091529020549190611c75565b6001546001600160a01b031633146114c05760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610ad7565b60025442116115115760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad7565b6001545f80546040516001600160a01b0393841693909116915f80516020612d9e83398151915291a36001545f80546001600160a01b0319166001600160a01b03909216919091179055565b5f610b3e338484611939565b5f546001600160a01b031633146115925760405162461bcd60e51b8152600401610ad790612bbf565b602180549115156101000261ff0019909216919091179055565b5f546001600160a01b031633146115d55760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b03919091165f908152600460205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116285760405162461bcd60e51b8152600401610ad790612bbf565b5f8054600180546001600160a01b03199081166001600160a01b038416179091551690556116568142612c73565b6002555f80546040516001600160a01b03909116905f80516020612d9e833981519152908390a350565b5f546001600160a01b031633146116a95760405162461bcd60e51b8152600401610ad790612bbf565b602055565b5f546001600160a01b031633146116d75760405162461bcd60e51b8152600401610ad790612bbf565b601e8211156116f85760405162461bcd60e51b8152600401610ad790612c08565b601e8111156117195760405162461bcd60e51b8152600401610ad790612c08565b6016829055601d8190556017829055601e819055601454601254610d54918491610d4e91611d0f565b5f546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b0381166117d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad7565b5f80546040516001600160a01b03808516939216915f80516020612d9e83398151915291a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad7565b6001600160a01b0382166118d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ad7565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661199d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ad7565b6001600160a01b0382166119ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ad7565b5f8111611a605760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ad7565b60035460ff16158015611a8057505f546001600160a01b03848116911614155b8015611a9957505f546001600160a01b03838116911614155b8015611abd57506001600160a01b0383165f9081526004602052604090205460ff16155b8015611ae157506001600160a01b0382165f9081526004602052604090205460ff16155b15611b1c5760405162461bcd60e51b815260206004820152600b60248201526a24b9903737ba1037b832b760a91b6044820152606401610ad7565b5f611b2630611210565b6020546021549192508210159060ff16158015611b7457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b8015611b8d57505f546001600160a01b03868116911614155b8015611ba657505f546001600160a01b03858116911614155b15611bc8578015611bc857600554611bc89083906001600160a01b0316611e01565b6001600160a01b0385165f9081526009602052604090205460019060ff1680611c0857506001600160a01b0385165f9081526009602052604090205460ff165b15611c1057505f5b6021805462ff00001916620100001790556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690861603611c61576021805462ff0000191690555b611c6d86868684611e2c565b505050505050565b5f8184841115611c985760405162461bcd60e51b8152600401610ad791906128d9565b505f611ca48486612c4c565b95945050505050565b5f805f611cb8611fa6565b9092509050611cc78282611cce565b9250505090565b5f610cb283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612115565b5f80611d1b8385612c73565b905083811015610cb25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad7565b5f805f805f805f805f805f611d818c612141565b93509350935093505f805f611da08f878787611d9b611cad565b612190565b919f509d509b509599509397509195509350505050919395979092949650565b5f610cb283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c75565b6021805460ff191660011790558115611e1e57611e1e82826121ed565b50506021805460ff19169055565b80611e7657611e7660128054601355601680546017556014805460155560198054601a55601d8054601e55601b8054601c555f908190559081905590819055928390559082905555565b6001600160a01b0384165f908152600a602052604090205460ff168015611eb557506001600160a01b0383165f908152600a602052604090205460ff16155b15611eca57611ec58484846123dd565b611f72565b6001600160a01b0384165f908152600a602052604090205460ff16158015611f0957506001600160a01b0383165f908152600a602052604090205460ff165b15611f1957611ec584848461251a565b6001600160a01b0384165f908152600a602052604090205460ff168015611f5757506001600160a01b0383165f908152600a602052604090205460ff165b15611f6757611ec58484846125d1565b611f72848484612653565b80611fa057611fa0601354601255601754601655601554601455601a54601955601e54601d55601c54601b55565b50505050565b600d54600c545f918291825b600b548110156120e5578260065f600b8481548110611fd357611fd3612bf4565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061203b57508160075f600b848154811061201557612015612bf4565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561205157600d54600c54945094505050509091565b61209560065f600b848154811061206a5761206a612bf4565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611dc0565b92506120db60075f600b84815481106120b0576120b0612bf4565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611dc0565b9150600101611fb2565b50600c54600d546120f591611cce565b82101561210c57600d54600c549350935050509091565b90939092509050565b5f81836121355760405162461bcd60e51b8152600401610ad791906128d9565b505f611ca48486612c86565b5f805f805f61214f866126a7565b90505f61215b876126df565b90505f61216788612710565b90505f6121808261217a85818d89611dc0565b90611dc0565b9993985091965094509092505050565b5f80808061219e898661273d565b90505f6121ab898761273d565b90505f6121b8898861273d565b90505f6121c5898961273d565b90505f6121d88261217a85818989611dc0565b949d949c50929a509298505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061222057612220612bf4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561229c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c09190612ca5565b816001815181106122d3576122d3612bf4565b60200260200101906001600160a01b031690816001600160a01b03168152505061231e307f000000000000000000000000000000000000000000000000000000000000000085611816565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123729086905f90869088904290600401612d03565b5f604051808303815f87803b158015612389575f80fd5b505af115801561239b573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a783826040516123d0929190612d3e565b60405180910390a1505050565b5f805f805f805f6123ed88611d6d565b96509650965096509650965096506124318860075f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6001600160a01b038b165f9081526007602090815260408083209390935560069052205461245f9088611dc0565b6001600160a01b03808c165f9081526006602052604080822093909355908b168152205461248d9087611d0f565b6001600160a01b038a165f908152600660205260409020556124ae826127bb565b6124b7816127bb565b6124c1858461283d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161250691815260200190565b60405180910390a350505050505050505050565b5f805f805f805f61252a88611d6d565b965096509650965096509650965061256e8760065f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6001600160a01b03808c165f90815260066020908152604080832094909455918c168152600790915220546125a39085611d0f565b6001600160a01b038a165f9081526007602090815260408083209390935560069052205461248d9087611d0f565b5f805f805f805f6125e188611d6d565b96509650965096509650965096506126258860075f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6001600160a01b038b165f9081526007602090815260408083209390935560069052205461256e9088611dc0565b5f805f805f805f61266388611d6d565b965096509650965096509650965061245f8760065f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6021545f90819062010000900460ff16156126c557506012546126ca565b506019545b610cb260646126d9858461273d565b90611cce565b6021545f90819062010000900460ff16156126fd57506016546126ca565b50601d54610cb260646126d9858461273d565b6021545f90819062010000900460ff161561272e57506014546126ca565b50601b54610cb260646126d985845b5f825f0361274c57505f610b42565b5f6127578385612d5e565b9050826127648583612c86565b14610cb25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ad7565b5f6127c4611cad565b90505f6127d1838361273d565b305f908152600660205260409020549091506127ed9082611d0f565b305f90815260066020908152604080832093909355600a9052205460ff1615610c3257305f908152600760205260409020546128299084611d0f565b305f90815260076020526040902055505050565b602154610100900460ff161561287157600d5461285a9083611dc0565b600d55600e5461286a9082611d0f565b600e555050565b305f9081526006602052604090205461288a9083611d0f565b305f90815260066020908152604080832093909355600a9052205460ff1615610f1657305f908152600760205260409020546128c69082611d0f565b305f908152600760205260409020555050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8035801515811461291d575f80fd5b919050565b5f60208284031215612932575f80fd5b610cb28261290e565b6001600160a01b038116811461140a575f80fd5b803561291d8161293b565b5f806040838503121561296b575f80fd5b82356129768161293b565b946020939093013593505050565b5f805f60608486031215612996575f80fd5b83356129a18161293b565b925060208401356129b18161293b565b929592945050506040919091013590565b5f602082840312156129d2575f80fd5b8135610cb28161293b565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612a02575f80fd5b823567ffffffffffffffff811115612a18575f80fd5b8301601f81018513612a28575f80fd5b803567ffffffffffffffff811115612a4257612a426129dd565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612a6f57612a6f6129dd565b604052918252602081840181019290810188841115612a8c575f80fd5b6020850194505b83851015612ab257612aa48561294f565b815260209485019401612a93565b509450612ac5925050506020840161290e565b90509250929050565b5f60208284031215612ade575f80fd5b5035919050565b5f8060408385031215612af6575f80fd5b50508035926020909101359150565b5f8060408385031215612b16575f80fd5b82359150612ac56020840161290e565b5f8060408385031215612b37575f80fd5b8235612b428161293b565b9150612ac56020840161290e565b5f8060408385031215612b61575f80fd5b8235612b6c8161293b565b91506020830135612b7c8161293b565b809150509250929050565b600181811c90821680612b9b57607f821691505b602082108103612bb957634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b60208082526016908201527513585e1a5b5d5b481b1a5b5a5d08195e18d95959195960521b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b4257610b42612c38565b634e487b7160e01b5f52603160045260245ffd5b80820180821115610b4257610b42612c38565b5f82612ca057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612cb5575f80fd5b8151610cb28161293b565b5f8151808452602084019350602083015f5b82811015612cf95781516001600160a01b0316865260209586019590910190600101612cd2565b5093949350505050565b85815284602082015260a060408201525f612d2160a0830186612cc0565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f612d566040830184612cc0565b949350505050565b8082028115828204841417610b4257610b42612c3856fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f52c5a34e3fc3c99ef65dc881b7dbca1961db4895574739ee2f1321bd573264064736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610344575f3560e01c8063701cf6f4116101bd578063a5ece941116100f2578063dc44b6a011610092578063efcc52de1161006d578063efcc52de146109ac578063f0f165af146109c1578063f2d58c23146109e0578063f2fde38b146109ff575f80fd5b8063dc44b6a014610934578063dd46706414610949578063dd62ed3e14610968575f80fd5b8063a9aefd35116100cd578063a9aefd35146108cc578063c4d259ad146108eb578063cb85f76f1461090a578063d2d7ad831461091f575f80fd5b8063a5ece9411461087a578063a69df4b514610899578063a9059cbb146108ad575f80fd5b806388f820201161015d57806395d89b411161013857806395d89b411461081f5780639847b14f14610833578063a073d37f14610847578063a457c2d71461085b575f80fd5b806388f82020146107ad5780638da5cb5b146107e4578063906e9dd014610800575f80fd5b8063768dc71011610198578063768dc7101461073257806379fa2103146107605780637d315a2e1461077957806388790a6814610798575f80fd5b8063701cf6f4146106ea57806370a08231146106ff578063715018a61461071e575f80fd5b80632d8381191161029357806349bd5a5e116102335780635342acb41161020e5780635342acb414610678578063557ed1ba146106af578063602bc62b146106c1578063678fc4e6146106d5575f80fd5b806349bd5a5e146106075780634fb908481461063a57806352390c0214610659575f80fd5b80633685d4191161026e5780633685d4191461058b57806339509351146105aa5780633bd5d173146105c95780634549b039146105e8575f80fd5b80632d8381191461052c57806330b263ba1461054b578063313ce5671461056a575f80fd5b806318160ddd116102fe57806323b872dd116102d957806323b872dd1461048d57806324d7806c146104ac57806327c8f835146104da57806328875c161461050d575f80fd5b806318160ddd1461044b578063200a692d1461045f578063220f669614610474575f80fd5b806306fdde031461034f578063085a10cf14610379578063095ea7b31461039a5780630fda3349146103c957806313114a9d146103ec5780631694505e14610400575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b50610363610a1e565b60405161037091906128d9565b60405180910390f35b348015610384575f80fd5b50610398610393366004612922565b610aae565b005b3480156103a5575f80fd5b506103b96103b436600461295a565b610b32565b6040519015158152602001610370565b3480156103d4575f80fd5b506103de60145481565b604051908152602001610370565b3480156103f7575f80fd5b50600e546103de565b34801561040b575f80fd5b506104337f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610370565b348015610456575f80fd5b50600c546103de565b34801561046a575f80fd5b506103de60195481565b34801561047f575f80fd5b506021546103b99060ff1681565b348015610498575f80fd5b506103b96104a7366004612984565b610b48565b3480156104b7575f80fd5b506103b96104c63660046129c2565b60046020525f908152604090205460ff1681565b3480156104e5575f80fd5b506104337f000000000000000000000000000000000000000000000000000000000000dead81565b348015610518575f80fd5b506103986105273660046129f1565b610baf565b348015610537575f80fd5b506103de610546366004612ace565b610c37565b348015610556575f80fd5b50610398610565366004612ae5565b610cb9565b348015610575575f80fd5b5060115460405160ff9091168152602001610370565b348015610596575f80fd5b506103986105a53660046129c2565b610d76565b3480156105b5575f80fd5b506103b96105c436600461295a565b610f1a565b3480156105d4575f80fd5b506103986105e3366004612ace565b610f4f565b3480156105f3575f80fd5b506103de610602366004612b05565b611037565b348015610612575f80fd5b506104337f0000000000000000000000003131299ba549173f5c9dd899ffe2d3cd9f9d45ff81565b348015610645575f80fd5b506021546103b99062010000900460ff1681565b348015610664575f80fd5b506103986106733660046129c2565b6110c3565b348015610683575f80fd5b506103b96106923660046129c2565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156106ba575f80fd5b50426103de565b3480156106cc575f80fd5b506002546103de565b3480156106e0575f80fd5b506103de601f5481565b3480156106f5575f80fd5b506103de601b5481565b34801561070a575f80fd5b506103de6107193660046129c2565b611210565b348015610729575f80fd5b5061039861126c565b34801561073d575f80fd5b506103b961074c3660046129c2565b60096020525f908152604090205460ff1681565b34801561076b575f80fd5b506003546103b99060ff1681565b348015610784575f80fd5b50610398610793366004612ae5565b6112ca565b3480156107a3575f80fd5b506103de601d5481565b3480156107b8575f80fd5b506103b96107c73660046129c2565b6001600160a01b03165f908152600a602052604090205460ff1690565b3480156107ef575f80fd5b505f546001600160a01b0316610433565b34801561080b575f80fd5b5061039861081a3660046129c2565b61135e565b34801561082a575f80fd5b506103636113a9565b34801561083e575f80fd5b506103986113b8565b348015610852575f80fd5b506020546103de565b348015610866575f80fd5b506103b961087536600461295a565b61140d565b348015610885575f80fd5b50600554610433906001600160a01b031681565b3480156108a4575f80fd5b5061039861145a565b3480156108b8575f80fd5b506103b96108c736600461295a565b61155d565b3480156108d7575f80fd5b506103986108e6366004612922565b611569565b3480156108f6575f80fd5b50610398610905366004612b26565b6115ac565b348015610915575f80fd5b506103de60185481565b34801561092a575f80fd5b506103de60205481565b34801561093f575f80fd5b506103de60165481565b348015610954575f80fd5b50610398610963366004612ace565b6115ff565b348015610973575f80fd5b506103de610982366004612b50565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b3480156109b7575f80fd5b506103de60125481565b3480156109cc575f80fd5b506103986109db366004612ace565b611680565b3480156109eb575f80fd5b506103986109fa366004612ae5565b6116ae565b348015610a0a575f80fd5b50610398610a193660046129c2565b611742565b6060600f8054610a2d90612b87565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5990612b87565b8015610aa45780601f10610a7b57610100808354040283529160200191610aa4565b820191905f5260205f20905b815481529060010190602001808311610a8757829003601f168201915b5050505050905090565b5f546001600160a01b03163314610ae05760405162461bcd60e51b8152600401610ad790612bbf565b60405180910390fd5b60035460ff1615610b1f5760405162461bcd60e51b8152602060048201526009602482015268125cc81bdc195b995960ba1b6044820152606401610ad7565b6003805460ff1916911515919091179055565b5f610b3e338484611816565b5060015b92915050565b5f610b54848484611939565b610ba58433610ba085604051806060016040528060288152602001612d76602891396001600160a01b038a165f9081526008602090815260408083203384529091529020549190611c75565b611816565b5060019392505050565b5f546001600160a01b03163314610bd85760405162461bcd60e51b8152600401610ad790612bbf565b5f5b8251811015610c32578160095f858481518110610bf957610bf9612bf4565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610bda565b505050565b5f600d54821115610c9d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ad7565b5f610ca6611cad565b9050610cb28382611cce565b9392505050565b5f546001600160a01b03163314610ce25760405162461bcd60e51b8152600401610ad790612bbf565b601e821115610d035760405162461bcd60e51b8152600401610ad790612c08565b601e811115610d245760405162461bcd60e51b8152600401610ad790612c08565b601282905560198190556013829055601a819055601654601454610d549190610d4e908590611d0f565b90611d0f565b601855601d54601b54601954610d6f9291610d4e9190611d0f565b601f555050565b5f546001600160a01b03163314610d9f5760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b0381165f908152600a602052604090205460ff16610e065760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b5f5b600b54811015610f1657816001600160a01b0316600b8281548110610e2f57610e2f612bf4565b5f918252602090912001546001600160a01b031603610f0e57600b8054610e5890600190612c4c565b81548110610e6857610e68612bf4565b5f91825260209091200154600b80546001600160a01b039092169183908110610e9357610e93612bf4565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b805480610eea57610eea612c5f565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b600101610e08565b5050565b335f8181526008602090815260408083206001600160a01b03871684529091528120549091610b3e918590610ba09086611d0f565b335f818152600a602052604090205460ff1615610fc35760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ad7565b5f610fcd83611d6d565b5050506001600160a01b0386165f90815260066020526040902054939450610ffa93925084915050611dc0565b6001600160a01b0383165f90815260066020526040902055600d5461101f9082611dc0565b600d55600e5461102f9084611d0f565b600e55505050565b5f600c5483111561108a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad7565b816110a9575f61109984611d6d565b50949650610b4295505050505050565b5f6110b384611d6d565b50939650610b4295505050505050565b5f546001600160a01b031633146110ec5760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b0381165f908152600a602052604090205460ff16156111545760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b6001600160a01b0381165f90815260066020526040902054156111ab576001600160a01b0381165f9081526006602052604090205461119290610c37565b6001600160a01b0382165f908152600760205260409020555b6001600160a01b03165f818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b0381165f908152600a602052604081205460ff161561124b57506001600160a01b03165f9081526007602052604090205490565b6001600160a01b0382165f90815260066020526040902054610b4290610c37565b5f546001600160a01b031633146112955760405162461bcd60e51b8152600401610ad790612bbf565b5f80546040516001600160a01b03909116905f80516020612d9e833981519152908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146112f35760405162461bcd60e51b8152600401610ad790612bbf565b601e8211156113145760405162461bcd60e51b8152600401610ad790612c08565b601e8111156113355760405162461bcd60e51b8152600401610ad790612c08565b6014829055601b8190556015829055601c819055601654601254610d549190610d4e9085611d0f565b5f546001600160a01b031633146113875760405162461bcd60e51b8152600401610ad790612bbf565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060108054610a2d90612b87565b5f546001600160a01b031633146113e15760405162461bcd60e51b8152600401610ad790612bbf565b60405133904780156108fc02915f818181858888f1935050505015801561140a573d5f803e3d5ffd5b50565b5f610b3e3384610ba085604051806060016040528060258152602001612dbe60259139335f9081526008602090815260408083206001600160a01b038d1684529091529020549190611c75565b6001546001600160a01b031633146114c05760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610ad7565b60025442116115115760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad7565b6001545f80546040516001600160a01b0393841693909116915f80516020612d9e83398151915291a36001545f80546001600160a01b0319166001600160a01b03909216919091179055565b5f610b3e338484611939565b5f546001600160a01b031633146115925760405162461bcd60e51b8152600401610ad790612bbf565b602180549115156101000261ff0019909216919091179055565b5f546001600160a01b031633146115d55760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b03919091165f908152600460205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116285760405162461bcd60e51b8152600401610ad790612bbf565b5f8054600180546001600160a01b03199081166001600160a01b038416179091551690556116568142612c73565b6002555f80546040516001600160a01b03909116905f80516020612d9e833981519152908390a350565b5f546001600160a01b031633146116a95760405162461bcd60e51b8152600401610ad790612bbf565b602055565b5f546001600160a01b031633146116d75760405162461bcd60e51b8152600401610ad790612bbf565b601e8211156116f85760405162461bcd60e51b8152600401610ad790612c08565b601e8111156117195760405162461bcd60e51b8152600401610ad790612c08565b6016829055601d8190556017829055601e819055601454601254610d54918491610d4e91611d0f565b5f546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610ad790612bbf565b6001600160a01b0381166117d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad7565b5f80546040516001600160a01b03808516939216915f80516020612d9e83398151915291a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad7565b6001600160a01b0382166118d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ad7565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661199d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ad7565b6001600160a01b0382166119ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ad7565b5f8111611a605760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ad7565b60035460ff16158015611a8057505f546001600160a01b03848116911614155b8015611a9957505f546001600160a01b03838116911614155b8015611abd57506001600160a01b0383165f9081526004602052604090205460ff16155b8015611ae157506001600160a01b0382165f9081526004602052604090205460ff16155b15611b1c5760405162461bcd60e51b815260206004820152600b60248201526a24b9903737ba1037b832b760a91b6044820152606401610ad7565b5f611b2630611210565b6020546021549192508210159060ff16158015611b7457507f0000000000000000000000003131299ba549173f5c9dd899ffe2d3cd9f9d45ff6001600160a01b0316846001600160a01b0316145b8015611b8d57505f546001600160a01b03868116911614155b8015611ba657505f546001600160a01b03858116911614155b15611bc8578015611bc857600554611bc89083906001600160a01b0316611e01565b6001600160a01b0385165f9081526009602052604090205460019060ff1680611c0857506001600160a01b0385165f9081526009602052604090205460ff165b15611c1057505f5b6021805462ff00001916620100001790556001600160a01b037f0000000000000000000000003131299ba549173f5c9dd899ffe2d3cd9f9d45ff811690861603611c61576021805462ff0000191690555b611c6d86868684611e2c565b505050505050565b5f8184841115611c985760405162461bcd60e51b8152600401610ad791906128d9565b505f611ca48486612c4c565b95945050505050565b5f805f611cb8611fa6565b9092509050611cc78282611cce565b9250505090565b5f610cb283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612115565b5f80611d1b8385612c73565b905083811015610cb25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad7565b5f805f805f805f805f805f611d818c612141565b93509350935093505f805f611da08f878787611d9b611cad565b612190565b919f509d509b509599509397509195509350505050919395979092949650565b5f610cb283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c75565b6021805460ff191660011790558115611e1e57611e1e82826121ed565b50506021805460ff19169055565b80611e7657611e7660128054601355601680546017556014805460155560198054601a55601d8054601e55601b8054601c555f908190559081905590819055928390559082905555565b6001600160a01b0384165f908152600a602052604090205460ff168015611eb557506001600160a01b0383165f908152600a602052604090205460ff16155b15611eca57611ec58484846123dd565b611f72565b6001600160a01b0384165f908152600a602052604090205460ff16158015611f0957506001600160a01b0383165f908152600a602052604090205460ff165b15611f1957611ec584848461251a565b6001600160a01b0384165f908152600a602052604090205460ff168015611f5757506001600160a01b0383165f908152600a602052604090205460ff165b15611f6757611ec58484846125d1565b611f72848484612653565b80611fa057611fa0601354601255601754601655601554601455601a54601955601e54601d55601c54601b55565b50505050565b600d54600c545f918291825b600b548110156120e5578260065f600b8481548110611fd357611fd3612bf4565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061203b57508160075f600b848154811061201557612015612bf4565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561205157600d54600c54945094505050509091565b61209560065f600b848154811061206a5761206a612bf4565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611dc0565b92506120db60075f600b84815481106120b0576120b0612bf4565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611dc0565b9150600101611fb2565b50600c54600d546120f591611cce565b82101561210c57600d54600c549350935050509091565b90939092509050565b5f81836121355760405162461bcd60e51b8152600401610ad791906128d9565b505f611ca48486612c86565b5f805f805f61214f866126a7565b90505f61215b876126df565b90505f61216788612710565b90505f6121808261217a85818d89611dc0565b90611dc0565b9993985091965094509092505050565b5f80808061219e898661273d565b90505f6121ab898761273d565b90505f6121b8898861273d565b90505f6121c5898961273d565b90505f6121d88261217a85818989611dc0565b949d949c50929a509298505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061222057612220612bf4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561229c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c09190612ca5565b816001815181106122d3576122d3612bf4565b60200260200101906001600160a01b031690816001600160a01b03168152505061231e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611816565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123729086905f90869088904290600401612d03565b5f604051808303815f87803b158015612389575f80fd5b505af115801561239b573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a783826040516123d0929190612d3e565b60405180910390a1505050565b5f805f805f805f6123ed88611d6d565b96509650965096509650965096506124318860075f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6001600160a01b038b165f9081526007602090815260408083209390935560069052205461245f9088611dc0565b6001600160a01b03808c165f9081526006602052604080822093909355908b168152205461248d9087611d0f565b6001600160a01b038a165f908152600660205260409020556124ae826127bb565b6124b7816127bb565b6124c1858461283d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161250691815260200190565b60405180910390a350505050505050505050565b5f805f805f805f61252a88611d6d565b965096509650965096509650965061256e8760065f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6001600160a01b03808c165f90815260066020908152604080832094909455918c168152600790915220546125a39085611d0f565b6001600160a01b038a165f9081526007602090815260408083209390935560069052205461248d9087611d0f565b5f805f805f805f6125e188611d6d565b96509650965096509650965096506126258860075f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6001600160a01b038b165f9081526007602090815260408083209390935560069052205461256e9088611dc0565b5f805f805f805f61266388611d6d565b965096509650965096509650965061245f8760065f8d6001600160a01b03166001600160a01b031681526020019081526020015f2054611dc090919063ffffffff16565b6021545f90819062010000900460ff16156126c557506012546126ca565b506019545b610cb260646126d9858461273d565b90611cce565b6021545f90819062010000900460ff16156126fd57506016546126ca565b50601d54610cb260646126d9858461273d565b6021545f90819062010000900460ff161561272e57506014546126ca565b50601b54610cb260646126d985845b5f825f0361274c57505f610b42565b5f6127578385612d5e565b9050826127648583612c86565b14610cb25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ad7565b5f6127c4611cad565b90505f6127d1838361273d565b305f908152600660205260409020549091506127ed9082611d0f565b305f90815260066020908152604080832093909355600a9052205460ff1615610c3257305f908152600760205260409020546128299084611d0f565b305f90815260076020526040902055505050565b602154610100900460ff161561287157600d5461285a9083611dc0565b600d55600e5461286a9082611d0f565b600e555050565b305f9081526006602052604090205461288a9083611d0f565b305f90815260066020908152604080832093909355600a9052205460ff1615610f1657305f908152600760205260409020546128c69082611d0f565b305f908152600760205260409020555050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8035801515811461291d575f80fd5b919050565b5f60208284031215612932575f80fd5b610cb28261290e565b6001600160a01b038116811461140a575f80fd5b803561291d8161293b565b5f806040838503121561296b575f80fd5b82356129768161293b565b946020939093013593505050565b5f805f60608486031215612996575f80fd5b83356129a18161293b565b925060208401356129b18161293b565b929592945050506040919091013590565b5f602082840312156129d2575f80fd5b8135610cb28161293b565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612a02575f80fd5b823567ffffffffffffffff811115612a18575f80fd5b8301601f81018513612a28575f80fd5b803567ffffffffffffffff811115612a4257612a426129dd565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612a6f57612a6f6129dd565b604052918252602081840181019290810188841115612a8c575f80fd5b6020850194505b83851015612ab257612aa48561294f565b815260209485019401612a93565b509450612ac5925050506020840161290e565b90509250929050565b5f60208284031215612ade575f80fd5b5035919050565b5f8060408385031215612af6575f80fd5b50508035926020909101359150565b5f8060408385031215612b16575f80fd5b82359150612ac56020840161290e565b5f8060408385031215612b37575f80fd5b8235612b428161293b565b9150612ac56020840161290e565b5f8060408385031215612b61575f80fd5b8235612b6c8161293b565b91506020830135612b7c8161293b565b809150509250929050565b600181811c90821680612b9b57607f821691505b602082108103612bb957634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b60208082526016908201527513585e1a5b5d5b481b1a5b5a5d08195e18d95959195960521b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b4257610b42612c38565b634e487b7160e01b5f52603160045260245ffd5b80820180821115610b4257610b42612c38565b5f82612ca057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612cb5575f80fd5b8151610cb28161293b565b5f8151808452602084019350602083015f5b82811015612cf95781516001600160a01b0316865260209586019590910190600101612cd2565b5093949350505050565b85815284602082015260a060408201525f612d2160a0830186612cc0565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f612d566040830184612cc0565b949350505050565b8082028115828204841417610b4257610b42612c3856fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f52c5a34e3fc3c99ef65dc881b7dbca1961db4895574739ee2f1321bd573264064736f6c634300081a0033
Deployed Bytecode Sourcemap
15149:22888:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18667:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23209:114;;;;;;;;;;-1:-1:-1;23209:114:0;;;;;:::i;:::-;;:::i;:::-;;19579:161;;;;;;;;;;-1:-1:-1;19579:161:0;;;;;:::i;:::-;;:::i;:::-;;;1599:14:1;;1592:22;1574:41;;1562:2;1547:18;19579:161:0;1434:187:1;16468:33:0;;;;;;;;;;;;;;;;;;;1772:25:1;;;1760:2;1745:18;16468:33:0;1626:177:1;20706:87:0;;;;;;;;;;-1:-1:-1;20775:10:0;;20706:87;;17268:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1999:32:1;;;1981:51;;1969:2;1954:18;17268:51:0;1808:230:1;18944:95:0;;;;;;;;;;-1:-1:-1;19024:7:0;;18944:95;;16784:30;;;;;;;;;;;;;;;;17371:28;;;;;;;;;;-1:-1:-1;17371:28:0;;;;;;;;19754:313;;;;;;;;;;-1:-1:-1;19754:313:0;;;;;:::i;:::-;;:::i;15293:39::-;;;;;;;;;;-1:-1:-1;15293:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15554:81;;;;;;;;;;;;;;;35281:196;;;;;;;;;;-1:-1:-1;35281:196:0;;;;;:::i;:::-;;:::i;21775:253::-;;;;;;;;;;-1:-1:-1;21775:253:0;;;;;:::i;:::-;;:::i;35581:536::-;;;;;;;;;;-1:-1:-1;35581:536:0;;;;;:::i;:::-;;:::i;18853:83::-;;;;;;;;;;-1:-1:-1;18919:9:0;;18853:83;;18919:9;;;;5084:36:1;;5072:2;5057:18;18853:83:0;4942:184:1;22379:479:0;;;;;;;;;;-1:-1:-1;22379:479:0;;;;;:::i;:::-;;:::i;20075:218::-;;;;;;;;;;-1:-1:-1;20075:218:0;;;;;:::i;:::-;;:::i;20939:378::-;;;;;;;;;;-1:-1:-1;20939:378:0;;;;;:::i;:::-;;:::i;21329:438::-;;;;;;;;;;-1:-1:-1;21329:438:0;;;;;:::i;:::-;;:::i;17326:38::-;;;;;;;;;;;;;;;17435:17;;;;;;;;;;-1:-1:-1;17435:17:0;;;;;;;;;;;22036:335;;;;;;;;;;-1:-1:-1;22036:335:0;;;;;:::i;:::-;;:::i;35146:123::-;;;;;;;;;;-1:-1:-1;35146:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;35234:27:0;35210:4;35234:27;;;:18;:27;;;;;;;;;35146:123;6539:90;;;;;;;;;;-1:-1:-1;6606:15:0;6539:90;;6437;;;;;;;;;;-1:-1:-1;6510:9:0;;6437:90;;17109:87;;;;;;;;;;;;;;;;16883:34;;;;;;;;;;;;;;;;19047:198;;;;;;;;;;-1:-1:-1;19047:198:0;;;;;:::i;:::-;;:::i;6029:148::-;;;;;;;;;;;;;:::i;15916:52::-;;;;;;;;;;-1:-1:-1;15916:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15266:18;;;;;;;;;;-1:-1:-1;15266:18:0;;;;;;;;36757:589;;;;;;;;;;-1:-1:-1;36757:589:0;;;;;:::i;:::-;;:::i;16992:36::-;;;;;;;;;;;;;;;;20578:120;;;;;;;;;;-1:-1:-1;20578:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20670:20:0;20646:4;20670:20;;;:11;:20;;;;;;;;;20578:120;5804:79;;;;;;;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;5869:6:0;5804:79;;37540:141;;;;;;;;;;-1:-1:-1;37540:141:0;;;;;:::i;:::-;;:::i;18758:87::-;;;;;;;;;;;;;:::i;37693:109::-;;;;;;;;;;;;;:::i;20805:120::-;;;;;;;;;;-1:-1:-1;20894:23:0;;20805:120;;20301:269;;;;;;;;;;-1:-1:-1;20301:269:0;;;;;:::i;:::-;;:::i;15339:93::-;;;;;;;;;;-1:-1:-1;15339:93:0;;;;-1:-1:-1;;;;;15339:93:0;;;6875:305;;;;;;;;;;;;;:::i;19253:167::-;;;;;;;;;;-1:-1:-1;19253:167:0;;;;;:::i;:::-;;:::i;35483:88::-;;;;;;;;;;-1:-1:-1;35483:88:0;;;;;:::i;:::-;;:::i;23330:102::-;;;;;;;;;;-1:-1:-1;23330:102:0;;;;;:::i;:::-;;:::i;16688:83::-;;;;;;;;;;;;;;;;17203:57;;;;;;;;;;;;;;;;16574:35;;;;;;;;;;;;;;;;6637:226;;;;;;;;;;-1:-1:-1;6637:226:0;;;;;:::i;:::-;;:::i;19428:143::-;;;;;;;;;;-1:-1:-1;19428:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19536:18:0;;;19509:7;19536:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19428:143;16372:29;;;;;;;;;;;;;;;;37362:166;;;;;;;;;;-1:-1:-1;37362:166:0;;;;;:::i;:::-;;:::i;36129:614::-;;;;;;;;;;-1:-1:-1;36129:614:0;;;;;:::i;:::-;;:::i;6185:244::-;;;;;;;;;;-1:-1:-1;6185:244:0;;;;;:::i;:::-;;:::i;18667:83::-;18704:13;18737:5;18730:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18667:83;:::o;23209:114::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;;;;;;;;;23277:6:::1;::::0;::::1;;23276:7;23268:28;;;::::0;-1:-1:-1;;;23268:28:0;;7315:2:1;23268:28:0::1;::::0;::::1;7297:21:1::0;7354:1;7334:18;;;7327:29;-1:-1:-1;;;7372:18:1;;;7365:39;7421:18;;23268:28:0::1;7113:332:1::0;23268:28:0::1;23305:6;:12:::0;;-1:-1:-1;;23305:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23209:114::o;19579:161::-;19654:4;19671:39;196:10;19694:7;19703:6;19671:8;:39::i;:::-;-1:-1:-1;19728:4:0;19579:161;;;;;:::o;19754:313::-;19852:4;19869:36;19879:6;19887:9;19898:6;19869:9;:36::i;:::-;19916:121;19925:6;196:10;19947:89;19985:6;19947:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19947:19:0;;;;;;:11;:19;;;;;;;;196:10;19947:33;;;;;;;;;;:37;:89::i;:::-;19916:8;:121::i;:::-;-1:-1:-1;20055:4:0;19754:313;;;;;:::o;35281:196::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;35375:6:::1;35371:99;35384:8;:15;35382:1;:17;35371:99;;;35453:5;35419:18;:31;35438:8;35447:1;35438:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;35419:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;35419:31:0;:39;;-1:-1:-1;;35419:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;35400:3:0::1;35371:99;;;;35281:196:::0;;:::o;21775:253::-;21841:7;21880;;21869;:18;;21861:73;;;;-1:-1:-1;;;21861:73:0;;7784:2:1;21861:73:0;;;7766:21:1;7823:2;7803:18;;;7796:30;7862:34;7842:18;;;7835:62;-1:-1:-1;;;7913:18:1;;;7906:40;7963:19;;21861:73:0;7582:406:1;21861:73:0;21945:19;21968:10;:8;:10::i;:::-;21945:33;-1:-1:-1;21996:24:0;:7;21945:33;21996:11;:24::i;:::-;21989:31;21775:253;-1:-1:-1;;;21775:253:0:o;35581:536::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;35701:2:::1;35687:10;:16;;35679:50;;;;-1:-1:-1::0;;;35679:50:0::1;;;;;;;:::i;:::-;35763:2;35748:11;:17;;35740:51;;;;-1:-1:-1::0;;;35740:51:0::1;;;;;;;:::i;:::-;35802:10;:23:::0;;;35836:11:::1;:25:::0;;;35872:18:::1;:31:::0;;;35914:19:::1;:33:::0;;;36009:16:::1;::::0;35990:13:::1;::::0;35975:51:::1;::::0;36009:16;35975:29:::1;::::0;35815:10;;35975:14:::1;:29::i;:::-;:33:::0;::::1;:51::i;:::-;35958:14;:68:::0;36091:17:::1;::::0;36071:14:::1;::::0;36055:11:::1;::::0;:54:::1;::::0;36091:17;36055:31:::1;::::0;:11;:15:::1;:31::i;:54::-;36037:15;:72:::0;-1:-1:-1;;35581:536:0:o;22379:479::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22461:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22453:60;;;::::0;-1:-1:-1;;;22453:60:0;;8546:2:1;22453:60:0::1;::::0;::::1;8528:21:1::0;8585:2;8565:18;;;8558:30;8624:29;8604:18;;;8597:57;8671:18;;22453:60:0::1;8344:351:1::0;22453:60:0::1;22529:9;22524:327;22548:9;:16:::0;22544:20;::::1;22524:327;;;22606:7;-1:-1:-1::0;;;;;22590:23:0::1;:9;22600:1;22590:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22590:12:0::1;:23:::0;22586:254:::1;;22649:9;22659:16:::0;;:20:::1;::::0;22678:1:::1;::::0;22659:20:::1;:::i;:::-;22649:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22634:9:::1;:12:::0;;-1:-1:-1;;;;;22649:31:0;;::::1;::::0;22644:1;;22634:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22634:46:0::1;-1:-1:-1::0;;;;;22634:46:0;;::::1;;::::0;;22699:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22738:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22738:28:0::1;::::0;;22785:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22785:15:0;;;;;-1:-1:-1;;;;;;22785:15:0::1;::::0;;;;;22524:327:::1;22379:479:::0;:::o;22586:254::-:1;22566:3;;22524:327;;;;22379:479:::0;:::o;20075:218::-;196:10;20163:4;20212:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20212:34:0;;;;;;;;;;20163:4;;20180:83;;20203:7;;20212:50;;20251:10;20212:38;:50::i;20939:378::-;196:10;20991:14;21040:19;;;:11;:19;;;;;;;;21039:20;21031:77;;;;-1:-1:-1;;;21031:77:0;;9299:2:1;21031:77:0;;;9281:21:1;9338:2;9318:18;;;9311:30;9377:34;9357:18;;;9350:62;-1:-1:-1;;;9428:18:1;;;9421:42;9480:19;;21031:77:0;9097:408:1;21031:77:0;21120:15;21145:19;21156:7;21145:10;:19::i;:::-;-1:-1:-1;;;;;;;;21193:15:0;;;;;;:7;:15;;;;;;21119:45;;-1:-1:-1;21193:28:0;;:15;-1:-1:-1;21119:45:0;;-1:-1:-1;;21193:19:0;:28::i;:::-;-1:-1:-1;;;;;21175:15:0;;;;;;:7;:15;;;;;:46;21242:7;;:20;;21254:7;21242:11;:20::i;:::-;21232:7;:30;21286:10;;:23;;21301:7;21286:14;:23::i;:::-;21273:10;:36;-1:-1:-1;;;20939:378:0:o;21329:438::-;21419:7;21458;;21447;:18;;21439:62;;;;-1:-1:-1;;;21439:62:0;;9712:2:1;21439:62:0;;;9694:21:1;9751:2;9731:18;;;9724:30;9790:33;9770:18;;;9763:61;9841:18;;21439:62:0;9510:355:1;21439:62:0;21517:17;21512:248;;21552:15;21577:19;21588:7;21577:10;:19::i;:::-;-1:-1:-1;21551:45:0;;-1:-1:-1;21611:14:0;;-1:-1:-1;;;;;;21611:14:0;21512:248;21660:23;21692:19;21703:7;21692:10;:19::i;:::-;-1:-1:-1;21658:53:0;;-1:-1:-1;21726:22:0;;-1:-1:-1;;;;;;21726:22:0;22036:335;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22121:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22120:21;22112:61;;;::::0;-1:-1:-1;;;22112:61:0;;8546:2:1;22112:61:0::1;::::0;::::1;8528:21:1::0;8585:2;8565:18;;;8558:30;8624:29;8604:18;;;8597:57;8671:18;;22112:61:0::1;8344:351:1::0;22112:61:0::1;-1:-1:-1::0;;;;;22187:16:0;::::1;22206:1;22187:16:::0;;;:7:::1;:16;::::0;;;;;:20;22184:108:::1;;-1:-1:-1::0;;;;;22263:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22243:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22224:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22184:108:::1;-1:-1:-1::0;;;;;22302:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22302:27:0::1;22325:4;22302:27:::0;;::::1;::::0;;;22340:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22340:23:0::1;::::0;;::::1;::::0;;22036:335::o;19047:198::-;-1:-1:-1;;;;;19137:20:0;;19113:7;19137:20;;;:11;:20;;;;;;;;19133:49;;;-1:-1:-1;;;;;;19166:16:0;;;;;:7;:16;;;;;;;19047:198::o;19133:49::-;-1:-1:-1;;;;;19220:16:0;;;;;;:7;:16;;;;;;19200:37;;:19;:37::i;6029:148::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;6136:1:::1;6120:6:::0;;6099:40:::1;::::0;-1:-1:-1;;;;;6120:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6099:40:0;6136:1;;6099:40:::1;6167:1;6150:19:::0;;-1:-1:-1;;;;;;6150:19:0::1;::::0;;6029:148::o;36757:589::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;36893:2:::1;36876:13;:19;;36868:53;;;;-1:-1:-1::0;;;36868:53:0::1;;;;;;;:::i;:::-;36960:2;36942:14;:20;;36934:54;;;;-1:-1:-1::0;;;36934:54:0::1;;;;;;;:::i;:::-;37001:13;:29:::0;;;37043:14:::1;:31:::0;;;37087:21:::1;:37:::0;;;37137:22:::1;:39:::0;;;37238:16:::1;::::0;37204:10:::1;::::0;:51:::1;::::0;37238:16;37204:29:::1;::::0;37017:13;37204:14:::1;:29::i;37540:141::-:0;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;37628:16:::1;:45:::0;;-1:-1:-1;;;;;;37628:45:0::1;-1:-1:-1::0;;;;;37628:45:0;;;::::1;::::0;;;::::1;::::0;;37540:141::o;18758:87::-;18797:13;18830:7;18823:14;;;;;:::i;37693:109::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;37743:51:::1;::::0;37751:10:::1;::::0;37772:21:::1;37743:51:::0;::::1;;;::::0;::::1;::::0;;;37772:21;37751:10;37743:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37693:109::o:0;20301:269::-;20394:4;20411:129;196:10;20434:7;20443:96;20482:15;20443:96;;;;;;;;;;;;;;;;;196:10;20443:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20443:34:0;;;;;;;;;;;;:38;:96::i;6875:305::-;6927:14;;-1:-1:-1;;;;;6927:14:0;6945:10;6927:28;6919:76;;;;-1:-1:-1;;;6919:76:0;;10072:2:1;6919:76:0;;;10054:21:1;10111:2;10091:18;;;10084:30;10150:34;10130:18;;;10123:62;-1:-1:-1;;;10201:18:1;;;10194:33;10244:19;;6919:76:0;9870:399:1;6919:76:0;7032:9;;7014:15;:27;7006:72;;;;-1:-1:-1;;;7006:72:0;;10476:2:1;7006:72:0;;;10458:21:1;10515:2;10495:18;;;10488:30;10554:33;10534:18;;;10527:61;10605:18;;7006:72:0;10274:355:1;7006:72:0;7123:14;;;7115:6;;7094:44;;-1:-1:-1;;;;;7123:14:0;;;;7115:6;;;;-1:-1:-1;;;;;;;;;;;7094:44:0;;7158:14;;;7149:23;;-1:-1:-1;;;;;;7149:23:0;-1:-1:-1;;;;;7158:14:0;;;7149:23;;;;;;6875:305::o;19253:167::-;19331:4;19348:42;196:10;19372:9;19383:6;19348:9;:42::i;35483:88::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;35546:9:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;35546:17:0;;::::1;::::0;;;::::1;::::0;;35483:88::o;23330:102::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23404:14:0;;;::::1;;::::0;;;:7:::1;:14;::::0;;;;:22;;-1:-1:-1;;23404:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23330:102::o;6637:226::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;6718:6:::1;::::0;;;6701:23;;-1:-1:-1;;;;;;6701:23:0;;::::1;-1:-1:-1::0;;;;;6718:6:0;::::1;6701:23;::::0;;;6735:19:::1;::::0;;6777:22:::1;6795:4:::0;6777:15:::1;:22;:::i;:::-;6765:9;:34:::0;6852:1:::1;6836:6:::0;;6815:40:::1;::::0;-1:-1:-1;;;;;6836:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6815:40:0;6852:1;;6815:40:::1;6637:226:::0;:::o;37362:166::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;37470:23:::1;:50:::0;37362:166::o;36129:614::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;36273:2:::1;36253:16;:22;;36245:56;;;;-1:-1:-1::0;;;36245:56:0::1;;;;;;;:::i;:::-;36341:2;36320:17;:23;;36312:57;;;;-1:-1:-1::0;;;36312:57:0::1;;;;;;;:::i;:::-;36380:16;:35:::0;;;36426:17:::1;:37:::0;;;36474:24:::1;:43:::0;;;36528:25:::1;:45:::0;;;36616:13:::1;::::0;36601:10:::1;::::0;:51:::1;::::0;36399:16;;36601:29:::1;::::0;:14:::1;:29::i;6185:244::-:0;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6274:22:0;::::1;6266:73;;;::::0;-1:-1:-1;;;6266:73:0;;10966:2:1;6266:73:0::1;::::0;::::1;10948:21:1::0;11005:2;10985:18;;;10978:30;11044:34;11024:18;;;11017:62;-1:-1:-1;;;11095:18:1;;;11088:36;11141:19;;6266:73:0::1;10764:402:1::0;6266:73:0::1;6376:6;::::0;;6355:38:::1;::::0;-1:-1:-1;;;;;6355:38:0;;::::1;::::0;6376:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6355:38:0;::::1;6404:6;:17:::0;;-1:-1:-1;;;;;;6404:17:0::1;-1:-1:-1::0;;;;;6404:17:0;;;::::1;::::0;;;::::1;::::0;;6185:244::o;22866:337::-;-1:-1:-1;;;;;22959:19:0;;22951:68;;;;-1:-1:-1;;;22951:68:0;;11373:2:1;22951:68:0;;;11355:21:1;11412:2;11392:18;;;11385:30;11451:34;11431:18;;;11424:62;-1:-1:-1;;;11502:18:1;;;11495:34;11546:19;;22951:68:0;11171:400:1;22951:68:0;-1:-1:-1;;;;;23038:21:0;;23030:68;;;;-1:-1:-1;;;23030:68:0;;11778:2:1;23030:68:0;;;11760:21:1;11817:2;11797:18;;;11790:30;11856:34;11836:18;;;11829:62;-1:-1:-1;;;11907:18:1;;;11900:32;11949:19;;23030:68:0;11576:398:1;23030:68:0;-1:-1:-1;;;;;23111:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23163:32;;1772:25:1;;;23163:32:0;;1745:18:1;23163:32:0;;;;;;;22866:337;;;:::o;23438:1283::-;-1:-1:-1;;;;;23560:18:0;;23552:68;;;;-1:-1:-1;;;23552:68:0;;12181:2:1;23552:68:0;;;12163:21:1;12220:2;12200:18;;;12193:30;12259:34;12239:18;;;12232:62;-1:-1:-1;;;12310:18:1;;;12303:35;12355:19;;23552:68:0;11979:401:1;23552:68:0;-1:-1:-1;;;;;23639:16:0;;23631:64;;;;-1:-1:-1;;;23631:64:0;;12587:2:1;23631:64:0;;;12569:21:1;12626:2;12606:18;;;12599:30;12665:34;12645:18;;;12638:62;-1:-1:-1;;;12716:18:1;;;12709:33;12759:19;;23631:64:0;12385:399:1;23631:64:0;23723:1;23714:6;:10;23706:64;;;;-1:-1:-1;;;23706:64:0;;12991:2:1;23706:64:0;;;12973:21:1;13030:2;13010:18;;;13003:30;13069:34;13049:18;;;13042:62;-1:-1:-1;;;13120:18:1;;;13113:39;13169:19;;23706:64:0;12789:405:1;23706:64:0;23786:6;;;;23785:7;:25;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;23795:15:0;;;5869:6;;23795:15;;23785:25;:42;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;23814:13:0;;;5869:6;;23814:13;;23785:42;:58;;;;-1:-1:-1;;;;;;23830:13:0;;;;;;:7;:13;;;;;;;;23829:14;23785:58;:72;;;;-1:-1:-1;;;;;;23846:11:0;;;;;;:7;:11;;;;;;;;23845:12;23785:72;23782:133;;;23874:29;;-1:-1:-1;;;23874:29:0;;13401:2:1;23874:29:0;;;13383:21:1;13440:2;13420:18;;;13413:30;-1:-1:-1;;;13459:18:1;;;13452:41;13510:18;;23874:29:0;13199:335:1;23874:29:0;23925:28;23956:24;23974:4;23956:9;:24::i;:::-;24046:23;;24095:16;;23925:55;;-1:-1:-1;24022:47:0;;;;24095:16;;24094:17;:40;;;;;24121:13;-1:-1:-1;;;;;24115:19:0;:2;-1:-1:-1;;;;;24115:19:0;;24094:40;:58;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24138:14:0;;;5869:6;;24138:14;;24094:58;:73;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24156:11:0;;;5869:6;;24156:11;;24094:73;24090:218;;;24188:23;24184:113;;;24264:16;;24232:49;;24243:20;;-1:-1:-1;;;;;24264:16:0;24232:10;:49::i;:::-;-1:-1:-1;;;;;24455:24:0;;24328:12;24455:24;;;:18;:24;;;;;;24343:4;;24455:24;;;:50;;-1:-1:-1;;;;;;24483:22:0;;;;;;:18;:22;;;;;;;;24455:50;24452:96;;;-1:-1:-1;24531:5:0;24452:96;24560:5;:12;;-1:-1:-1;;24560:12:0;;;;;-1:-1:-1;;;;;24600:13:0;24586:28;;;;;;24583:72;;24630:5;:13;;-1:-1:-1;;24630:13:0;;;24583:72;24675:38;24690:4;24695:2;24698:6;24705:7;24675:14;:38::i;:::-;23541:1180;;;23438:1283;;;:::o;1503:192::-;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;31791:163::-;31832:7;31853:15;31870;31889:19;:17;:19::i;:::-;31852:56;;-1:-1:-1;31852:56:0;-1:-1:-1;31926:20:0;31852:56;;31926:11;:20::i;:::-;31919:27;;;;31791:163;:::o;1963:132::-;2021:7;2048:39;2052:1;2055;2048:39;;;;;;;;;;;;;;;;;:3;:39::i;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;13741:2:1;1276:46:0;;;13723:21:1;13780:2;13760:18;;;13753:30;13819:29;13799:18;;;13792:57;13866:18;;1276:46:0;13539:351:1;30382:459:0;30441:7;30450;30459;30468;30477;30486;30494;30515:23;30540:12;30554:18;30573:15;30592:20;30604:7;30592:11;:20::i;:::-;30514:98;;;;;;;;30624:15;30641:23;30666:12;30682:58;30694:7;30703:4;30709:10;30720:7;30729:10;:8;:10::i;:::-;30682:11;:58::i;:::-;30623:117;;-1:-1:-1;30623:117:0;-1:-1:-1;30623:117:0;-1:-1:-1;30791:15:0;;-1:-1:-1;30808:4:0;;-1:-1:-1;30814:10:0;;-1:-1:-1;30825:7:0;-1:-1:-1;;;;30382:459:0;;;;;;;;;:::o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;24729:221::-;17876:16;:23;;-1:-1:-1;;17876:23:0;17895:4;17876:23;;;24825:62;;24869:7:::1;24825:62;24897:45;24914:20;24935:6;24897:16;:45::i;:::-;-1:-1:-1::0;;17922:16:0;:24;;-1:-1:-1;;17922:24:0;;;24729:221::o;26747:704::-;26858:7;26854:40;;26880:14;34339:10;;;34318:18;:31;34387:16;;;34360:24;:43;34438:13;;;34414:21;:37;34484:11;;;34462:19;:33;34534:17;;;34506:25;:45;34587:14;;;34562:22;:39;-1:-1:-1;34622:18:0;;;;34651:21;;;;34683:15;;;;34709:14;;;;34734:20;;;;34765:17;34265:525;26880:14;-1:-1:-1;;;;;26919:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;26943:22:0;;;;;;:11;:22;;;;;;;;26942:23;26919:46;26915:467;;;26982:48;27004:6;27012:9;27023:6;26982:21;:48::i;:::-;26915:467;;;-1:-1:-1;;;;;27053:19:0;;;;;;:11;:19;;;;;;;;27052:20;:46;;;;-1:-1:-1;;;;;;27076:22:0;;;;;;:11;:22;;;;;;;;27052:46;27048:334;;;27115:46;27135:6;27143:9;27154:6;27115:19;:46::i;27048:334::-;-1:-1:-1;;;;;27183:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27206:22:0;;;;;;:11;:22;;;;;;;;27183:45;27179:203;;;27245:48;27267:6;27275:9;27286:6;27245:21;:48::i;27179:203::-;27326:44;27344:6;27352:9;27363:6;27326:17;:44::i;:::-;27406:7;27402:41;;27428:15;34858:18;;34845:10;:31;34905:24;;34886:16;:43;34955:21;;34939:13;:37;35000:19;;34986:11;:33;35049:25;;35029:17;:45;35101:22;;35084:14;:39;34802:338;27428:15;26747:704;;;;:::o;31962:561::-;32059:7;;32095;;32012;;;;;32119:289;32143:9;:16;32139:20;;32119:289;;;32209:7;32185;:21;32193:9;32203:1;32193:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32193:12:0;32185:21;;;;;;;;;;;;;:31;;:66;;;32244:7;32220;:21;32228:9;32238:1;32228:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32228:12:0;32220:21;;;;;;;;;;;;;:31;32185:66;32181:97;;;32261:7;;32270;;32253:25;;;;;;;31962:561;;:::o;32181:97::-;32303:34;32315:7;:21;32323:9;32333:1;32323:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32323:12:0;32315:21;;;;;;;;;;;;;32303:7;;:11;:34::i;:::-;32293:44;;32362:34;32374:7;:21;32382:9;32392:1;32382:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32382:12:0;32374:21;;;;;;;;;;;;;32362:7;;:11;:34::i;:::-;32352:44;-1:-1:-1;32161:3:0;;32119:289;;;-1:-1:-1;32444:7:0;;32432;;:20;;:11;:20::i;:::-;32422:7;:30;32418:61;;;32462:7;;32471;;32454:25;;;;;;31962:561;;:::o;32418:61::-;32498:7;;32507;;-1:-1:-1;31962:561:0;-1:-1:-1;31962:561:0:o;2103:278::-;2189:7;2224:12;2217:5;2209:28;;;;-1:-1:-1;;;2209:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2248:9:0;2260:5;2264:1;2260;:5;:::i;30849:415::-;30909:7;30918;30927;30935;30955:12;30970:24;30986:7;30970:15;:24::i;:::-;30955:39;;31005:18;31026:30;31048:7;31026:21;:30::i;:::-;31005:51;;31067:15;31085:27;31104:7;31085:18;:27::i;:::-;31067:45;-1:-1:-1;31123:23:0;31149:46;31067:45;31149:33;31171:10;31149:33;:7;31161:4;31149:11;:17::i;:::-;:21;;:33::i;:46::-;31123:72;31231:4;;-1:-1:-1;31237:10:0;;-1:-1:-1;31237:10:0;-1:-1:-1;30849:415:0;;-1:-1:-1;;;30849:415:0:o;31272:511::-;31403:7;;;;31459:24;:7;31471:11;31459;:24::i;:::-;31441:42;-1:-1:-1;31494:12:0;31509:21;:4;31518:11;31509:8;:21::i;:::-;31494:36;-1:-1:-1;31541:18:0;31562:27;:10;31577:11;31562:14;:27::i;:::-;31541:48;-1:-1:-1;31600:15:0;31618:24;:7;31630:11;31618;:24::i;:::-;31600:42;-1:-1:-1;31653:23:0;31679:46;31600:42;31679:33;31701:10;31679:33;:7;31691:4;31679:11;:17::i;:46::-;31744:7;;;;-1:-1:-1;31770:4:0;;-1:-1:-1;31272:511:0;;-1:-1:-1;;;;;;;;;31272:511:0:o;24968:560::-;25073:16;;;25087:1;25073:16;;;;;;;;25049:21;;25073:16;;;;;;;;;;-1:-1:-1;25073:16:0;25049:40;;25118:4;25100;25105:1;25100:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25100:23:0;;;-1:-1:-1;;;;;25100:23:0;;;;;25144:15;-1:-1:-1;;;;;25144:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25134:4;25139:1;25134:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25134:32:0;;;-1:-1:-1;;;;;25134:32:0;;;;;25179:62;25196:4;25211:15;25229:11;25179:8;:62::i;:::-;25280:189;;-1:-1:-1;;;25280:189:0;;-1:-1:-1;;;;;25280:15:0;:66;;;;:189;;25361:11;;25387:1;;25403:4;;25422:6;;25443:15;;25280:189;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25485:35;25502:11;25515:4;25485:35;;;;;;;:::i;:::-;;;;;;;;25038:490;24968:560;;:::o;28666:612::-;28769:15;28786:23;28811:12;28825:23;28850:12;28864:18;28883:15;28902:19;28913:7;28902:10;:19::i;:::-;28768:153;;;;;;;;;;;;;;28947:28;28967:7;28947;:15;28955:6;-1:-1:-1;;;;;28947:15:0;-1:-1:-1;;;;;28947:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;28929:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29004:7;:15;;;;:28;;29024:7;29004:19;:28::i;:::-;-1:-1:-1;;;;;28986:15:0;;;;;;;:7;:15;;;;;;:46;;;;29064:18;;;;;;;:39;;29087:15;29064:22;:39::i;:::-;-1:-1:-1;;;;;29043:18:0;;;;;;:7;:18;;;;;:60;29117:26;29132:10;29117:14;:26::i;:::-;29156:20;29168:7;29156:11;:20::i;:::-;29187:23;29199:4;29205;29187:11;:23::i;:::-;29243:9;-1:-1:-1;;;;;29226:44:0;29235:6;-1:-1:-1;;;;;29226:44:0;;29254:15;29226:44;;;;1772:25:1;;1760:2;1745:18;;1626:177;29226:44:0;;;;;;;;28757:521;;;;;;;28666:612;;;:::o;28026:632::-;28127:15;28144:23;28169:12;28183:23;28208:12;28222:18;28241:15;28260:19;28271:7;28260:10;:19::i;:::-;28126:153;;;;;;;;;;;;;;28305:28;28325:7;28305;:15;28313:6;-1:-1:-1;;;;;28305:15:0;-1:-1:-1;;;;;28305:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;28287:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28365:18;;;;;:7;:18;;;;;:39;;28388:15;28365:22;:39::i;:::-;-1:-1:-1;;;;;28344:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28436:7;:18;;;;:39;;28459:15;28436:22;:39::i;29286:688::-;29389:15;29406:23;29431:12;29445:23;29470:12;29484:18;29503:15;29522:19;29533:7;29522:10;:19::i;:::-;29388:153;;;;;;;;;;;;;;29567:28;29587:7;29567;:15;29575:6;-1:-1:-1;;;;;29567:15:0;-1:-1:-1;;;;;29567:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;29549:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29624:7;:15;;;;:28;;29644:7;29624:19;:28::i;27459:559::-;27558:15;27575:23;27600:12;27614:23;27639:12;27653:18;27672:15;27691:19;27702:7;27691:10;:19::i;:::-;27557:153;;;;;;;;;;;;;;27738:28;27758:7;27738;:15;27746:6;-1:-1:-1;;;;;27738:15:0;-1:-1:-1;;;;;27738:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;33271:283::-;33381:5;;33335:7;;;;33381:5;;;;;33378:100;;;-1:-1:-1;33408:10:0;;33378:100;;;-1:-1:-1;33455:11:0;;33378:100;33495:51;33530:5;33495:16;:7;33507:3;33495:11;:16::i;:::-;:20;;:51::i;33566:342::-;33696:5;;33636:7;;;;33696:5;;;;;33693:130;;;-1:-1:-1;33732:16:0;;33693:130;;;-1:-1:-1;33794:17:0;;33840:60;33884:5;33840:25;:7;33852:12;33840:11;:25::i;33922:331::-;34056:5;;33989:7;;;;34056:5;;;;;34053:118;;;-1:-1:-1;34089:13:0;;34053:118;;;-1:-1:-1;34145:14:0;;34188:57;34229:5;34188:22;:7;34200:9;1703:250;1761:7;1785:1;1790;1785:6;1781:47;;-1:-1:-1;1815:1:0;1808:8;;1781:47;1840:9;1852:5;1856:1;1852;:5;:::i;:::-;1840:17;-1:-1:-1;1885:1:0;1876:5;1880:1;1840:17;1876:5;:::i;:::-;:10;1868:56;;;;-1:-1:-1;;;1868:56:0;;16123:2:1;1868:56:0;;;16105:21:1;16162:2;16142:18;;;16135:30;16201:34;16181:18;;;16174:62;-1:-1:-1;;;16252:18:1;;;16245:31;16293:19;;1868:56:0;15921:397:1;32535:368:0;32598:19;32621:10;:8;:10::i;:::-;32598:33;-1:-1:-1;32642:18:0;32663:27;:10;32598:33;32663:14;:27::i;:::-;32752:4;32736:22;;;;:7;:22;;;;;;32642:48;;-1:-1:-1;32736:38:0;;32642:48;32736:26;:38::i;:::-;32727:4;32711:22;;;;:7;:22;;;;;;;;:63;;;;32788:11;:26;;;;;;32785:107;;;32870:4;32854:22;;;;:7;:22;;;;;;:38;;32881:10;32854:26;:38::i;:::-;32845:4;32829:22;;;;:7;:22;;;;;:63;32587:316;;32535:368;:::o;29982:392::-;30053:9;;;;;;;30050:308;;;30089:7;;:17;;30101:4;30089:11;:17::i;:::-;30079:7;:27;30130:10;;:20;;30145:4;30130:14;:20::i;:::-;30117:10;:33;22524:327:::1;22379:479:::0;:::o;30050:308::-;30218:4;30202:22;;;;:7;:22;;;;;;:32;;30229:4;30202:26;:32::i;:::-;30193:4;30177:22;;;;:7;:22;;;;;;;;:57;;;;30248:11;:26;;;;;;30245:101;;;30330:4;30314:22;;;;:7;:22;;;;;;:32;;30341:4;30314:26;:32::i;:::-;30305:4;30289:22;;;;:7;:22;;;;;:57;29982:392;;:::o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:160::-;502:20;;558:13;;551:21;541:32;;531:60;;587:1;584;577:12;531:60;437:160;;;:::o;602:180::-;658:6;711:2;699:9;690:7;686:23;682:32;679:52;;;727:1;724;717:12;679:52;750:26;766:9;750:26;:::i;787:131::-;-1:-1:-1;;;;;862:31:1;;852:42;;842:70;;908:1;905;898:12;923:134;991:20;;1020:31;991:20;1020:31;:::i;1062:367::-;1130:6;1138;1191:2;1179:9;1170:7;1166:23;1162:32;1159:52;;;1207:1;1204;1197:12;1159:52;1246:9;1233:23;1265:31;1290:5;1265:31;:::i;:::-;1315:5;1393:2;1378:18;;;;1365:32;;-1:-1:-1;;;1062:367:1:o;2043:508::-;2120:6;2128;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;-1:-1:-1;2370:2:1;2355:18;;2342:32;2383:33;2342:32;2383:33;:::i;:::-;2043:508;;2435:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2043:508::o;2556:247::-;2615:6;2668:2;2656:9;2647:7;2643:23;2639:32;2636:52;;;2684:1;2681;2674:12;2636:52;2723:9;2710:23;2742:31;2767:5;2742:31;:::i;3016:127::-;3077:10;3072:3;3068:20;3065:1;3058:31;3108:4;3105:1;3098:15;3132:4;3129:1;3122:15;3148:1207;3238:6;3246;3299:2;3287:9;3278:7;3274:23;3270:32;3267:52;;;3315:1;3312;3305:12;3267:52;3355:9;3342:23;3388:18;3380:6;3377:30;3374:50;;;3420:1;3417;3410:12;3374:50;3443:22;;3496:4;3488:13;;3484:27;-1:-1:-1;3474:55:1;;3525:1;3522;3515:12;3474:55;3565:2;3552:16;3591:18;3583:6;3580:30;3577:56;;;3613:18;;:::i;:::-;3659:6;3656:1;3652:14;3695:2;3689:9;3758:2;3754:7;3749:2;3745;3741:11;3737:25;3729:6;3725:38;3829:6;3817:10;3814:22;3793:18;3781:10;3778:34;3775:62;3772:88;;;3840:18;;:::i;:::-;3876:2;3869:22;3926;;;3976:4;4008:11;;;4004:22;;;3926;3964:17;;4038:19;;;4035:39;;;4070:1;4067;4060:12;4035:39;4102:4;4098:2;4094:13;4083:24;;4116:152;4132:6;4127:3;4124:15;4116:152;;;4200:23;4219:3;4200:23;:::i;:::-;4188:36;;4253:4;4149:14;;;;4244;4116:152;;;-1:-1:-1;4287:6:1;-1:-1:-1;4312:37:1;;-1:-1:-1;;;4343:4:1;4328:20;;4312:37;:::i;:::-;4302:47;;3148:1207;;;;;:::o;4360:226::-;4419:6;4472:2;4460:9;4451:7;4447:23;4443:32;4440:52;;;4488:1;4485;4478:12;4440:52;-1:-1:-1;4533:23:1;;4360:226;-1:-1:-1;4360:226:1:o;4591:346::-;4659:6;4667;4720:2;4708:9;4699:7;4695:23;4691:32;4688:52;;;4736:1;4733;4726:12;4688:52;-1:-1:-1;;4781:23:1;;;4901:2;4886:18;;;4873:32;;-1:-1:-1;4591:346:1:o;5131:294::-;5196:6;5204;5257:2;5245:9;5236:7;5232:23;5228:32;5225:52;;;5273:1;5270;5263:12;5225:52;5318:23;;;-1:-1:-1;5384:35:1;5415:2;5400:18;;5384:35;:::i;5654:315::-;5719:6;5727;5780:2;5768:9;5759:7;5755:23;5751:32;5748:52;;;5796:1;5793;5786:12;5748:52;5835:9;5822:23;5854:31;5879:5;5854:31;:::i;:::-;5904:5;-1:-1:-1;5928:35:1;5959:2;5944:18;;5928:35;:::i;5974:388::-;6042:6;6050;6103:2;6091:9;6082:7;6078:23;6074:32;6071:52;;;6119:1;6116;6109:12;6071:52;6158:9;6145:23;6177:31;6202:5;6177:31;:::i;:::-;6227:5;-1:-1:-1;6284:2:1;6269:18;;6256:32;6297:33;6256:32;6297:33;:::i;:::-;6349:7;6339:17;;;5974:388;;;;;:::o;6367:380::-;6446:1;6442:12;;;;6489;;;6510:61;;6564:4;6556:6;6552:17;6542:27;;6510:61;6617:2;6609:6;6606:14;6586:18;6583:38;6580:161;;6663:10;6658:3;6654:20;6651:1;6644:31;6698:4;6695:1;6688:15;6726:4;6723:1;6716:15;6580:161;;6367:380;;;:::o;6752:356::-;6954:2;6936:21;;;6973:18;;;6966:30;7032:34;7027:2;7012:18;;7005:62;7099:2;7084:18;;6752:356::o;7450:127::-;7511:10;7506:3;7502:20;7499:1;7492:31;7542:4;7539:1;7532:15;7566:4;7563:1;7556:15;7993:346;8195:2;8177:21;;;8234:2;8214:18;;;8207:30;-1:-1:-1;;;8268:2:1;8253:18;;8246:52;8330:2;8315:18;;7993:346::o;8700:127::-;8761:10;8756:3;8752:20;8749:1;8742:31;8792:4;8789:1;8782:15;8816:4;8813:1;8806:15;8832:128;8899:9;;;8920:11;;;8917:37;;;8934:18;;:::i;8965:127::-;9026:10;9021:3;9017:20;9014:1;9007:31;9057:4;9054:1;9047:15;9081:4;9078:1;9071:15;10634:125;10699:9;;;10720:10;;;10717:36;;;10733:18;;:::i;13895:217::-;13935:1;13961;13951:132;;14005:10;14000:3;13996:20;13993:1;13986:31;14040:4;14037:1;14030:15;14068:4;14065:1;14058:15;13951:132;-1:-1:-1;14097:9:1;;13895:217::o;14117:251::-;14187:6;14240:2;14228:9;14219:7;14215:23;14211:32;14208:52;;;14256:1;14253;14246:12;14208:52;14288:9;14282:16;14307:31;14332:5;14307:31;:::i;14373:446::-;14426:3;14464:5;14458:12;14491:6;14486:3;14479:19;14523:4;14518:3;14514:14;14507:21;;14562:4;14555:5;14551:16;14585:1;14595:199;14609:6;14606:1;14603:13;14595:199;;;14674:13;;-1:-1:-1;;;;;14670:39:1;14658:52;;14739:4;14730:14;;;;14767:17;;;;14706:1;14624:9;14595:199;;;-1:-1:-1;14810:3:1;;14373:446;-1:-1:-1;;;;14373:446:1:o;14824:582::-;15123:6;15112:9;15105:25;15166:6;15161:2;15150:9;15146:18;15139:34;15209:3;15204:2;15193:9;15189:18;15182:31;15086:4;15230:57;15282:3;15271:9;15267:19;15259:6;15230:57;:::i;:::-;-1:-1:-1;;;;;15323:32:1;;;;15318:2;15303:18;;15296:60;-1:-1:-1;15387:3:1;15372:19;15365:35;15222:65;14824:582;-1:-1:-1;;;14824:582:1:o;15411:332::-;15618:6;15607:9;15600:25;15661:2;15656;15645:9;15641:18;15634:30;15581:4;15681:56;15733:2;15722:9;15718:18;15710:6;15681:56;:::i;:::-;15673:64;15411:332;-1:-1:-1;;;;15411:332:1:o;15748:168::-;15821:9;;;15852;;15869:15;;;15863:22;;15849:37;15839:71;;15890:18;;:::i
Swarm Source
ipfs://f52c5a34e3fc3c99ef65dc881b7dbca1961db4895574739ee2f1321bd5732640
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.