ERC-20
Technology
Overview
Max Total Supply
1,000,000,000 BRBC
Holders
138 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
179,437.062081998521494264 BRBCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BRBToken
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion, Unlicense license, Audited
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2022-11-09 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.17; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = 0x9653fAb1EDB1704FbA4838E1Be129C8cB9d3cd52; emit OwnershipTransferred(address(0), _owner); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BRBToken is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; address private _developmentWalletAddress = 0xe84809D9536292E8b352E459B0BAAb2F567583D3; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "BRB Cash"; string private _symbol = "BRBC"; uint8 private _decimals = 18; uint256 public _taxFee = 10; uint256 private _previousTaxFee = _taxFee; uint256 public _developmentFee = 15; uint256 private _previousDevelopmentFee = _developmentFee; uint256 public _liquidityFee = 10; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 1000000000 * 10**18; uint256 private numTokensSellToAddToLiquidity = 500000000 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDevelopment) = _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); _takeDevelopment(tDevelopment); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setDevelopmentFeePercent(uint256 developmentFee) external onlyOwner() { _developmentFee = developmentFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**3 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDevelopment) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tDevelopment, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tDevelopment); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tDevelopment = calculateDevelopmentFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tDevelopment); return (tTransferAmount, tFee, tLiquidity, tDevelopment); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tDevelopment, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rDevelopment = tDevelopment.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rDevelopment); 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 _takeDevelopment(uint256 tDevelopment) private { uint256 currentRate = _getRate(); uint256 rDevelopment = tDevelopment.mul(currentRate); _rOwned[_developmentWalletAddress] = _rOwned[_developmentWalletAddress].add(rDevelopment); if(_isExcluded[_developmentWalletAddress]) _tOwned[_developmentWalletAddress] = _tOwned[_developmentWalletAddress].add(tDevelopment); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**3 ); } function calculateDevelopmentFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_developmentFee).div( 10**3 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**3 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousDevelopmentFee = _developmentFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _developmentFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _developmentFee = _previousDevelopmentFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { 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(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), 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]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDevelopment) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDevelopment(tDevelopment); _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 tDevelopment) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDevelopment(tDevelopment); _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 tDevelopment) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeDevelopment(tDevelopment); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } //https://goerli.etherscan.io/address/0x3E3058256A6b1e7ee8386034f4AE7bf6936DdaCe#code
Contract Security Audit
- Solidproof.io- Dec 2nd, 2022 - Security Audit Report
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_developmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"developmentFee","type":"uint256"}],"name":"setDevelopmentFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600780546001600160a01b03191673e84809d9536292e8b352e459b0baab2f567583d31790556b033b2e3c9fd0803ce800000060088190556200004a90600019620003ea565b62000058906000196200040d565b600955604080518082019091526008815267084a4844086c2e6d60c31b6020820152600b90620000899082620004da565b506040805180820190915260048152634252424360e01b6020820152600c90620000b49082620004da565b50600d805460ff19166012908117909155600a600e819055600f8181556010819055601155908190556013556014805461ff0019166101001790556b033b2e3c9fd0803ce80000006015556b019d971e4fe8401e740000006016553480156200011c57600080fd5b50600080546001600160a01b031916739653fab1edb1704fba4838e1be129c8cb9d3cd5290811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600954600160006200018a6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c9190620005a6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a09190620005a6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003149190620005a6565b6001600160a01b0390811660a0528116608052600160046000620003406000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003936000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620003db91815260200190565b60405180910390a350620005d8565b6000826200040857634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200042f57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200046057607f821691505b6020821081036200048157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004d557600081815260208120601f850160051c81016020861015620004b05750805b601f850160051c820191505b81811015620004d157828155600101620004bc565b5050505b505050565b81516001600160401b03811115620004f657620004f662000435565b6200050e816200050784546200044b565b8462000487565b602080601f8311600181146200054657600084156200052d5750858301515b600019600386901b1c1916600185901b178555620004d1565b600085815260208120601f198616915b82811015620005775788860151825594840194600190910190840162000556565b5085821015620005965787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620005b957600080fd5b81516001600160a01b0381168114620005d157600080fd5b9392505050565b60805160a0516126306200062860003960008181610466015261149a0152600081816102cd01528181611adf01528181611b9801528181611bd401528181611c460152611c6d01526126306000f3fe6080604052600436106102135760003560e01c806352390c021161011857806395d89b41116100a0578063d14751851161006f578063d14751851461064d578063d543dbeb14610663578063dd62ed3e14610683578063ea2f0b37146106c9578063f2fde38b146106e957600080fd5b806395d89b41146105d8578063a457c2d7146105ed578063a9059cbb1461060d578063c49b9a801461062d57600080fd5b8063715018a6116100e7578063715018a6146105365780637d1db4a51461054b57806388f82020146105615780638da5cb5b1461059a5780638ee88c53146105b857600080fd5b806352390c02146104a75780635342acb4146104c75780636bc87c3a1461050057806370a082311461051657600080fd5b80633685d4191161019b578063437823ec1161016a578063437823ec146103f45780634549b039146104145780634680ff351461043457806349bd5a5e146104545780634a74bb021461048857600080fd5b80633685d4191461037e578063395093511461039e5780633b124fe7146103be5780633bd5d173146103d457600080fd5b80631694505e116101e25780631694505e146102bb57806318160ddd1461030757806323b872dd1461031c5780632d8381191461033c578063313ce5671461035c57600080fd5b8063061c82d01461021f57806306fdde0314610241578063095ea7b31461026c57806313114a9d1461029c57600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a36600461222a565b610709565b005b34801561024d57600080fd5b50610256610741565b6040516102639190612243565b60405180910390f35b34801561027857600080fd5b5061028c6102873660046122a9565b6107d3565b6040519015158152602001610263565b3480156102a857600080fd5b50600a545b604051908152602001610263565b3480156102c757600080fd5b506102ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610263565b34801561031357600080fd5b506008546102ad565b34801561032857600080fd5b5061028c6103373660046122d5565b6107ea565b34801561034857600080fd5b506102ad61035736600461222a565b610853565b34801561036857600080fd5b50600d5460405160ff9091168152602001610263565b34801561038a57600080fd5b5061023f610399366004612316565b6108d7565b3480156103aa57600080fd5b5061028c6103b93660046122a9565b610a8d565b3480156103ca57600080fd5b506102ad600e5481565b3480156103e057600080fd5b5061023f6103ef36600461222a565b610ac3565b34801561040057600080fd5b5061023f61040f366004612316565b610baf565b34801561042057600080fd5b506102ad61042f366004612348565b610bfd565b34801561044057600080fd5b5061023f61044f36600461222a565b610c8c565b34801561046057600080fd5b506102ef7f000000000000000000000000000000000000000000000000000000000000000081565b34801561049457600080fd5b5060145461028c90610100900460ff1681565b3480156104b357600080fd5b5061023f6104c2366004612316565b610cbb565b3480156104d357600080fd5b5061028c6104e2366004612316565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561050c57600080fd5b506102ad60125481565b34801561052257600080fd5b506102ad610531366004612316565b610e0e565b34801561054257600080fd5b5061023f610e6d565b34801561055757600080fd5b506102ad60155481565b34801561056d57600080fd5b5061028c61057c366004612316565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105a657600080fd5b506000546001600160a01b03166102ef565b3480156105c457600080fd5b5061023f6105d336600461222a565b610ee1565b3480156105e457600080fd5b50610256610f10565b3480156105f957600080fd5b5061028c6106083660046122a9565b610f1f565b34801561061957600080fd5b5061028c6106283660046122a9565b610f6e565b34801561063957600080fd5b5061023f610648366004612374565b610f7b565b34801561065957600080fd5b506102ad60105481565b34801561066f57600080fd5b5061023f61067e36600461222a565b610ff9565b34801561068f57600080fd5b506102ad61069e36600461238f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156106d557600080fd5b5061023f6106e4366004612316565b61104a565b3480156106f557600080fd5b5061023f610704366004612316565b611095565b6000546001600160a01b0316331461073c5760405162461bcd60e51b8152600401610733906123c8565b60405180910390fd5b600e55565b6060600b8054610750906123fd565b80601f016020809104026020016040519081016040528092919081815260200182805461077c906123fd565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b60006107e033848461117f565b5060015b92915050565b60006107f78484846112a3565b6108498433610844856040518060600160405280602881526020016125ae602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611554565b61117f565b5060019392505050565b60006009548211156108ba5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610733565b60006108c4611580565b90506108d083826115a3565b9392505050565b6000546001600160a01b031633146109015760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03811660009081526005602052604090205460ff166109695760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610733565b60005b600654811015610a8957816001600160a01b03166006828154811061099357610993612437565b6000918252602090912001546001600160a01b031603610a7757600680546109bd90600190612463565b815481106109cd576109cd612437565b600091825260209091200154600680546001600160a01b0390921691839081106109f9576109f9612437565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610a5157610a51612476565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610a818161248c565b91505061096c565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916107e091859061084490866115af565b3360008181526005602052604090205460ff1615610b385760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610733565b6000610b43836115bb565b5050506001600160a01b038616600090815260016020526040902054939450610b7193925084915050611616565b6001600160a01b038316600090815260016020526040902055600954610b979082611616565b600955600a54610ba790846115af565b600a55505050565b6000546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600854831115610c515760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610733565b81610c71576000610c61846115bb565b509496506107e495505050505050565b6000610c7c846115bb565b509396506107e495505050505050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610733906123c8565b601055565b6000546001600160a01b03163314610ce55760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03811660009081526005602052604090205460ff1615610d4e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610733565b6001600160a01b03811660009081526001602052604090205415610da8576001600160a01b038116600090815260016020526040902054610d8e90610853565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610e4b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546107e490610853565b6000546001600160a01b03163314610e975760405162461bcd60e51b8152600401610733906123c8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f0b5760405162461bcd60e51b8152600401610733906123c8565b601255565b6060600c8054610750906123fd565b60006107e03384610844856040518060600160405280602581526020016125d6602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611554565b60006107e03384846112a3565b6000546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610733906123c8565b601480548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fee90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146110235760405162461bcd60e51b8152600401610733906123c8565b6110446103e861103e8360085461162290919063ffffffff16565b906115a3565b60155550565b6000546001600160a01b031633146110745760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b0381166111245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610733565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610733565b6001600160a01b0382166112425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610733565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610733565b6001600160a01b0382166113695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610733565b600081116113cb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610733565b6000546001600160a01b038481169116148015906113f757506000546001600160a01b03838116911614155b1561145f5760155481111561145f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610733565b600061146a30610e0e565b9050601554811061147a57506015545b60165481108015908190611491575060145460ff16155b80156114cf57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156114e25750601454610100900460ff165b156114f55760165491506114f58261162e565b6001600160a01b03851660009081526004602052604090205460019060ff168061153757506001600160a01b03851660009081526004602052604090205460ff165b15611540575060005b61154c868686846116cc565b505050505050565b600081848411156115785760405162461bcd60e51b81526004016107339190612243565b505050900390565b600080600061158d61184f565b909250905061159c82826115a3565b9250505090565b60006108d082846124a5565b60006108d082846124c7565b60008060008060008060008060008060006115d58c6119d1565b935093509350935060008060006115f68f8787876115f1611580565b611a26565b919f509d509b509599509397509195509350505050919395979092949650565b60006108d08284612463565b60006108d082846124da565b6014805460ff1916600117905560006116488260026115a3565b905060006116568383611616565b90504761166283611a88565b600061166e4783611616565b905061167a8382611c40565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506014805460ff19169055505050565b806116d9576116d9611d46565b6001600160a01b03841660009081526005602052604090205460ff16801561171a57506001600160a01b03831660009081526005602052604090205460ff16155b1561172f5761172a848484611d7f565b61182d565b6001600160a01b03841660009081526005602052604090205460ff1615801561177057506001600160a01b03831660009081526005602052604090205460ff165b156117805761172a848484611ec5565b6001600160a01b03841660009081526005602052604090205460ff161580156117c257506001600160a01b03831660009081526005602052604090205460ff16155b156117d25761172a848484611f84565b6001600160a01b03841660009081526005602052604090205460ff16801561181257506001600160a01b03831660009081526005602052604090205460ff165b156118225761172a848484611fde565b61182d848484611f84565b8061184957611849600f54600e55601154601055601354601255565b50505050565b6009546008546000918291825b6006548110156119a15782600160006006848154811061187e5761187e612437565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806118e957508160026000600684815481106118c2576118c2612437565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156118ff57600954600854945094505050509091565b611945600160006006848154811061191957611919612437565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611616565b925061198d600260006006848154811061196157611961612437565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611616565b9150806119998161248c565b91505061185c565b506008546009546119b1916115a3565b8210156119c8576009546008549350935050509091565b90939092509050565b60008060008060006119e286612067565b905060006119ef87612084565b905060006119fc886120a1565b90506000611a1682611a1085818d89611616565b90611616565b9993985091965094509092505050565b6000808080611a358986611622565b90506000611a438987611622565b90506000611a518988611622565b90506000611a5f8989611622565b90506000611a7382611a1085818989611616565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611abd57611abd612437565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f91906124f1565b81600181518110611b7257611b72612437565b60200260200101906001600160a01b031690816001600160a01b031681525050611bbd307f00000000000000000000000000000000000000000000000000000000000000008461117f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611c1290859060009086903090429060040161250e565b600060405180830381600087803b158015611c2c57600080fd5b505af115801561154c573d6000803e3d6000fd5b611c6b307f00000000000000000000000000000000000000000000000000000000000000008461117f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080611cb26000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611d1a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d3f919061257f565b5050505050565b600e54158015611d565750601254155b15611d5d57565b600e8054600f5560108054601155601280546013556000928390559082905555565b6000806000806000806000611d93886115bb565b9650965096509650965096509650611dd988600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611e089088611616565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054611e3790876115af565b6001600160a01b038a16600090815260016020526040902055611e59826120be565b611e6281612147565b611e6c8584612206565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611eb191815260200190565b60405180910390a350505050505050505050565b6000806000806000806000611ed9886115bb565b9650965096509650965096509650611f1f87600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054611f5590856115af565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611e3790876115af565b6000806000806000806000611f98886115bb565b9650965096509650965096509650611e0887600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6000806000806000806000611ff2886115bb565b965096509650965096509650965061203888600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611f1f9088611616565b60006107e46103e861103e600e548561162290919063ffffffff16565b60006107e46103e861103e6012548561162290919063ffffffff16565b60006107e46103e861103e6010548561162290919063ffffffff16565b60006120c8611580565b905060006120d68383611622565b306000908152600160205260409020549091506120f390826115af565b3060009081526001602090815260408083209390935560059052205460ff1615612142573060009081526002602052604090205461213190846115af565b306000908152600260205260409020555b505050565b6000612151611580565b9050600061215f8383611622565b6007546001600160a01b031660009081526001602052604090205490915061218790826115af565b600780546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615612142576007546001600160a01b03166000908152600260205260409020546121e690846115af565b6007546001600160a01b0316600090815260026020526040902055505050565b6009546122139083611616565b600955600a5461222390826115af565b600a555050565b60006020828403121561223c57600080fd5b5035919050565b600060208083528351808285015260005b8181101561227057858101830151858201604001528201612254565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146122a657600080fd5b50565b600080604083850312156122bc57600080fd5b82356122c781612291565b946020939093013593505050565b6000806000606084860312156122ea57600080fd5b83356122f581612291565b9250602084013561230581612291565b929592945050506040919091013590565b60006020828403121561232857600080fd5b81356108d081612291565b8035801515811461234357600080fd5b919050565b6000806040838503121561235b57600080fd5b8235915061236b60208401612333565b90509250929050565b60006020828403121561238657600080fd5b6108d082612333565b600080604083850312156123a257600080fd5b82356123ad81612291565b915060208301356123bd81612291565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061241157607f821691505b60208210810361243157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156107e4576107e461244d565b634e487b7160e01b600052603160045260246000fd5b60006001820161249e5761249e61244d565b5060010190565b6000826124c257634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156107e4576107e461244d565b80820281158282048414176107e4576107e461244d565b60006020828403121561250357600080fd5b81516108d081612291565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561255e5784516001600160a01b031683529383019391830191600101612539565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561259457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220831c12864cbdde8c0209a9c2e06e52bff29741c5904636f6c2c03f0c495ba98464736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102135760003560e01c806352390c021161011857806395d89b41116100a0578063d14751851161006f578063d14751851461064d578063d543dbeb14610663578063dd62ed3e14610683578063ea2f0b37146106c9578063f2fde38b146106e957600080fd5b806395d89b41146105d8578063a457c2d7146105ed578063a9059cbb1461060d578063c49b9a801461062d57600080fd5b8063715018a6116100e7578063715018a6146105365780637d1db4a51461054b57806388f82020146105615780638da5cb5b1461059a5780638ee88c53146105b857600080fd5b806352390c02146104a75780635342acb4146104c75780636bc87c3a1461050057806370a082311461051657600080fd5b80633685d4191161019b578063437823ec1161016a578063437823ec146103f45780634549b039146104145780634680ff351461043457806349bd5a5e146104545780634a74bb021461048857600080fd5b80633685d4191461037e578063395093511461039e5780633b124fe7146103be5780633bd5d173146103d457600080fd5b80631694505e116101e25780631694505e146102bb57806318160ddd1461030757806323b872dd1461031c5780632d8381191461033c578063313ce5671461035c57600080fd5b8063061c82d01461021f57806306fdde0314610241578063095ea7b31461026c57806313114a9d1461029c57600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a36600461222a565b610709565b005b34801561024d57600080fd5b50610256610741565b6040516102639190612243565b60405180910390f35b34801561027857600080fd5b5061028c6102873660046122a9565b6107d3565b6040519015158152602001610263565b3480156102a857600080fd5b50600a545b604051908152602001610263565b3480156102c757600080fd5b506102ef7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610263565b34801561031357600080fd5b506008546102ad565b34801561032857600080fd5b5061028c6103373660046122d5565b6107ea565b34801561034857600080fd5b506102ad61035736600461222a565b610853565b34801561036857600080fd5b50600d5460405160ff9091168152602001610263565b34801561038a57600080fd5b5061023f610399366004612316565b6108d7565b3480156103aa57600080fd5b5061028c6103b93660046122a9565b610a8d565b3480156103ca57600080fd5b506102ad600e5481565b3480156103e057600080fd5b5061023f6103ef36600461222a565b610ac3565b34801561040057600080fd5b5061023f61040f366004612316565b610baf565b34801561042057600080fd5b506102ad61042f366004612348565b610bfd565b34801561044057600080fd5b5061023f61044f36600461222a565b610c8c565b34801561046057600080fd5b506102ef7f000000000000000000000000bbce67d02371404e3ad7e7bdc4b04ee9dc0d318c81565b34801561049457600080fd5b5060145461028c90610100900460ff1681565b3480156104b357600080fd5b5061023f6104c2366004612316565b610cbb565b3480156104d357600080fd5b5061028c6104e2366004612316565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561050c57600080fd5b506102ad60125481565b34801561052257600080fd5b506102ad610531366004612316565b610e0e565b34801561054257600080fd5b5061023f610e6d565b34801561055757600080fd5b506102ad60155481565b34801561056d57600080fd5b5061028c61057c366004612316565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105a657600080fd5b506000546001600160a01b03166102ef565b3480156105c457600080fd5b5061023f6105d336600461222a565b610ee1565b3480156105e457600080fd5b50610256610f10565b3480156105f957600080fd5b5061028c6106083660046122a9565b610f1f565b34801561061957600080fd5b5061028c6106283660046122a9565b610f6e565b34801561063957600080fd5b5061023f610648366004612374565b610f7b565b34801561065957600080fd5b506102ad60105481565b34801561066f57600080fd5b5061023f61067e36600461222a565b610ff9565b34801561068f57600080fd5b506102ad61069e36600461238f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156106d557600080fd5b5061023f6106e4366004612316565b61104a565b3480156106f557600080fd5b5061023f610704366004612316565b611095565b6000546001600160a01b0316331461073c5760405162461bcd60e51b8152600401610733906123c8565b60405180910390fd5b600e55565b6060600b8054610750906123fd565b80601f016020809104026020016040519081016040528092919081815260200182805461077c906123fd565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b60006107e033848461117f565b5060015b92915050565b60006107f78484846112a3565b6108498433610844856040518060600160405280602881526020016125ae602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611554565b61117f565b5060019392505050565b60006009548211156108ba5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610733565b60006108c4611580565b90506108d083826115a3565b9392505050565b6000546001600160a01b031633146109015760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03811660009081526005602052604090205460ff166109695760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610733565b60005b600654811015610a8957816001600160a01b03166006828154811061099357610993612437565b6000918252602090912001546001600160a01b031603610a7757600680546109bd90600190612463565b815481106109cd576109cd612437565b600091825260209091200154600680546001600160a01b0390921691839081106109f9576109f9612437565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610a5157610a51612476565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610a818161248c565b91505061096c565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916107e091859061084490866115af565b3360008181526005602052604090205460ff1615610b385760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610733565b6000610b43836115bb565b5050506001600160a01b038616600090815260016020526040902054939450610b7193925084915050611616565b6001600160a01b038316600090815260016020526040902055600954610b979082611616565b600955600a54610ba790846115af565b600a55505050565b6000546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600854831115610c515760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610733565b81610c71576000610c61846115bb565b509496506107e495505050505050565b6000610c7c846115bb565b509396506107e495505050505050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610733906123c8565b601055565b6000546001600160a01b03163314610ce55760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03811660009081526005602052604090205460ff1615610d4e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610733565b6001600160a01b03811660009081526001602052604090205415610da8576001600160a01b038116600090815260016020526040902054610d8e90610853565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610e4b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546107e490610853565b6000546001600160a01b03163314610e975760405162461bcd60e51b8152600401610733906123c8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f0b5760405162461bcd60e51b8152600401610733906123c8565b601255565b6060600c8054610750906123fd565b60006107e03384610844856040518060600160405280602581526020016125d6602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611554565b60006107e03384846112a3565b6000546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610733906123c8565b601480548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fee90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146110235760405162461bcd60e51b8152600401610733906123c8565b6110446103e861103e8360085461162290919063ffffffff16565b906115a3565b60155550565b6000546001600160a01b031633146110745760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610733906123c8565b6001600160a01b0381166111245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610733565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610733565b6001600160a01b0382166112425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610733565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610733565b6001600160a01b0382166113695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610733565b600081116113cb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610733565b6000546001600160a01b038481169116148015906113f757506000546001600160a01b03838116911614155b1561145f5760155481111561145f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610733565b600061146a30610e0e565b9050601554811061147a57506015545b60165481108015908190611491575060145460ff16155b80156114cf57507f000000000000000000000000bbce67d02371404e3ad7e7bdc4b04ee9dc0d318c6001600160a01b0316856001600160a01b031614155b80156114e25750601454610100900460ff165b156114f55760165491506114f58261162e565b6001600160a01b03851660009081526004602052604090205460019060ff168061153757506001600160a01b03851660009081526004602052604090205460ff165b15611540575060005b61154c868686846116cc565b505050505050565b600081848411156115785760405162461bcd60e51b81526004016107339190612243565b505050900390565b600080600061158d61184f565b909250905061159c82826115a3565b9250505090565b60006108d082846124a5565b60006108d082846124c7565b60008060008060008060008060008060006115d58c6119d1565b935093509350935060008060006115f68f8787876115f1611580565b611a26565b919f509d509b509599509397509195509350505050919395979092949650565b60006108d08284612463565b60006108d082846124da565b6014805460ff1916600117905560006116488260026115a3565b905060006116568383611616565b90504761166283611a88565b600061166e4783611616565b905061167a8382611c40565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506014805460ff19169055505050565b806116d9576116d9611d46565b6001600160a01b03841660009081526005602052604090205460ff16801561171a57506001600160a01b03831660009081526005602052604090205460ff16155b1561172f5761172a848484611d7f565b61182d565b6001600160a01b03841660009081526005602052604090205460ff1615801561177057506001600160a01b03831660009081526005602052604090205460ff165b156117805761172a848484611ec5565b6001600160a01b03841660009081526005602052604090205460ff161580156117c257506001600160a01b03831660009081526005602052604090205460ff16155b156117d25761172a848484611f84565b6001600160a01b03841660009081526005602052604090205460ff16801561181257506001600160a01b03831660009081526005602052604090205460ff165b156118225761172a848484611fde565b61182d848484611f84565b8061184957611849600f54600e55601154601055601354601255565b50505050565b6009546008546000918291825b6006548110156119a15782600160006006848154811061187e5761187e612437565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806118e957508160026000600684815481106118c2576118c2612437565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156118ff57600954600854945094505050509091565b611945600160006006848154811061191957611919612437565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611616565b925061198d600260006006848154811061196157611961612437565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611616565b9150806119998161248c565b91505061185c565b506008546009546119b1916115a3565b8210156119c8576009546008549350935050509091565b90939092509050565b60008060008060006119e286612067565b905060006119ef87612084565b905060006119fc886120a1565b90506000611a1682611a1085818d89611616565b90611616565b9993985091965094509092505050565b6000808080611a358986611622565b90506000611a438987611622565b90506000611a518988611622565b90506000611a5f8989611622565b90506000611a7382611a1085818989611616565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611abd57611abd612437565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f91906124f1565b81600181518110611b7257611b72612437565b60200260200101906001600160a01b031690816001600160a01b031681525050611bbd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461117f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611c1290859060009086903090429060040161250e565b600060405180830381600087803b158015611c2c57600080fd5b505af115801561154c573d6000803e3d6000fd5b611c6b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461117f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080611cb26000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611d1a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d3f919061257f565b5050505050565b600e54158015611d565750601254155b15611d5d57565b600e8054600f5560108054601155601280546013556000928390559082905555565b6000806000806000806000611d93886115bb565b9650965096509650965096509650611dd988600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611e089088611616565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054611e3790876115af565b6001600160a01b038a16600090815260016020526040902055611e59826120be565b611e6281612147565b611e6c8584612206565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611eb191815260200190565b60405180910390a350505050505050505050565b6000806000806000806000611ed9886115bb565b9650965096509650965096509650611f1f87600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054611f5590856115af565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611e3790876115af565b6000806000806000806000611f98886115bb565b9650965096509650965096509650611e0887600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6000806000806000806000611ff2886115bb565b965096509650965096509650965061203888600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461161690919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611f1f9088611616565b60006107e46103e861103e600e548561162290919063ffffffff16565b60006107e46103e861103e6012548561162290919063ffffffff16565b60006107e46103e861103e6010548561162290919063ffffffff16565b60006120c8611580565b905060006120d68383611622565b306000908152600160205260409020549091506120f390826115af565b3060009081526001602090815260408083209390935560059052205460ff1615612142573060009081526002602052604090205461213190846115af565b306000908152600260205260409020555b505050565b6000612151611580565b9050600061215f8383611622565b6007546001600160a01b031660009081526001602052604090205490915061218790826115af565b600780546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615612142576007546001600160a01b03166000908152600260205260409020546121e690846115af565b6007546001600160a01b0316600090815260026020526040902055505050565b6009546122139083611616565b600955600a5461222390826115af565b600a555050565b60006020828403121561223c57600080fd5b5035919050565b600060208083528351808285015260005b8181101561227057858101830151858201604001528201612254565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146122a657600080fd5b50565b600080604083850312156122bc57600080fd5b82356122c781612291565b946020939093013593505050565b6000806000606084860312156122ea57600080fd5b83356122f581612291565b9250602084013561230581612291565b929592945050506040919091013590565b60006020828403121561232857600080fd5b81356108d081612291565b8035801515811461234357600080fd5b919050565b6000806040838503121561235b57600080fd5b8235915061236b60208401612333565b90509250929050565b60006020828403121561238657600080fd5b6108d082612333565b600080604083850312156123a257600080fd5b82356123ad81612291565b915060208301356123bd81612291565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061241157607f821691505b60208210810361243157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156107e4576107e461244d565b634e487b7160e01b600052603160045260246000fd5b60006001820161249e5761249e61244d565b5060010190565b6000826124c257634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156107e4576107e461244d565b80820281158282048414176107e4576107e461244d565b60006020828403121561250357600080fd5b81516108d081612291565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561255e5784516001600160a01b031683529383019391830191600101612539565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561259457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220831c12864cbdde8c0209a9c2e06e52bff29741c5904636f6c2c03f0c495ba98464736f6c63430008110033
Deployed Bytecode Sourcemap
15437:17871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22697:98;;;;;;;;;;-1:-1:-1;22697:98:0;;;;;:::i;:::-;;:::i;:::-;;17752:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18650:161;;;;;;;;;;-1:-1:-1;18650:161:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;18650:161:0;1208:187:1;19761:87:0;;;;;;;;;;-1:-1:-1;19830:10:0;;19761:87;;;1546:25:1;;;1534:2;1519:18;19761:87:0;1400:177:1;16564:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1773:32:1;;;1755:51;;1743:2;1728:18;16564:51:0;1582:230:1;18023:95:0;;;;;;;;;;-1:-1:-1;18103:7:0;;18023:95;;18817:313;;;;;;;;;;-1:-1:-1;18817:313:0;;;;;:::i;:::-;;:::i;20682:253::-;;;;;;;;;;-1:-1:-1;20682:253:0;;;;;:::i;:::-;;:::i;17934:83::-;;;;;;;;;;-1:-1:-1;18000:9:0;;17934:83;;18000:9;;;;2420:36:1;;2408:2;2393:18;17934:83:0;2278:184:1;21280:479:0;;;;;;;;;;-1:-1:-1;21280:479:0;;;;;:::i;:::-;;:::i;19136:218::-;;;;;;;;;;-1:-1:-1;19136:218:0;;;;;:::i;:::-;;:::i;16274:27::-;;;;;;;;;;;;;;;;19854:378;;;;;;;;;;-1:-1:-1;19854:378:0;;;;;:::i;:::-;;:::i;22468:107::-;;;;;;;;;;-1:-1:-1;22468:107:0;;;;;:::i;:::-;;:::i;20238:438::-;;;;;;;;;;-1:-1:-1;20238:438:0;;;;;:::i;:::-;;:::i;22801:130::-;;;;;;;;;;-1:-1:-1;22801:130:0;;;;;:::i;:::-;;:::i;16622:38::-;;;;;;;;;;;;;;;16695:40;;;;;;;;;;-1:-1:-1;16695:40:0;;;;;;;;;;;20941:333;;;;;;;;;;-1:-1:-1;20941:333:0;;;;;:::i;:::-;;:::i;27602:123::-;;;;;;;;;;-1:-1:-1;27602:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;27690:27:0;27666:4;27690:27;;;:18;:27;;;;;;;;;27602:123;16462:33;;;;;;;;;;;;;;;;18124:198;;;;;;;;;;-1:-1:-1;18124:198:0;;;;;:::i;:::-;;:::i;7099:148::-;;;;;;;;;;;;;:::i;16742:49::-;;;;;;;;;;;;;;;;19635:120;;;;;;;;;;-1:-1:-1;19635:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19727:20:0;19703:4;19727:20;;;:11;:20;;;;;;;;;19635:120;6880:87;;;;;;;;;;-1:-1:-1;6926:7:0;6953:6;-1:-1:-1;;;;;6953:6:0;6880:87;;22937:122;;;;;;;;;;-1:-1:-1;22937:122:0;;;;;:::i;:::-;;:::i;17841:87::-;;;;;;;;;;;;;:::i;19360:269::-;;;;;;;;;;-1:-1:-1;19360:269:0;;;;;:::i;:::-;;:::i;18328:167::-;;;;;;;;;;-1:-1:-1;18328:167:0;;;;;:::i;:::-;;:::i;23233:171::-;;;;;;;;;;-1:-1:-1;23233:171:0;;;;;:::i;:::-;;:::i;16356:35::-;;;;;;;;;;;;;;;;23065:162;;;;;;;;;;-1:-1:-1;23065:162:0;;;;;:::i;:::-;;:::i;18501:143::-;;;;;;;;;;-1:-1:-1;18501:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18609:18:0;;;18582:7;18609:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18501:143;22581:110;;;;;;;;;;-1:-1:-1;22581:110:0;;;;;:::i;:::-;;:::i;7253:244::-;;;;;;;;;;-1:-1:-1;7253:244:0;;;;;:::i;:::-;;:::i;22697:98::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;;;;;;;;;22771:7:::1;:16:::0;22697:98::o;17752:83::-;17789:13;17822:5;17815:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17752:83;:::o;18650:161::-;18725:4;18742:39;3145:10;18765:7;18774:6;18742:8;:39::i;:::-;-1:-1:-1;18799:4:0;18650:161;;;;;:::o;18817:313::-;18915:4;18932:36;18942:6;18950:9;18961:6;18932:9;:36::i;:::-;18979:121;18988:6;3145:10;19010:89;19048:6;19010:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19010:19:0;;;;;;:11;:19;;;;;;;;3145:10;19010:33;;;;;;;;;;:37;:89::i;:::-;18979:8;:121::i;:::-;-1:-1:-1;19118:4:0;18817:313;;;;;:::o;20682:253::-;20748:7;20787;;20776;:18;;20768:73;;;;-1:-1:-1;;;20768:73:0;;4871:2:1;20768:73:0;;;4853:21:1;4910:2;4890:18;;;4883:30;4949:34;4929:18;;;4922:62;-1:-1:-1;;;5000:18:1;;;4993:40;5050:19;;20768:73:0;4669:406:1;20768:73:0;20852:19;20875:10;:8;:10::i;:::-;20852:33;-1:-1:-1;20903:24:0;:7;20852:33;20903:11;:24::i;:::-;20896:31;20682:253;-1:-1:-1;;;20682:253:0:o;21280:479::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21362:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21354:60;;;::::0;-1:-1:-1;;;21354:60:0;;5282:2:1;21354:60:0::1;::::0;::::1;5264:21:1::0;5321:2;5301:18;;;5294:30;5360:29;5340:18;;;5333:57;5407:18;;21354:60:0::1;5080:351:1::0;21354:60:0::1;21430:9;21425:327;21449:9;:16:::0;21445:20;::::1;21425:327;;;21507:7;-1:-1:-1::0;;;;;21491:23:0::1;:9;21501:1;21491:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21491:12:0::1;:23:::0;21487:254:::1;;21550:9;21560:16:::0;;:20:::1;::::0;21579:1:::1;::::0;21560:20:::1;:::i;:::-;21550:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21535:9:::1;:12:::0;;-1:-1:-1;;;;;21550:31:0;;::::1;::::0;21545:1;;21535:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21535:46:0::1;-1:-1:-1::0;;;;;21535:46:0;;::::1;;::::0;;21600:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21639:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21639:28:0::1;::::0;;21686:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21686:15:0;;;;;-1:-1:-1;;;;;;21686:15:0::1;::::0;;;;;21425:327:::1;21280:479:::0;:::o;21487:254::-:1;21467:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21425:327;;;;21280:479:::0;:::o;19136:218::-;3145:10;19224:4;19273:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19273:34:0;;;;;;;;;;19224:4;;19241:83;;19264:7;;19273:50;;19312:10;19273:38;:50::i;19854:378::-;3145:10;19906:14;19955:19;;;:11;:19;;;;;;;;19954:20;19946:77;;;;-1:-1:-1;;;19946:77:0;;6307:2:1;19946:77:0;;;6289:21:1;6346:2;6326:18;;;6319:30;6385:34;6365:18;;;6358:62;-1:-1:-1;;;6436:18:1;;;6429:42;6488:19;;19946:77:0;6105:408:1;19946:77:0;20035:15;20060:19;20071:7;20060:10;:19::i;:::-;-1:-1:-1;;;;;;;;20108:15:0;;;;;;:7;:15;;;;;;20034:45;;-1:-1:-1;20108:28:0;;:15;-1:-1:-1;20034:45:0;;-1:-1:-1;;20108:19:0;:28::i;:::-;-1:-1:-1;;;;;20090:15:0;;;;;;:7;:15;;;;;:46;20157:7;;:20;;20169:7;20157:11;:20::i;:::-;20147:7;:30;20201:10;;:23;;20216:7;20201:14;:23::i;:::-;20188:10;:36;-1:-1:-1;;;19854:378:0:o;22468:107::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22533:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22533:34:0::1;22563:4;22533:34;::::0;;22468:107::o;20238:438::-;20328:7;20367;;20356;:18;;20348:62;;;;-1:-1:-1;;;20348:62:0;;6720:2:1;20348:62:0;;;6702:21:1;6759:2;6739:18;;;6732:30;6798:33;6778:18;;;6771:61;6849:18;;20348:62:0;6518:355:1;20348:62:0;20426:17;20421:248;;20461:15;20486:19;20497:7;20486:10;:19::i;:::-;-1:-1:-1;20460:45:0;;-1:-1:-1;20520:14:0;;-1:-1:-1;;;;;;20520:14:0;20421:248;20569:23;20601:19;20612:7;20601:10;:19::i;:::-;-1:-1:-1;20567:53:0;;-1:-1:-1;20635:22:0;;-1:-1:-1;;;;;;20635:22:0;22801:130;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;22891:15:::1;:32:::0;22801:130::o;20941:333::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21024:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21023:21;21015:61;;;::::0;-1:-1:-1;;;21015:61:0;;7080:2:1;21015:61:0::1;::::0;::::1;7062:21:1::0;7119:2;7099:18;;;7092:30;7158:29;7138:18;;;7131:57;7205:18;;21015:61:0::1;6878:351:1::0;21015:61:0::1;-1:-1:-1::0;;;;;21090:16:0;::::1;21109:1;21090:16:::0;;;:7:::1;:16;::::0;;;;;:20;21087:108:::1;;-1:-1:-1::0;;;;;21166:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21146:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21127:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21087:108:::1;-1:-1:-1::0;;;;;21205:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21205:27:0::1;21228:4;21205:27:::0;;::::1;::::0;;;21243:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21243:23:0::1;::::0;;::::1;::::0;;20941:333::o;18124:198::-;-1:-1:-1;;;;;18214:20:0;;18190:7;18214:20;;;:11;:20;;;;;;;;18210:49;;;-1:-1:-1;;;;;;18243:16:0;;;;;:7;:16;;;;;;;18124:198::o;18210:49::-;-1:-1:-1;;;;;18297:16:0;;;;;;:7;:16;;;;;;18277:37;;:19;:37::i;7099:148::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;7206:1:::1;7190:6:::0;;7169:40:::1;::::0;-1:-1:-1;;;;;7190:6:0;;::::1;::::0;7169:40:::1;::::0;7206:1;;7169:40:::1;7237:1;7220:19:::0;;-1:-1:-1;;;;;;7220:19:0::1;::::0;;7099:148::o;22937:122::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;23023:13:::1;:28:::0;22937:122::o;17841:87::-;17880:13;17913:7;17906:14;;;;;:::i;19360:269::-;19453:4;19470:129;3145:10;19493:7;19502:96;19541:15;19502:96;;;;;;;;;;;;;;;;;3145:10;19502:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19502:34:0;;;;;;;;;;;;:38;:96::i;18328:167::-;18406:4;18423:42;3145:10;18447:9;18458:6;18423:9;:42::i;23233:171::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;23310:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;23310:32:0;;::::1;;::::0;;23358:38:::1;::::0;::::1;::::0;::::1;::::0;23334:8;1373:14:1;1366:22;1348:41;;1336:2;1321:18;;1208:187;23358:38:0::1;;;;;;;;23233:171:::0;:::o;23065:162::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;23159:60:::1;23203:5;23159:25;23171:12;23159:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;23144:12;:75:::0;-1:-1:-1;23065:162:0:o;22581:110::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22648:27:0::1;22678:5;22648:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22648:35:0::1;::::0;;22581:110::o;7253:244::-;6926:7;6953:6;-1:-1:-1;;;;;6953:6:0;3145:10;7013:23;7005:68;;;;-1:-1:-1;;;7005:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7342:22:0;::::1;7334:73;;;::::0;-1:-1:-1;;;7334:73:0;;7436:2:1;7334:73:0::1;::::0;::::1;7418:21:1::0;7475:2;7455:18;;;7448:30;7514:34;7494:18;;;7487:62;-1:-1:-1;;;7565:18:1;;;7558:36;7611:19;;7334:73:0::1;7234:402:1::0;7334:73:0::1;7444:6;::::0;;7423:38:::1;::::0;-1:-1:-1;;;;;7423:38:0;;::::1;::::0;7444:6;::::1;::::0;7423:38:::1;::::0;::::1;7472:6;:17:::0;;-1:-1:-1;;;;;;7472:17:0::1;-1:-1:-1::0;;;;;7472:17:0;;;::::1;::::0;;;::::1;::::0;;7253:244::o;27731:335::-;-1:-1:-1;;;;;27824:19:0;;27816:68;;;;-1:-1:-1;;;27816:68:0;;7843:2:1;27816:68:0;;;7825:21:1;7882:2;7862:18;;;7855:30;7921:34;7901:18;;;7894:62;-1:-1:-1;;;7972:18:1;;;7965:34;8016:19;;27816:68:0;7641:400:1;27816:68:0;-1:-1:-1;;;;;27903:21:0;;27895:68;;;;-1:-1:-1;;;27895:68:0;;8248:2:1;27895:68:0;;;8230:21:1;8287:2;8267:18;;;8260:30;8326:34;8306:18;;;8299:62;-1:-1:-1;;;8377:18:1;;;8370:32;8419:19;;27895:68:0;8046:398:1;27895:68:0;-1:-1:-1;;;;;27974:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28026:32;;1546:25:1;;;28026:32:0;;1519:18:1;28026:32:0;;;;;;;27731:335;;;:::o;28072:1239::-;-1:-1:-1;;;;;28194:18:0;;28186:68;;;;-1:-1:-1;;;28186:68:0;;8651:2:1;28186:68:0;;;8633:21:1;8690:2;8670:18;;;8663:30;8729:34;8709:18;;;8702:62;-1:-1:-1;;;8780:18:1;;;8773:35;8825:19;;28186:68:0;8449:401:1;28186:68:0;-1:-1:-1;;;;;28273:16:0;;28265:64;;;;-1:-1:-1;;;28265:64:0;;9057:2:1;28265:64:0;;;9039:21:1;9096:2;9076:18;;;9069:30;9135:34;9115:18;;;9108:62;-1:-1:-1;;;9186:18:1;;;9179:33;9229:19;;28265:64:0;8855:399:1;28265:64:0;28357:1;28348:6;:10;28340:64;;;;-1:-1:-1;;;28340:64:0;;9461:2:1;28340:64:0;;;9443:21:1;9500:2;9480:18;;;9473:30;9539:34;9519:18;;;9512:62;-1:-1:-1;;;9590:18:1;;;9583:39;9639:19;;28340:64:0;9259:405:1;28340:64:0;6926:7;6953:6;-1:-1:-1;;;;;28418:15:0;;;6953:6;;28418:15;;;;:32;;-1:-1:-1;6926:7:0;6953:6;-1:-1:-1;;;;;28437:13:0;;;6953:6;;28437:13;;28418:32;28415:125;;;28483:12;;28473:6;:22;;28465:75;;;;-1:-1:-1;;;28465:75:0;;9871:2:1;28465:75:0;;;9853:21:1;9910:2;9890:18;;;9883:30;9949:34;9929:18;;;9922:62;-1:-1:-1;;;10000:18:1;;;9993:38;10048:19;;28465:75:0;9669:404:1;28465:75:0;28551:28;28582:24;28600:4;28582:9;:24::i;:::-;28551:55;;28644:12;;28620:20;:36;28617:112;;-1:-1:-1;28705:12:0;;28617:112;28790:29;;28766:53;;;;;;;28848;;-1:-1:-1;28885:16:0;;;;28884:17;28848:53;:91;;;;;28926:13;-1:-1:-1;;;;;28918:21:0;:4;-1:-1:-1;;;;;28918:21:0;;;28848:91;:129;;;;-1:-1:-1;28956:21:0;;;;;;;28848:129;28830:289;;;29027:29;;29004:52;;29071:36;29086:20;29071:14;:36::i;:::-;-1:-1:-1;;;;;29162:24:0;;29129:12;29162:24;;;:18;:24;;;;;;29144:4;;29162:24;;;:50;;-1:-1:-1;;;;;;29190:22:0;;;;;;:18;:22;;;;;;;;29162:50;29159:96;;;-1:-1:-1;29238:5:0;29159:96;29265:38;29280:4;29285:2;29288:6;29295:7;29265:14;:38::i;:::-;28175:1136;;;28072:1239;;;:::o;2397:206::-;2483:7;2544:12;2536:6;;;;2528:29;;;;-1:-1:-1;;;2528:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2579:5:0;;;2397:206::o;25063:163::-;25104:7;25125:15;25142;25161:19;:17;:19::i;:::-;25124:56;;-1:-1:-1;25124:56:0;-1:-1:-1;25198:20:0;25124:56;;25198:11;:20::i;:::-;25191:27;;;;25063:163;:::o;2189:98::-;2247:7;2274:5;2278:1;2274;:5;:::i;1877:98::-;1935:7;1962:5;1966:1;1962;:5;:::i;23598:478::-;23657:7;23666;23675;23684;23693;23702;23711;23732:23;23757:12;23771:18;23791:20;23815;23827:7;23815:11;:20::i;:::-;23731:104;;;;;;;;23847:15;23864:23;23889:12;23905:64;23917:7;23926:4;23932:10;23944:12;23958:10;:8;:10::i;:::-;23905:11;:64::i;:::-;23846:123;;-1:-1:-1;23846:123:0;-1:-1:-1;23846:123:0;-1:-1:-1;24020:15:0;;-1:-1:-1;24037:4:0;;-1:-1:-1;24043:10:0;;-1:-1:-1;24055:12:0;-1:-1:-1;;;;23598:478:0;;;;;;;;;:::o;1981:98::-;2039:7;2066:5;2070:1;2066;:5;:::i;2085:98::-;2143:7;2170:5;2174:1;2170;:5;:::i;29317:464::-;17159:16;:23;;-1:-1:-1;;17159:23:0;17178:4;17159:23;;;:16;29417:27:::1;:20:::0;29442:1:::1;29417:24;:27::i;:::-;29402:42:::0;-1:-1:-1;29455:17:0::1;29475:30;:20:::0;29402:42;29475:24:::1;:30::i;:::-;29455:50:::0;-1:-1:-1;29541:21:0::1;29573:22;29590:4:::0;29573:16:::1;:22::i;:::-;29606:18;29627:41;:21;29653:14:::0;29627:25:::1;:41::i;:::-;29606:62;;29679:35;29692:9;29703:10;29679:12;:35::i;:::-;29730:43;::::0;;10805:25:1;;;10861:2;10846:18;;10839:34;;;10889:18;;;10882:34;;;29730:43:0::1;::::0;10793:2:1;10778:18;29730:43:0::1;;;;;;;-1:-1:-1::0;;17205:16:0;:24;;-1:-1:-1;;17205:24:0;;;-1:-1:-1;;;29317:464:0:o;30630:814::-;30741:7;30737:40;;30763:14;:12;:14::i;:::-;-1:-1:-1;;;;;30792:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30816:22:0;;;;;;:11;:22;;;;;;;;30815:23;30792:46;30788:597;;;30855:48;30877:6;30885:9;30896:6;30855:21;:48::i;:::-;30788:597;;;-1:-1:-1;;;;;30926:19:0;;;;;;:11;:19;;;;;;;;30925:20;:46;;;;-1:-1:-1;;;;;;30949:22:0;;;;;;:11;:22;;;;;;;;30925:46;30921:464;;;30988:46;31008:6;31016:9;31027:6;30988:19;:46::i;30921:464::-;-1:-1:-1;;;;;31057:19:0;;;;;;:11;:19;;;;;;;;31056:20;:47;;;;-1:-1:-1;;;;;;31081:22:0;;;;;;:11;:22;;;;;;;;31080:23;31056:47;31052:333;;;31120:44;31138:6;31146:9;31157:6;31120:17;:44::i;31052:333::-;-1:-1:-1;;;;;31186:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31209:22:0;;;;;;:11;:22;;;;;;;;31186:45;31182:203;;;31248:48;31270:6;31278:9;31289:6;31248:21;:48::i;31182:203::-;31329:44;31347:6;31355:9;31366:6;31329:17;:44::i;:::-;31399:7;31395:41;;31421:15;27473;;27463:7;:25;27517:23;;27499:15;:41;27567:21;;27551:13;:37;27419:177;31421:15;30630:814;;;;:::o;25232:561::-;25329:7;;25365;;25282;;;;;25389:289;25413:9;:16;25409:20;;25389:289;;;25479:7;25455;:21;25463:9;25473:1;25463:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25463:12:0;25455:21;;;;;;;;;;;;;:31;;:66;;;25514:7;25490;:21;25498:9;25508:1;25498:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25498:12:0;25490:21;;;;;;;;;;;;;:31;25455:66;25451:97;;;25531:7;;25540;;25523:25;;;;;;;25232:561;;:::o;25451:97::-;25573:34;25585:7;:21;25593:9;25603:1;25593:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25593:12:0;25585:21;;;;;;;;;;;;;25573:7;;:11;:34::i;:::-;25563:44;;25632:34;25644:7;:21;25652:9;25662:1;25652:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25652:12:0;25644:21;;;;;;;;;;;;;25632:7;;:11;:34::i;:::-;25622:44;-1:-1:-1;25431:3:0;;;;:::i;:::-;;;;25389:289;;;-1:-1:-1;25714:7:0;;25702;;:20;;:11;:20::i;:::-;25692:7;:30;25688:61;;;25732:7;;25741;;25724:25;;;;;;25232:561;;:::o;25688:61::-;25768:7;;25777;;-1:-1:-1;25232:561:0;-1:-1:-1;25232:561:0:o;24082:437::-;24142:7;24151;24160;24169;24189:12;24204:24;24220:7;24204:15;:24::i;:::-;24189:39;;24239:18;24260:30;24282:7;24260:21;:30::i;:::-;24239:51;;24301:20;24324:32;24348:7;24324:23;:32::i;:::-;24301:55;-1:-1:-1;24367:23:0;24393:51;24301:55;24393:33;24415:10;24393:33;:7;24405:4;24393:11;:17::i;:::-;:21;;:33::i;:51::-;24367:77;24480:4;;-1:-1:-1;24486:10:0;;-1:-1:-1;24486:10:0;-1:-1:-1;24082:437:0;;-1:-1:-1;;;24082:437:0:o;24525:532::-;24662:7;;;;24718:24;:7;24730:11;24718;:24::i;:::-;24700:42;-1:-1:-1;24753:12:0;24768:21;:4;24777:11;24768:8;:21::i;:::-;24753:36;-1:-1:-1;24800:18:0;24821:27;:10;24836:11;24821:14;:27::i;:::-;24800:48;-1:-1:-1;24859:20:0;24882:29;:12;24899:11;24882:16;:29::i;:::-;24859:52;-1:-1:-1;24922:23:0;24948:51;24859:52;24948:33;24970:10;24948:33;:7;24960:4;24948:11;:17::i;:51::-;25018:7;;;;-1:-1:-1;25044:4:0;;-1:-1:-1;24525:532:0;;-1:-1:-1;;;;;;;;;24525:532:0:o;29787:471::-;29877:16;;;29891:1;29877:16;;;;;;;;29853:21;;29877:16;;;;;;;;;;-1:-1:-1;29877:16:0;29853:40;;29922:4;29904;29909:1;29904:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29904:23:0;;;-1:-1:-1;;;;;29904:23:0;;;;;29948:15;-1:-1:-1;;;;;29948:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29938:4;29943:1;29938:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29938:32:0;;;-1:-1:-1;;;;;29938:32:0;;;;;29981:62;29998:4;30013:15;30031:11;29981:8;:62::i;:::-;30054:196;;-1:-1:-1;;;30054:196:0;;-1:-1:-1;;;;;30054:15:0;:66;;;;:196;;30135:11;;30161:1;;30177:4;;30204;;30224:15;;30054:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30264:360;30345:62;30362:4;30377:15;30395:11;30345:8;:62::i;:::-;30418:15;-1:-1:-1;;;;;30418:31:0;;30457:9;30490:4;30510:11;30536:1;30552;30568:7;6926;6953:6;-1:-1:-1;;;;;6953:6:0;;6880:87;30568:7;30418:198;;;;;;-1:-1:-1;;;;;;30418:198:0;;;-1:-1:-1;;;;;12659:15:1;;;30418:198:0;;;12641:34:1;12691:18;;;12684:34;;;;12734:18;;;12727:34;;;;12777:18;;;12770:34;12841:15;;;12820:19;;;12813:44;30590:15:0;12873:19:1;;;12866:35;12575:19;;30418:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30264:360;;:::o;27101:312::-;27147:7;;:12;:34;;;;-1:-1:-1;27163:13:0;;:18;27147:34;27144:46;;;27101:312::o;27144:46::-;27218:7;;;27200:15;:25;27262:15;;;27236:23;:41;27312:13;;;27288:21;:37;-1:-1:-1;27336:11:0;;;;27358:19;;;;27388:17;27101:312::o;32676:629::-;32779:15;32796:23;32821:12;32835:23;32860:12;32874:18;32894:20;32918:19;32929:7;32918:10;:19::i;:::-;32778:159;;;;;;;;;;;;;;32966:28;32986:7;32966;:15;32974:6;-1:-1:-1;;;;;32966:15:0;-1:-1:-1;;;;;32966:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;32948:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33023:7;:15;;;;:28;;33043:7;33023:19;:28::i;:::-;-1:-1:-1;;;;;33005:15:0;;;;;;;:7;:15;;;;;;:46;;;;33083:18;;;;;;;:39;;33106:15;33083:22;:39::i;:::-;-1:-1:-1;;;;;33062:18:0;;;;;;:7;:18;;;;;:60;33136:26;33151:10;33136:14;:26::i;:::-;33173:30;33190:12;33173:16;:30::i;:::-;33214:23;33226:4;33232;33214:11;:23::i;:::-;33270:9;-1:-1:-1;;;;;33253:44:0;33262:6;-1:-1:-1;;;;;33253:44:0;;33281:15;33253:44;;;;1546:25:1;;1534:2;1519:18;;1400:177;33253:44:0;;;;;;;;32767:538;;;;;;;32676:629;;;:::o;32021:649::-;32122:15;32139:23;32164:12;32178:23;32203:12;32217:18;32237:20;32261:19;32272:7;32261:10;:19::i;:::-;32121:159;;;;;;;;;;;;;;32309:28;32329:7;32309;:15;32317:6;-1:-1:-1;;;;;32309:15:0;-1:-1:-1;;;;;32309:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;32291:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32369:18;;;;;:7;:18;;;;;:39;;32392:15;32369:22;:39::i;:::-;-1:-1:-1;;;;;32348:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32440:7;:18;;;;:39;;32463:15;32440:22;:39::i;31450:565::-;31549:15;31566:23;31591:12;31605:23;31630:12;31644:18;31664:20;31688:19;31699:7;31688:10;:19::i;:::-;31548:159;;;;;;;;;;;;;;31736:28;31756:7;31736;:15;31744:6;-1:-1:-1;;;;;31736:15:0;-1:-1:-1;;;;;31736:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;21765:697::-;21864:15;21881:23;21906:12;21920:23;21945:12;21959:18;21979:20;22003:19;22014:7;22003:10;:19::i;:::-;21863:159;;;;;;;;;;;;;;22051:28;22071:7;22051;:15;22059:6;-1:-1:-1;;;;;22051:15:0;-1:-1:-1;;;;;22051:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;22033:15:0;;;;;;:7;:15;;;;;;;;:46;;;;22108:7;:15;;;;:28;;22128:7;22108:19;:28::i;26593:154::-;26657:7;26684:55;26723:5;26684:20;26696:7;;26684;:11;;:20;;;;:::i;26929:166::-;26999:7;27026:61;27071:5;27026:26;27038:13;;27026:7;:11;;:26;;;;:::i;26753:170::-;26825:7;26852:63;26899:5;26852:28;26864:15;;26852:7;:11;;:28;;;;:::i;25799:355::-;25862:19;25885:10;:8;:10::i;:::-;25862:33;-1:-1:-1;25906:18:0;25927:27;:10;25862:33;25927:14;:27::i;:::-;26006:4;25990:22;;;;:7;:22;;;;;;25906:48;;-1:-1:-1;25990:38:0;;25906:48;25990:26;:38::i;:::-;25981:4;25965:22;;;;:7;:22;;;;;;;;:63;;;;26042:11;:26;;;;;;26039:107;;;26124:4;26108:22;;;;:7;:22;;;;;;:38;;26135:10;26108:26;:38::i;:::-;26099:4;26083:22;;;;:7;:22;;;;;:63;26039:107;25851:303;;25799:355;:::o;26160:427::-;26227:19;26250:10;:8;:10::i;:::-;26227:33;-1:-1:-1;26271:20:0;26294:29;:12;26227:33;26294:16;:29::i;:::-;26379:25;;-1:-1:-1;;;;;26379:25:0;26371:34;;;;:7;:34;;;;;;26271:52;;-1:-1:-1;26371:52:0;;26271;26371:38;:52::i;:::-;26342:25;;;-1:-1:-1;;;;;26342:25:0;;;26334:34;;;;:7;:34;;;;;;;;:89;;;;26449:25;;;;;26437:38;;:11;:38;;;;;;;26434:145;;;26535:25;;-1:-1:-1;;;;;26535:25:0;26527:34;;;;:7;:34;;;;;;:52;;26566:12;26527:38;:52::i;:::-;26498:25;;-1:-1:-1;;;;;26498:25:0;26490:34;;;;:7;:34;;;;;:89;26216:371;;26160:427;:::o;23445:147::-;23523:7;;:17;;23535:4;23523:11;:17::i;:::-;23513:7;:27;23564:10;;:20;;23579:4;23564:14;:20::i;:::-;23551:10;:33;-1:-1:-1;;23445:147:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;807:70;752:131;:::o;888:315::-;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2467:247::-;2526:6;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2634:9;2621:23;2653:31;2678:5;2653:31;:::i;2719:160::-;2784:20;;2840:13;;2833:21;2823:32;;2813:60;;2869:1;2866;2859:12;2813:60;2719:160;;;:::o;2884:248::-;2949:6;2957;3010:2;2998:9;2989:7;2985:23;2981:32;2978:52;;;3026:1;3023;3016:12;2978:52;3062:9;3049:23;3039:33;;3091:35;3122:2;3111:9;3107:18;3091:35;:::i;:::-;3081:45;;2884:248;;;;;:::o;3345:180::-;3401:6;3454:2;3442:9;3433:7;3429:23;3425:32;3422:52;;;3470:1;3467;3460:12;3422:52;3493:26;3509:9;3493:26;:::i;3530:388::-;3598:6;3606;3659:2;3647:9;3638:7;3634:23;3630:32;3627:52;;;3675:1;3672;3665:12;3627:52;3714:9;3701:23;3733:31;3758:5;3733:31;:::i;:::-;3783:5;-1:-1:-1;3840:2:1;3825:18;;3812:32;3853:33;3812:32;3853:33;:::i;:::-;3905:7;3895:17;;;3530:388;;;;;:::o;3923:356::-;4125:2;4107:21;;;4144:18;;;4137:30;4203:34;4198:2;4183:18;;4176:62;4270:2;4255:18;;3923:356::o;4284:380::-;4363:1;4359:12;;;;4406;;;4427:61;;4481:4;4473:6;4469:17;4459:27;;4427:61;4534:2;4526:6;4523:14;4503:18;4500:38;4497:161;;4580:10;4575:3;4571:20;4568:1;4561:31;4615:4;4612:1;4605:15;4643:4;4640:1;4633:15;4497:161;;4284:380;;;:::o;5436:127::-;5497:10;5492:3;5488:20;5485:1;5478:31;5528:4;5525:1;5518:15;5552:4;5549:1;5542:15;5568:127;5629:10;5624:3;5620:20;5617:1;5610:31;5660:4;5657:1;5650:15;5684:4;5681:1;5674:15;5700:128;5767:9;;;5788:11;;;5785:37;;;5802:18;;:::i;5833:127::-;5894:10;5889:3;5885:20;5882:1;5875:31;5925:4;5922:1;5915:15;5949:4;5946:1;5939:15;5965:135;6004:3;6025:17;;;6022:43;;6045:18;;:::i;:::-;-1:-1:-1;6092:1:1;6081:13;;5965:135::o;10078:217::-;10118:1;10144;10134:132;;10188:10;10183:3;10179:20;10176:1;10169:31;10223:4;10220:1;10213:15;10251:4;10248:1;10241:15;10134:132;-1:-1:-1;10280:9:1;;10078:217::o;10300:125::-;10365:9;;;10386:10;;;10383:36;;;10399:18;;:::i;10430:168::-;10503:9;;;10534;;10551:15;;;10545:22;;10531:37;10521:71;;10572:18;;:::i;11059:251::-;11129:6;11182:2;11170:9;11161:7;11157:23;11153:32;11150:52;;;11198:1;11195;11188:12;11150:52;11230:9;11224:16;11249:31;11274:5;11249:31;:::i;11315:980::-;11577:4;11625:3;11614:9;11610:19;11656:6;11645:9;11638:25;11682:2;11720:6;11715:2;11704:9;11700:18;11693:34;11763:3;11758:2;11747:9;11743:18;11736:31;11787:6;11822;11816:13;11853:6;11845;11838:22;11891:3;11880:9;11876:19;11869:26;;11930:2;11922:6;11918:15;11904:29;;11951:1;11961:195;11975:6;11972:1;11969:13;11961:195;;;12040:13;;-1:-1:-1;;;;;12036:39:1;12024:52;;12131:15;;;;12096:12;;;;12072:1;11990:9;11961:195;;;-1:-1:-1;;;;;;;12212:32:1;;;;12207:2;12192:18;;12185:60;-1:-1:-1;;;12276:3:1;12261:19;12254:35;12173:3;11315:980;-1:-1:-1;;;11315:980:1:o;12912:306::-;13000:6;13008;13016;13069:2;13057:9;13048:7;13044:23;13040:32;13037:52;;;13085:1;13082;13075:12;13037:52;13114:9;13108:16;13098:26;;13164:2;13153:9;13149:18;13143:25;13133:35;;13208:2;13197:9;13193:18;13187:25;13177:35;;12912:306;;;;;:::o
Swarm Source
ipfs://831c12864cbdde8c0209a9c2e06e52bff29741c5904636f6c2c03f0c495ba984
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.