ERC-20
Overview
Max Total Supply
1,000,000,000 PSH!
Holders
17
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000014 PSH!Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TOKEN
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-15 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Ownable is Context { address internal _owner; address private _previousOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = _msgSender(); 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; } } contract LockToken is Ownable { bool public isOpen = false; mapping(address => bool) private _whiteList; modifier open(address from, address to) { require(isOpen || _whiteList[from] || _whiteList[to], " Trading is not Open"); _; } constructor() { _whiteList[msg.sender] = true; _whiteList[address(this)] = true; } function openTrade(bool value) external onlyOwner { isOpen = value; } function includeToWhiteList(address _users, bool _trueFalse) external onlyOwner { _whiteList[_users] = _trueFalse; } } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context,Ownable, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ 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; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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 TOKEN is ERC20, LockToken { using SafeMath for uint256; using Address for address; mapping (address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxWallet; address public _marketingWalletAddress; address public _liquidityAddress; address private _burnAddress; // Buy tax uint256 public _buyLiqudityFee = 0; uint256 public _buyMarketingFee = 0; // Sell tax uint256 public _sellLiqudityFee = 2; uint256 public _sellMarketingFee = 8; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public numTokensSellToSendFees; uint256 public _maxWalletBalance; event setSwapAndSendFeeEnabledUpdated(bool enabled); constructor () ERC20("Psh! Inu", "PSH!"){ numTokensSellToSendFees = 1000000 * 10 ** decimals(); _maxWalletBalance = 30000000 * 10 ** decimals(); _marketingWalletAddress = 0x38fbA6a62ad9F659fb9B43f975EA1d846dDD7fc6; _liquidityAddress = 0x64cd9456bf681C99481b04C4fD4D8485C2c1bd7E; _burnAddress = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_marketingWalletAddress]= true; _isExcludedFromFee[_liquidityAddress]= true; // exclude from the Max wallet balance _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[address(this)] = true; _isExcludedFromMaxWallet[_marketingWalletAddress] = true; _isExcludedFromMaxWallet[_liquidityAddress] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 1000000000 * 10 ** decimals()); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function includeAndExcludedFromMaxWallet(address account, bool value) public onlyOwner { _isExcludedFromMaxWallet[account] = value; } function isExcludedFromMaxWallet(address account) public view returns(bool){ return _isExcludedFromMaxWallet[account]; } function setBuyFeePercent(uint256 lFee, uint256 mFee) external onlyOwner { _buyLiqudityFee = lFee; _buyMarketingFee = mFee; } function setSellFeePercent(uint256 lFee, uint256 mFee) external onlyOwner { _sellLiqudityFee = lFee; _sellMarketingFee = mFee; } function setMarketingWalletAddress(address _addr) external onlyOwner { _marketingWalletAddress = _addr; } function setDevWalletAddress(address _addr) external onlyOwner { _liquidityAddress = _addr; } function setnumTokensSellToSendFees(uint256 amount) external onlyOwner { numTokensSellToSendFees = amount * 10 ** decimals(); } function setMaxBalance(uint256 maxBalancePercent) external onlyOwner { _maxWalletBalance = maxBalancePercent * 10** decimals(); } function setRouterAddress(address newRouter) external onlyOwner { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; } function setSwapAndSendFeeEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit setSwapAndSendFeeEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} // to withdraw stucked ETH function withdrawStuckedFunds(uint amount) external onlyOwner{ // This is the current recommended method to use. (bool sent,) = _owner.call{value: amount}(""); require(sent, "Failed to send ETH"); } // Withdraw stuked tokens function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){ return IERC20(tokenAddress).transfer(msg.sender, tokens); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _transfer( address from, address to, uint256 amount ) internal override open(from, to){ 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 != address(this) && to != _burnAddress && to != uniswapV2Pair ) { uint256 currentBalance = balanceOf(to); require(_isExcludedFromMaxWallet[to] || (currentBalance + amount <= _maxWalletBalance), "ERC20: Reached max wallet holding"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToSendFees; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToSendFees; inSwapAndLiquify = true; swapBack(contractTokenBalance); inSwapAndLiquify = false; } if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ super._transfer(from, to, amount); } else { if (from == uniswapV2Pair) { // buy uint256 lpTokens = amount.div(100).mul(_buyLiqudityFee); uint256 marketingTokens = amount.div(100).mul(_buyMarketingFee); if(lpTokens == 0 || marketingTokens == 0) { super._transfer(from, to, amount); return; } amount= amount.sub(lpTokens).sub(marketingTokens); super._transfer(from, address(this), lpTokens.add(marketingTokens)); super._transfer(from, to, amount); } else if (to == uniswapV2Pair) { // sell uint256 lpTokens = amount.div(100).mul(_sellLiqudityFee); uint256 marketingTokens = amount.div(100).mul(_sellMarketingFee); if(lpTokens == 0 || marketingTokens == 0) { super._transfer(from, to, amount); return; } amount= amount.sub(lpTokens).sub(marketingTokens); super._transfer(from, address(this), lpTokens.add(marketingTokens)); super._transfer(from, to, amount); } else { // transfer super._transfer(from, to, amount); } } } function swapBack(uint256 contractBalance) private { uint256 tokensForLiquidity = contractBalance.div(100).mul(_sellLiqudityFee); uint256 marketingTokens = contractBalance.div(100).mul(_sellMarketingFee); uint256 totalTokensToSwap = tokensForLiquidity + marketingTokens ; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} bool success; swapTokensForEth(contractBalance); uint256 ethBalance = address(this).balance; uint256 ethForMarketing = ethBalance * marketingTokens / (totalTokensToSwap); uint256 ethForLiquidity = ethBalance * tokensForLiquidity / (totalTokensToSwap); (success,) = address(_marketingWalletAddress).call{value: ethForMarketing}(""); (success,) = address(_liquidityAddress).call{value: ethForLiquidity}(""); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function airdrop(address[] memory wallets, uint256[] memory amounts) external onlyOwner { require(wallets.length == amounts.length, "arrays must be the same length"); require(wallets.length <= 200, "Can only airdrop 200 wallets per txn due to gas limits"); for (uint i=0; i<wallets.length; i++) { address wallet = wallets[i]; uint256 amount = amounts[i] * 10 ** decimals(); transfer(wallet, amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabledUpdated","type":"event"},{"inputs":[],"name":"_buyLiqudityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiqudityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_users","type":"address"},{"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"includeToWhiteList","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":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","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":"numTokensSellToSendFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setnumTokensSellToSendFees","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdrawStuckedTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526007805460ff191690556000600e819055600f55600260105560086011556013805460ff60a81b1916600160a81b1790553480156200004257600080fd5b50604051806040016040528060088152602001675073682120496e7560c01b815250604051806040016040528060048152602001635053482160e01b815250620000916200049f60201b60201c565b600080546001600160a01b0319166001600160a01b039290921691821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38151620000ed906005906020850190620005c4565b50805162000103906006906020840190620005c4565b5050336000908152600860205260408082208054600160ff1991821681179092553084529190922080549091169091179055506200013f601290565b6200014c90600a6200077d565b6200015b90620f42406200078e565b6014556200016c6012600a6200077d565b6200017c906301c9c3806200078e565b601555600b80546001600160a01b03199081167338fba6a62ad9f659fb9b43f975ea1d846ddd7fc617909155600c805482167364cd9456bf681c99481b04c4fd4d8485c2c1bd7e179055600d805490911661dead1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a0155916004808201926020929091908290030181865afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d9190620007b0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c19190620007b0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003359190620007b0565b601380546001600160a01b03199081166001600160a01b039384161790915560128054909116918316919091179055600160096000620003723390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155600b54821684528284208054861682179055600c54909116835290822080549093168117909255600a90620003f46000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600a909352818320805485166001908117909155600b54821684528284208054861682179055600c5490911683529120805490921617905562000498620004746000546001600160a01b031690565b620004826012600a6200077d565b6200049290633b9aca006200078e565b620004a3565b5062000839565b3390565b6001600160a01b038216620004fe5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b6200051a81600454620005ad60201b6200136a1790919060201c565b6004556001600160a01b0382166000908152600260209081526040909120546200054f9183906200136a620005ad821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620005a19085815260200190565b60405180910390a35050565b6000620005bb8284620007e2565b90505b92915050565b828054620005d290620007fd565b90600052602060002090601f016020900481019282620005f6576000855562000641565b82601f106200061157805160ff191683800117855562000641565b8280016001018555821562000641579182015b828111156200064157825182559160200191906001019062000624565b506200064f92915062000653565b5090565b5b808211156200064f576000815560010162000654565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006c1578160001904821115620006a557620006a56200066a565b80851615620006b357918102915b93841c939080029062000685565b509250929050565b600082620006da57506001620005be565b81620006e957506000620005be565b81600181146200070257600281146200070d576200072d565b6001915050620005be565b60ff8411156200072157620007216200066a565b50506001821b620005be565b5060208310610133831016604e8410600b841016171562000752575081810a620005be565b6200075e838362000680565b80600019048211156200077557620007756200066a565b029392505050565b6000620005bb60ff841683620006c9565b6000816000190483118215151615620007ab57620007ab6200066a565b500290565b600060208284031215620007c357600080fd5b81516001600160a01b0381168114620007db57600080fd5b9392505050565b60008219821115620007f857620007f86200066a565b500190565b600181811c908216806200081257607f821691505b6020821081036200083357634e487b7160e01b600052602260045260246000fd5b50919050565b61241580620008496000396000f3fe60806040526004361061026b5760003560e01c80636724348211610144578063be291dc6116100b6578063d4a5af841161007a578063d4a5af8414610760578063dd62ed3e14610776578063ea2f0b37146107bc578063ea50cf4e146107dc578063f2fde38b146107fc578063f9dfdaeb1461081c57600080fd5b8063be291dc6146106d4578063c230358f146106f4578063c5d2418914610714578063c86079521461072a578063caea37b71461074057600080fd5b806382cb0ba31161010857806382cb0ba31461062b5780638da5cb5b1461064157806395d89b411461065f5780639d51d9b714610674578063a457c2d714610694578063a9059cbb146106b457600080fd5b806367243482146105675780636c6ac329146105875780636dd3d39f146105a757806370a08231146105e0578063715018a61461061657600080fd5b8063437823ec116101dd5780634cb80fd5116101a15780634cb80fd5146104a25780635342acb4146104c257806353cae9cf146104fb57806355200576146105115780635d729d8c146105275780635d8f29871461054757600080fd5b8063437823ec1461040757806347535d7b1461042757806348eb61b61461044157806349bd5a5e146104615780634a74bb021461048157600080fd5b806323b872dd1161022f57806323b872dd1461034b57806330d35dee1461036b578063313ce5671461038b57806339509351146103a75780634144d9e4146103c757806341cb87fc146103e757600080fd5b806306fdde0314610277578063095ea7b3146102a2578063120a0612146102d25780631694505e146102f457806318160ddd1461032c57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c61083c565b6040516102999190611cc6565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004611d33565b6108ce565b6040519015158152602001610299565b3480156102de57600080fd5b506102f26102ed366004611d5f565b6108e5565b005b34801561030057600080fd5b50601254610314906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b34801561033857600080fd5b506004545b604051908152602001610299565b34801561035757600080fd5b506102c2610366366004611d7c565b61093a565b34801561037757600080fd5b506102f2610386366004611dcb565b6109a3565b34801561039757600080fd5b5060405160128152602001610299565b3480156103b357600080fd5b506102c26103c2366004611d33565b6109e0565b3480156103d357600080fd5b50600b54610314906001600160a01b031681565b3480156103f357600080fd5b506102f2610402366004611d5f565b610a16565b34801561041357600080fd5b506102f2610422366004611d5f565b610bbb565b34801561043357600080fd5b506007546102c29060ff1681565b34801561044d57600080fd5b506102f261045c366004611de8565b610c09565b34801561046d57600080fd5b50601354610314906001600160a01b031681565b34801561048d57600080fd5b506013546102c290600160a81b900460ff1681565b3480156104ae57600080fd5b506102f26104bd366004611d5f565b610c5e565b3480156104ce57600080fd5b506102c26104dd366004611d5f565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561050757600080fd5b5061033d60145481565b34801561051d57600080fd5b5061033d600e5481565b34801561053357600080fd5b506102c2610542366004611d33565b610caa565b34801561055357600080fd5b506102f2610562366004611de8565b610d4d565b34801561057357600080fd5b506102f2610582366004611ef7565b610da2565b34801561059357600080fd5b50600c54610314906001600160a01b031681565b3480156105b357600080fd5b506102c26105c2366004611d5f565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156105ec57600080fd5b5061033d6105fb366004611d5f565b6001600160a01b031660009081526002602052604090205490565b34801561062257600080fd5b506102f2610f18565b34801561063757600080fd5b5061033d60105481565b34801561064d57600080fd5b506000546001600160a01b0316610314565b34801561066b57600080fd5b5061028c610f8c565b34801561068057600080fd5b506102f261068f366004611fb9565b610f9b565b3480156106a057600080fd5b506102c26106af366004611d33565b610fe1565b3480156106c057600080fd5b506102c26106cf366004611d33565b611030565b3480156106e057600080fd5b506102f26106ef366004611fd2565b61103d565b34801561070057600080fd5b506102f261070f366004611fb9565b611072565b34801561072057600080fd5b5061033d600f5481565b34801561073657600080fd5b5061033d60115481565b34801561074c57600080fd5b506102f261075b366004611fb9565b6110b8565b34801561076c57600080fd5b5061033d60155481565b34801561078257600080fd5b5061033d610791366004611ff4565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107c857600080fd5b506102f26107d7366004611d5f565b61117e565b3480156107e857600080fd5b506102f26107f7366004611dcb565b6111c9565b34801561080857600080fd5b506102f2610817366004611d5f565b61124b565b34801561082857600080fd5b506102f2610837366004611fd2565b611335565b60606005805461084b90612022565b80601f016020809104026020016040519081016040528092919081815260200182805461087790612022565b80156108c45780601f10610899576101008083540402835291602001916108c4565b820191906000526020600020905b8154815290600101906020018083116108a757829003601f168201915b5050505050905090565b60006108db338484611376565b5060015b92915050565b6000546001600160a01b031633146109185760405162461bcd60e51b815260040161090f9061205c565b60405180910390fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600061094784848461149b565b610999843361099485604051806060016040528060288152602001612393602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906118c6565b611376565b5060019392505050565b6000546001600160a01b031633146109cd5760405162461bcd60e51b815260040161090f9061205c565b6007805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108db918590610994908661136a565b6000546001600160a01b03163314610a405760405162461bcd60e51b815260040161090f9061205c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190612091565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b189190612091565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190612091565b601380546001600160a01b039283166001600160a01b0319918216179091556012805493909216921691909117905550565b6000546001600160a01b03163314610be55760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610c335760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c885760405162461bcd60e51b815260040161090f9061205c565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610cd55760405162461bcd60e51b815260040161090f9061205c565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4691906120ae565b9392505050565b6000546001600160a01b03163314610d775760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610dcc5760405162461bcd60e51b815260040161090f9061205c565b8051825114610e1d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161090f565b60c882511115610e8e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b606482015260840161090f565b60005b8251811015610f13576000838281518110610eae57610eae6120cb565b602002602001015190506000610ec2601290565b610ecd90600a6121db565b848481518110610edf57610edf6120cb565b6020026020010151610ef191906121ea565b9050610efd8282611030565b5050508080610f0b90612209565b915050610e91565b505050565b6000546001600160a01b03163314610f425760405162461bcd60e51b815260040161090f9061205c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606006805461084b90612022565b6000546001600160a01b03163314610fc55760405162461bcd60e51b815260040161090f9061205c565b610fd16012600a6121db565b610fdb90826121ea565b60155550565b60006108db3384610994856040518060600160405280602581526020016123bb602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906118c6565b60006108db33848461149b565b6000546001600160a01b031633146110675760405162461bcd60e51b815260040161090f9061205c565b601091909155601155565b6000546001600160a01b0316331461109c5760405162461bcd60e51b815260040161090f9061205c565b6110a86012600a6121db565b6110b290826121ea565b60145550565b6000546001600160a01b031633146110e25760405162461bcd60e51b815260040161090f9061205c565b600080546040516001600160a01b039091169083908381818185875af1925050503d806000811461112f576040519150601f19603f3d011682016040523d82523d6000602084013e611134565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b604482015260640161090f565b5050565b6000546001600160a01b031633146111a85760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146111f35760405162461bcd60e51b815260040161090f9061205c565b60138054821515600160a81b0260ff60a81b199091161790556040517f9c879357f684a2490acb6a5a3b6b1ab4562ef9ddb2ea8104c2e15c73833ee4f49061124090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112755760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b0381166112da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461135f5760405162461bcd60e51b815260040161090f9061205c565b600e91909155600f55565b6000610d468284612222565b6001600160a01b0383166113d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090f565b6001600160a01b0382166114395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6007548390839060ff16806114c857506001600160a01b03821660009081526008602052604090205460ff165b806114eb57506001600160a01b03811660009081526008602052604090205460ff165b61152e5760405162461bcd60e51b8152602060048201526014602482015273102a3930b234b7339034b9903737ba1027b832b760611b604482015260640161090f565b6001600160a01b0385166115545760405162461bcd60e51b815260040161090f9061223a565b6001600160a01b03841661157a5760405162461bcd60e51b815260040161090f9061227f565b600083116115dc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161090f565b6000546001600160a01b0386811691161480159061160357506001600160a01b0384163014155b801561161d5750600d546001600160a01b03858116911614155b801561163757506013546001600160a01b03858116911614155b156116d2576001600160a01b038416600090815260026020908152604080832054600a9092529091205460ff168061167a57506015546116778583612222565b11155b6116d05760405162461bcd60e51b815260206004820152602160248201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6044820152606760f81b606482015260840161090f565b505b30600090815260026020526040902054601454811080159081906117005750601354600160a01b900460ff16155b801561171a57506013546001600160a01b03888116911614155b801561172f5750601354600160a81b900460ff165b15611763576014546013805460ff60a01b1916600160a01b1790559150611755826118f2565b6013805460ff60a01b191690555b6001600160a01b03871660009081526009602052604090205460ff16806117a257506001600160a01b03861660009081526009602052604090205460ff165b156117b7576117b2878787611a3c565b6118bc565b6013546001600160a01b039081169088160361186857600e546000906117e8906117e2886064611b48565b90611b54565b90506000611806600f546117e260648a611b4890919063ffffffff16565b9050811580611813575080155b1561182c57611823898989611a3c565b505050506118bf565b6118408161183a8985611b60565b90611b60565b96506118568930611851858561136a565b611a3c565b611861898989611a3c565b50506118bc565b6013546001600160a01b03908116908716036118b157601054600090611893906117e2886064611b48565b905060006118066011546117e260648a611b4890919063ffffffff16565b6118bc878787611a3c565b50505b5050505050565b600081848411156118ea5760405162461bcd60e51b815260040161090f9190611cc6565b505050900390565b601054600090611907906117e2846064611b48565b905060006119256011546117e2606486611b4890919063ffffffff16565b905060006119338284612222565b9050831580611940575080155b1561194b5750505050565b600061195685611b6c565b4760008361196486846121ea565b61196e91906122c2565b905060008461197d88856121ea565b61198791906122c2565b600b546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146119d5576040519150601f19603f3d011682016040523d82523d6000602084013e6119da565b606091505b5050600c546040519195506001600160a01b0316908290600081818185875af1925050503d8060008114611a2a576040519150601f19603f3d011682016040523d82523d6000602084013e611a2f565b606091505b5050505050505050505050565b6001600160a01b038316611a625760405162461bcd60e51b815260040161090f9061223a565b6001600160a01b038216611a885760405162461bcd60e51b815260040161090f9061227f565b611ac58160405180606001604052806026815260200161236d602691396001600160a01b03861660009081526002602052604090205491906118c6565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611af4908261136a565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061148e9085815260200190565b6000610d4682846122c2565b6000610d4682846121ea565b6000610d4682846122e4565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ba157611ba16120cb565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e9190612091565b81600181518110611c3157611c316120cb565b6001600160a01b039283166020918202929092010152601254611c579130911684611376565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c909085906000908690309042906004016122fb565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b81811015611cf357858101830151858201604001528201611cd7565b81811115611d05576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611d3057600080fd5b50565b60008060408385031215611d4657600080fd5b8235611d5181611d1b565b946020939093013593505050565b600060208284031215611d7157600080fd5b8135610d4681611d1b565b600080600060608486031215611d9157600080fd5b8335611d9c81611d1b565b92506020840135611dac81611d1b565b929592945050506040919091013590565b8015158114611d3057600080fd5b600060208284031215611ddd57600080fd5b8135610d4681611dbd565b60008060408385031215611dfb57600080fd5b8235611e0681611d1b565b91506020830135611e1681611dbd565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e6057611e60611e21565b604052919050565b600067ffffffffffffffff821115611e8257611e82611e21565b5060051b60200190565b600082601f830112611e9d57600080fd5b81356020611eb2611ead83611e68565b611e37565b82815260059290921b84018101918181019086841115611ed157600080fd5b8286015b84811015611eec5780358352918301918301611ed5565b509695505050505050565b60008060408385031215611f0a57600080fd5b823567ffffffffffffffff80821115611f2257600080fd5b818501915085601f830112611f3657600080fd5b81356020611f46611ead83611e68565b82815260059290921b84018101918181019089841115611f6557600080fd5b948201945b83861015611f8c578535611f7d81611d1b565b82529482019490820190611f6a565b96505086013592505080821115611fa257600080fd5b50611faf85828601611e8c565b9150509250929050565b600060208284031215611fcb57600080fd5b5035919050565b60008060408385031215611fe557600080fd5b50508035926020909101359150565b6000806040838503121561200757600080fd5b823561201281611d1b565b91506020830135611e1681611d1b565b600181811c9082168061203657607f821691505b60208210810361205657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156120a357600080fd5b8151610d4681611d1b565b6000602082840312156120c057600080fd5b8151610d4681611dbd565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612132578160001904821115612118576121186120e1565b8085161561212557918102915b93841c93908002906120fc565b509250929050565b600082612149575060016108df565b81612156575060006108df565b816001811461216c576002811461217657612192565b60019150506108df565b60ff841115612187576121876120e1565b50506001821b6108df565b5060208310610133831016604e8410600b84101617156121b5575081810a6108df565b6121bf83836120f7565b80600019048211156121d3576121d36120e1565b029392505050565b6000610d4660ff84168361213a565b6000816000190483118215151615612204576122046120e1565b500290565b60006001820161221b5761221b6120e1565b5060010190565b60008219821115612235576122356120e1565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826122df57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156122f6576122f66120e1565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561234b5784516001600160a01b031683529383019391830191600101612326565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a09340cca8b024d27691b1da5709e80968636a94744fc06aada336f70be2b56164736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c80636724348211610144578063be291dc6116100b6578063d4a5af841161007a578063d4a5af8414610760578063dd62ed3e14610776578063ea2f0b37146107bc578063ea50cf4e146107dc578063f2fde38b146107fc578063f9dfdaeb1461081c57600080fd5b8063be291dc6146106d4578063c230358f146106f4578063c5d2418914610714578063c86079521461072a578063caea37b71461074057600080fd5b806382cb0ba31161010857806382cb0ba31461062b5780638da5cb5b1461064157806395d89b411461065f5780639d51d9b714610674578063a457c2d714610694578063a9059cbb146106b457600080fd5b806367243482146105675780636c6ac329146105875780636dd3d39f146105a757806370a08231146105e0578063715018a61461061657600080fd5b8063437823ec116101dd5780634cb80fd5116101a15780634cb80fd5146104a25780635342acb4146104c257806353cae9cf146104fb57806355200576146105115780635d729d8c146105275780635d8f29871461054757600080fd5b8063437823ec1461040757806347535d7b1461042757806348eb61b61461044157806349bd5a5e146104615780634a74bb021461048157600080fd5b806323b872dd1161022f57806323b872dd1461034b57806330d35dee1461036b578063313ce5671461038b57806339509351146103a75780634144d9e4146103c757806341cb87fc146103e757600080fd5b806306fdde0314610277578063095ea7b3146102a2578063120a0612146102d25780631694505e146102f457806318160ddd1461032c57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c61083c565b6040516102999190611cc6565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004611d33565b6108ce565b6040519015158152602001610299565b3480156102de57600080fd5b506102f26102ed366004611d5f565b6108e5565b005b34801561030057600080fd5b50601254610314906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b34801561033857600080fd5b506004545b604051908152602001610299565b34801561035757600080fd5b506102c2610366366004611d7c565b61093a565b34801561037757600080fd5b506102f2610386366004611dcb565b6109a3565b34801561039757600080fd5b5060405160128152602001610299565b3480156103b357600080fd5b506102c26103c2366004611d33565b6109e0565b3480156103d357600080fd5b50600b54610314906001600160a01b031681565b3480156103f357600080fd5b506102f2610402366004611d5f565b610a16565b34801561041357600080fd5b506102f2610422366004611d5f565b610bbb565b34801561043357600080fd5b506007546102c29060ff1681565b34801561044d57600080fd5b506102f261045c366004611de8565b610c09565b34801561046d57600080fd5b50601354610314906001600160a01b031681565b34801561048d57600080fd5b506013546102c290600160a81b900460ff1681565b3480156104ae57600080fd5b506102f26104bd366004611d5f565b610c5e565b3480156104ce57600080fd5b506102c26104dd366004611d5f565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561050757600080fd5b5061033d60145481565b34801561051d57600080fd5b5061033d600e5481565b34801561053357600080fd5b506102c2610542366004611d33565b610caa565b34801561055357600080fd5b506102f2610562366004611de8565b610d4d565b34801561057357600080fd5b506102f2610582366004611ef7565b610da2565b34801561059357600080fd5b50600c54610314906001600160a01b031681565b3480156105b357600080fd5b506102c26105c2366004611d5f565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156105ec57600080fd5b5061033d6105fb366004611d5f565b6001600160a01b031660009081526002602052604090205490565b34801561062257600080fd5b506102f2610f18565b34801561063757600080fd5b5061033d60105481565b34801561064d57600080fd5b506000546001600160a01b0316610314565b34801561066b57600080fd5b5061028c610f8c565b34801561068057600080fd5b506102f261068f366004611fb9565b610f9b565b3480156106a057600080fd5b506102c26106af366004611d33565b610fe1565b3480156106c057600080fd5b506102c26106cf366004611d33565b611030565b3480156106e057600080fd5b506102f26106ef366004611fd2565b61103d565b34801561070057600080fd5b506102f261070f366004611fb9565b611072565b34801561072057600080fd5b5061033d600f5481565b34801561073657600080fd5b5061033d60115481565b34801561074c57600080fd5b506102f261075b366004611fb9565b6110b8565b34801561076c57600080fd5b5061033d60155481565b34801561078257600080fd5b5061033d610791366004611ff4565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107c857600080fd5b506102f26107d7366004611d5f565b61117e565b3480156107e857600080fd5b506102f26107f7366004611dcb565b6111c9565b34801561080857600080fd5b506102f2610817366004611d5f565b61124b565b34801561082857600080fd5b506102f2610837366004611fd2565b611335565b60606005805461084b90612022565b80601f016020809104026020016040519081016040528092919081815260200182805461087790612022565b80156108c45780601f10610899576101008083540402835291602001916108c4565b820191906000526020600020905b8154815290600101906020018083116108a757829003601f168201915b5050505050905090565b60006108db338484611376565b5060015b92915050565b6000546001600160a01b031633146109185760405162461bcd60e51b815260040161090f9061205c565b60405180910390fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600061094784848461149b565b610999843361099485604051806060016040528060288152602001612393602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906118c6565b611376565b5060019392505050565b6000546001600160a01b031633146109cd5760405162461bcd60e51b815260040161090f9061205c565b6007805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108db918590610994908661136a565b6000546001600160a01b03163314610a405760405162461bcd60e51b815260040161090f9061205c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190612091565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b189190612091565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190612091565b601380546001600160a01b039283166001600160a01b0319918216179091556012805493909216921691909117905550565b6000546001600160a01b03163314610be55760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610c335760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c885760405162461bcd60e51b815260040161090f9061205c565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610cd55760405162461bcd60e51b815260040161090f9061205c565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4691906120ae565b9392505050565b6000546001600160a01b03163314610d775760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610dcc5760405162461bcd60e51b815260040161090f9061205c565b8051825114610e1d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161090f565b60c882511115610e8e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b606482015260840161090f565b60005b8251811015610f13576000838281518110610eae57610eae6120cb565b602002602001015190506000610ec2601290565b610ecd90600a6121db565b848481518110610edf57610edf6120cb565b6020026020010151610ef191906121ea565b9050610efd8282611030565b5050508080610f0b90612209565b915050610e91565b505050565b6000546001600160a01b03163314610f425760405162461bcd60e51b815260040161090f9061205c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606006805461084b90612022565b6000546001600160a01b03163314610fc55760405162461bcd60e51b815260040161090f9061205c565b610fd16012600a6121db565b610fdb90826121ea565b60155550565b60006108db3384610994856040518060600160405280602581526020016123bb602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906118c6565b60006108db33848461149b565b6000546001600160a01b031633146110675760405162461bcd60e51b815260040161090f9061205c565b601091909155601155565b6000546001600160a01b0316331461109c5760405162461bcd60e51b815260040161090f9061205c565b6110a86012600a6121db565b6110b290826121ea565b60145550565b6000546001600160a01b031633146110e25760405162461bcd60e51b815260040161090f9061205c565b600080546040516001600160a01b039091169083908381818185875af1925050503d806000811461112f576040519150601f19603f3d011682016040523d82523d6000602084013e611134565b606091505b505090508061117a5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b604482015260640161090f565b5050565b6000546001600160a01b031633146111a85760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146111f35760405162461bcd60e51b815260040161090f9061205c565b60138054821515600160a81b0260ff60a81b199091161790556040517f9c879357f684a2490acb6a5a3b6b1ab4562ef9ddb2ea8104c2e15c73833ee4f49061124090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112755760405162461bcd60e51b815260040161090f9061205c565b6001600160a01b0381166112da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461135f5760405162461bcd60e51b815260040161090f9061205c565b600e91909155600f55565b6000610d468284612222565b6001600160a01b0383166113d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090f565b6001600160a01b0382166114395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6007548390839060ff16806114c857506001600160a01b03821660009081526008602052604090205460ff165b806114eb57506001600160a01b03811660009081526008602052604090205460ff165b61152e5760405162461bcd60e51b8152602060048201526014602482015273102a3930b234b7339034b9903737ba1027b832b760611b604482015260640161090f565b6001600160a01b0385166115545760405162461bcd60e51b815260040161090f9061223a565b6001600160a01b03841661157a5760405162461bcd60e51b815260040161090f9061227f565b600083116115dc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161090f565b6000546001600160a01b0386811691161480159061160357506001600160a01b0384163014155b801561161d5750600d546001600160a01b03858116911614155b801561163757506013546001600160a01b03858116911614155b156116d2576001600160a01b038416600090815260026020908152604080832054600a9092529091205460ff168061167a57506015546116778583612222565b11155b6116d05760405162461bcd60e51b815260206004820152602160248201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6044820152606760f81b606482015260840161090f565b505b30600090815260026020526040902054601454811080159081906117005750601354600160a01b900460ff16155b801561171a57506013546001600160a01b03888116911614155b801561172f5750601354600160a81b900460ff165b15611763576014546013805460ff60a01b1916600160a01b1790559150611755826118f2565b6013805460ff60a01b191690555b6001600160a01b03871660009081526009602052604090205460ff16806117a257506001600160a01b03861660009081526009602052604090205460ff165b156117b7576117b2878787611a3c565b6118bc565b6013546001600160a01b039081169088160361186857600e546000906117e8906117e2886064611b48565b90611b54565b90506000611806600f546117e260648a611b4890919063ffffffff16565b9050811580611813575080155b1561182c57611823898989611a3c565b505050506118bf565b6118408161183a8985611b60565b90611b60565b96506118568930611851858561136a565b611a3c565b611861898989611a3c565b50506118bc565b6013546001600160a01b03908116908716036118b157601054600090611893906117e2886064611b48565b905060006118066011546117e260648a611b4890919063ffffffff16565b6118bc878787611a3c565b50505b5050505050565b600081848411156118ea5760405162461bcd60e51b815260040161090f9190611cc6565b505050900390565b601054600090611907906117e2846064611b48565b905060006119256011546117e2606486611b4890919063ffffffff16565b905060006119338284612222565b9050831580611940575080155b1561194b5750505050565b600061195685611b6c565b4760008361196486846121ea565b61196e91906122c2565b905060008461197d88856121ea565b61198791906122c2565b600b546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146119d5576040519150601f19603f3d011682016040523d82523d6000602084013e6119da565b606091505b5050600c546040519195506001600160a01b0316908290600081818185875af1925050503d8060008114611a2a576040519150601f19603f3d011682016040523d82523d6000602084013e611a2f565b606091505b5050505050505050505050565b6001600160a01b038316611a625760405162461bcd60e51b815260040161090f9061223a565b6001600160a01b038216611a885760405162461bcd60e51b815260040161090f9061227f565b611ac58160405180606001604052806026815260200161236d602691396001600160a01b03861660009081526002602052604090205491906118c6565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611af4908261136a565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061148e9085815260200190565b6000610d4682846122c2565b6000610d4682846121ea565b6000610d4682846122e4565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ba157611ba16120cb565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e9190612091565b81600181518110611c3157611c316120cb565b6001600160a01b039283166020918202929092010152601254611c579130911684611376565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c909085906000908690309042906004016122fb565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b81811015611cf357858101830151858201604001528201611cd7565b81811115611d05576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611d3057600080fd5b50565b60008060408385031215611d4657600080fd5b8235611d5181611d1b565b946020939093013593505050565b600060208284031215611d7157600080fd5b8135610d4681611d1b565b600080600060608486031215611d9157600080fd5b8335611d9c81611d1b565b92506020840135611dac81611d1b565b929592945050506040919091013590565b8015158114611d3057600080fd5b600060208284031215611ddd57600080fd5b8135610d4681611dbd565b60008060408385031215611dfb57600080fd5b8235611e0681611d1b565b91506020830135611e1681611dbd565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e6057611e60611e21565b604052919050565b600067ffffffffffffffff821115611e8257611e82611e21565b5060051b60200190565b600082601f830112611e9d57600080fd5b81356020611eb2611ead83611e68565b611e37565b82815260059290921b84018101918181019086841115611ed157600080fd5b8286015b84811015611eec5780358352918301918301611ed5565b509695505050505050565b60008060408385031215611f0a57600080fd5b823567ffffffffffffffff80821115611f2257600080fd5b818501915085601f830112611f3657600080fd5b81356020611f46611ead83611e68565b82815260059290921b84018101918181019089841115611f6557600080fd5b948201945b83861015611f8c578535611f7d81611d1b565b82529482019490820190611f6a565b96505086013592505080821115611fa257600080fd5b50611faf85828601611e8c565b9150509250929050565b600060208284031215611fcb57600080fd5b5035919050565b60008060408385031215611fe557600080fd5b50508035926020909101359150565b6000806040838503121561200757600080fd5b823561201281611d1b565b91506020830135611e1681611d1b565b600181811c9082168061203657607f821691505b60208210810361205657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156120a357600080fd5b8151610d4681611d1b565b6000602082840312156120c057600080fd5b8151610d4681611dbd565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612132578160001904821115612118576121186120e1565b8085161561212557918102915b93841c93908002906120fc565b509250929050565b600082612149575060016108df565b81612156575060006108df565b816001811461216c576002811461217657612192565b60019150506108df565b60ff841115612187576121876120e1565b50506001821b6108df565b5060208310610133831016604e8410600b84101617156121b5575081810a6108df565b6121bf83836120f7565b80600019048211156121d3576121d36120e1565b029392505050565b6000610d4660ff84168361213a565b6000816000190483118215151615612204576122046120e1565b500290565b60006001820161221b5761221b6120e1565b5060010190565b60008219821115612235576122356120e1565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826122df57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156122f6576122f66120e1565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561234b5784516001600160a01b031683529383019391830191600101612326565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a09340cca8b024d27691b1da5709e80968636a94744fc06aada336f70be2b56164736f6c634300080d0033
Deployed Bytecode Sourcemap
31511:11597:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14459:193;;;;;;;;;;-1:-1:-1;14459:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;14459:193:0;1072:187:1;35589:123:0;;;;;;;;;;-1:-1:-1;35589:123:0;;;;;:::i;:::-;;:::i;:::-;;32207:41;;;;;;;;;;-1:-1:-1;32207:41:0;;;;-1:-1:-1;;;;;32207:41:0;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;32207:41:0;1516:230:1;13157:124:0;;;;;;;;;;-1:-1:-1;13253:12:0;;13157:124;;;1897:25:1;;;1885:2;1870:18;13157:124:0;1751:177:1;15234:419:0;;;;;;;;;;-1:-1:-1;15234:419:0;;;;;:::i;:::-;;:::i;10026:91::-;;;;;;;;;;-1:-1:-1;10026:91:0;;;;;:::i;:::-;;:::i;12953:109::-;;;;;;;;;;-1:-1:-1;12953:109:0;;13044:2;2905:36:1;;2893:2;2878:18;12953:109:0;2763:184:1;16155:242:0;;;;;;;;;;-1:-1:-1;16155:242:0;;;;;:::i;:::-;;:::i;31798:38::-;;;;;;;;;;-1:-1:-1;31798:38:0;;;;-1:-1:-1;;;;;31798:38:0;;;36088:350;;;;;;;;;;-1:-1:-1;36088:350:0;;;;;:::i;:::-;;:::i;34419:127::-;;;;;;;;;;-1:-1:-1;34419:127:0;;;;;:::i;:::-;;:::i;9634:26::-;;;;;;;;;;-1:-1:-1;9634:26:0;;;;;;;;34717:159;;;;;;;;;;-1:-1:-1;34717:159:0;;;;;:::i;:::-;;:::i;32263:28::-;;;;;;;;;;-1:-1:-1;32263:28:0;;;;-1:-1:-1;;;;;32263:28:0;;;32342:40;;;;;;;;;;-1:-1:-1;32342:40:0;;;;-1:-1:-1;;;32342:40:0;;;;;;35438:135;;;;;;;;;;-1:-1:-1;35438:135:0;;;;;:::i;:::-;;:::i;37377:139::-;;;;;;;;;;-1:-1:-1;37377:139:0;;;;;:::i;:::-;-1:-1:-1;;;;;37473:27:0;37441:4;37473:27;;;:18;:27;;;;;;;;;37377:139;32397:38;;;;;;;;;;;;;;;;31972:34;;;;;;;;;;;;;;;;37154:197;;;;;;;;;;-1:-1:-1;37154:197:0;;;;;:::i;:::-;;:::i;10129:148::-;;;;;;;;;;-1:-1:-1;10129:148:0;;;;;:::i;:::-;;:::i;42522:569::-;;;;;;;;;;-1:-1:-1;42522:569:0;;;;;:::i;:::-;;:::i;31854:32::-;;;;;;;;;;-1:-1:-1;31854:32:0;;;;-1:-1:-1;;;;;31854:32:0;;;34892:150;;;;;;;;;;-1:-1:-1;34892:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;34993:33:0;34962:4;34993:33;;;:24;:33;;;;;;;;;34892:150;13374:143;;;;;;;;;;-1:-1:-1;13374:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;13483:18:0;13448:7;13483:18;;;:9;:18;;;;;;;13374:143;9102:172;;;;;;;;;;;;;:::i;32102:35::-;;;;;;;;;;;;;;;;8799:103;;;;;;;;;;-1:-1:-1;8845:7:0;8880:6;-1:-1:-1;;;;;8880:6:0;8799:103;;12094:120;;;;;;;;;;;;;:::i;35913:159::-;;;;;;;;;;-1:-1:-1;35913:159:0;;;;;:::i;:::-;;:::i;17007:293::-;;;;;;;;;;-1:-1:-1;17007:293:0;;;;;:::i;:::-;;:::i;13795:199::-;;;;;;;;;;-1:-1:-1;13795:199:0;;;;;:::i;:::-;;:::i;35246:175::-;;;;;;;;;;-1:-1:-1;35246:175:0;;;;;:::i;:::-;;:::i;35740:157::-;;;;;;;;;;-1:-1:-1;35740:157:0;;;;;:::i;:::-;;:::i;32021:35::-;;;;;;;;;;;;;;;;32152:36;;;;;;;;;;;;;;;;36832:266;;;;;;;;;;-1:-1:-1;36832:266:0;;;;;:::i;:::-;;:::i;32450:32::-;;;;;;;;;;;;;;;;14087:167;;;;;;;;;;-1:-1:-1;14087:167:0;;;;;:::i;:::-;-1:-1:-1;;;;;14211:18:0;;;14176:7;14211:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14087:167;34574:126;;;;;;;;;;-1:-1:-1;34574:126:0;;;;;:::i;:::-;;:::i;36454:200::-;;;;;;;;;;-1:-1:-1;36454:200:0;;;;;:::i;:::-;;:::i;9292:276::-;;;;;;;;;;-1:-1:-1;9292:276:0;;;;;:::i;:::-;;:::i;35058:172::-;;;;;;;;;;-1:-1:-1;35058:172:0;;;;;:::i;:::-;;:::i;11822:116::-;11876:13;11917:5;11910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:116;:::o;14459:193::-;14542:4;14567:39;4225:10;14590:7;14599:6;14567:8;:39::i;:::-;-1:-1:-1;14632:4:0;14459:193;;;;;:::o;35589:123::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;;;;;;;;;35671:17:::1;:25:::0;;-1:-1:-1;;;;;;35671:25:0::1;-1:-1:-1::0;;;;;35671:25:0;;;::::1;::::0;;;::::1;::::0;;35589:123::o;15234:419::-;15406:4;15431:36;15441:6;15449:9;15460:6;15431:9;:36::i;:::-;15486:121;15495:6;4225:10;15517:89;15555:6;15517:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15517:19:0;;;;;;:11;:19;;;;;;;;4225:10;15517:33;;;;;;;;;;:37;:89::i;:::-;15486:8;:121::i;:::-;-1:-1:-1;15633:4:0;15234:419;;;;;:::o;10026:91::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;10091:6:::1;:14:::0;;-1:-1:-1;;10091:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10026:91::o;16155:242::-;4225:10;16243:4;16300:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16300:34:0;;;;;;;;;;16243:4;;16268:83;;16291:7;;16300:50;;16339:10;16300:38;:50::i;36088:350::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;36171:35:::1;36228:9;36171:67;;36291:16;-1:-1:-1::0;;;;;36291:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36273:56:0::1;;36338:4;36345:16;-1:-1:-1::0;;;;;36345:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36273:96;::::0;-1:-1:-1;;;;;;36273:96:0::1;::::0;;;;;;-1:-1:-1;;;;;8097:15:1;;;36273:96:0::1;::::0;::::1;8079:34:1::0;8149:15;;8129:18;;;8122:43;8014:18;;36273:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36257:13;:112:::0;;-1:-1:-1;;;;;36257:112:0;;::::1;-1:-1:-1::0;;;;;;36257:112:0;;::::1;;::::0;;;36388:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;36088:350:0:o;34419:127::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34496:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34496:34:0::1;34526:4;34496:34;::::0;;34419:127::o;34717:159::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34819:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;34819:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34717:159::o;35438:135::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35526:23:::1;:31:::0;;-1:-1:-1;;;;;;35526:31:0::1;-1:-1:-1::0;;;;;35526:31:0;;;::::1;::::0;;;::::1;::::0;;35438:135::o;37154:197::-;37251:12;8880:6;;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;37286:49:::1;::::0;-1:-1:-1;;;37286:49:0;;37316:10:::1;37286:49;::::0;::::1;8350:51:1::0;8417:18;;;8410:34;;;-1:-1:-1;;;;;37286:29:0;::::1;::::0;::::1;::::0;8323:18:1;;37286:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37279:56:::0;37154:197;-1:-1:-1;;;37154:197:0:o;10129:148::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10234:18:0;;;::::1;;::::0;;;:10:::1;:18;::::0;;;;:31;;-1:-1:-1;;10234:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10129:148::o;42522:569::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;42655:7:::1;:14;42637:7;:14;:32;42629:75;;;::::0;-1:-1:-1;;;42629:75:0;;8907:2:1;42629:75:0::1;::::0;::::1;8889:21:1::0;8946:2;8926:18;;;8919:30;8985:32;8965:18;;;8958:60;9035:18;;42629:75:0::1;8705:354:1::0;42629:75:0::1;42749:3;42731:7;:14;:21;;42723:88;;;::::0;-1:-1:-1;;;42723:88:0;;9266:2:1;42723:88:0::1;::::0;::::1;9248:21:1::0;9305:2;9285:18;;;9278:30;9344:34;9324:18;;;9317:62;-1:-1:-1;;;9395:18:1;;;9388:52;9457:19;;42723:88:0::1;9064:418:1::0;42723:88:0::1;42857:6;42852:224;42869:7;:14;42867:1;:16;42852:224;;;42913:14;42930:7;42938:1;42930:10;;;;;;;;:::i;:::-;;;;;;;42913:27;;42963:14;42999:10;13044:2:::0;;12953:109;42999:10:::1;42993:16;::::0;:2:::1;:16;:::i;:::-;42980:7;42988:1;42980:10;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;42963:46;;43032:24;43041:6;43049;43032:8;:24::i;:::-;;42890:186;;42885:3;;;;;:::i;:::-;;;;42852:224;;;;42522:569:::0;;:::o;9102:172::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;9217:1:::1;9201:6:::0;;9180:40:::1;::::0;-1:-1:-1;;;;;9201:6:0;;::::1;::::0;9180:40:::1;::::0;9217:1;;9180:40:::1;9256:1;9239:19:::0;;-1:-1:-1;;;;;;9239:19:0::1;::::0;;9102:172::o;12094:120::-;12150:13;12191:7;12184:14;;;;;:::i;35913:159::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;36041:15:::1;13044:2:::0;36041::::1;:15;:::i;:::-;36021:35;::::0;:17;:35:::1;:::i;:::-;36001:17;:55:::0;-1:-1:-1;35913:159:0:o;17007:293::-;17100:4;17125:129;4225:10;17148:7;17157:96;17196:15;17157:96;;;;;;;;;;;;;;;;;4225:10;17157:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17157:34:0;;;;;;;;;;;;:38;:96::i;13795:199::-;13881:4;13906:42;4225:10;13930:9;13941:6;13906:9;:42::i;35246:175::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35339:16:::1;:23:::0;;;;35381:17:::1;:24:::0;35246:175::o;35740:157::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35865:16:::1;13044:2:::0;35865::::1;:16;:::i;:::-;35856:25;::::0;:6;:25:::1;:::i;:::-;35830:23;:51:::0;-1:-1:-1;35740:157:0:o;36832:266::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;36980:9:::1;36994:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;36994:6:0;;::::1;::::0;37013;;36980:9;36994:30;36980:9;36994:30;37013:6;36994;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36979:45;;;37051:4;37043:35;;;::::0;-1:-1:-1;;;37043:35:0;;11859:2:1;37043:35:0::1;::::0;::::1;11841:21:1::0;11898:2;11878:18;;;11871:30;-1:-1:-1;;;11917:18:1;;;11910:48;11975:18;;37043:35:0::1;11657:342:1::0;37043:35:0::1;36893:205;36832:266:::0;:::o;34574:126::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34649:27:0::1;34679:5;34649:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34649:35:0::1;::::0;;34574:126::o;36454:200::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;36541:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;36541:32:0::1;-1:-1:-1::0;;;;36541:32:0;;::::1;;::::0;;36597:41:::1;::::0;::::1;::::0;::::1;::::0;36565:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;36597:41:0::1;;;;;;;;36454:200:::0;:::o;9292:276::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9389:22:0;::::1;9381:73;;;::::0;-1:-1:-1;;;9381:73:0;;12206:2:1;9381:73:0::1;::::0;::::1;12188:21:1::0;12245:2;12225:18;;;12218:30;12284:34;12264:18;;;12257:62;-1:-1:-1;;;12335:18:1;;;12328:36;12381:19;;9381:73:0::1;12004:402:1::0;9381:73:0::1;9499:6;::::0;;9478:38:::1;::::0;-1:-1:-1;;;;;9478:38:0;;::::1;::::0;9499:6;::::1;::::0;9478:38:::1;::::0;::::1;9535:6;:17:::0;;-1:-1:-1;;;;;;9535:17:0::1;-1:-1:-1::0;;;;;9535:17:0;;;::::1;::::0;;;::::1;::::0;;9292:276::o;35058:172::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35150:15:::1;:22:::0;;;;35191:16:::1;:23:::0;35058:172::o;2601:114::-;2659:7;2694:5;2698:1;2694;:5;:::i;20766:452::-;-1:-1:-1;;;;;20942:19:0;;20934:68;;;;-1:-1:-1;;;20934:68:0;;12746:2:1;20934:68:0;;;12728:21:1;12785:2;12765:18;;;12758:30;12824:34;12804:18;;;12797:62;-1:-1:-1;;;12875:18:1;;;12868:34;12919:19;;20934:68:0;12544:400:1;20934:68:0;-1:-1:-1;;;;;21029:21:0;;21021:68;;;;-1:-1:-1;;;21021:68:0;;13151:2:1;21021:68:0;;;13133:21:1;13190:2;13170:18;;;13163:30;13229:34;13209:18;;;13202:62;-1:-1:-1;;;13280:18:1;;;13273:32;13322:19;;21021:68:0;12949:398:1;21021:68:0;-1:-1:-1;;;;;21110:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21170:32;;1897:25:1;;;21170:32:0;;1870:18:1;21170:32:0;;;;;;;;20766:452;;;:::o;37532:3305::-;9788:6;;37682:4;;37688:2;;9788:6;;;:26;;-1:-1:-1;;;;;;9798:16:0;;;;;;:10;:16;;;;;;;;9788:26;:44;;;-1:-1:-1;;;;;;9818:14:0;;;;;;:10;:14;;;;;;;;9788:44;9780:77;;;;-1:-1:-1;;;9780:77:0;;13554:2:1;9780:77:0;;;13536:21:1;13593:2;13573:18;;;13566:30;-1:-1:-1;;;13612:18:1;;;13605:50;13672:18;;9780:77:0;13352:344:1;9780:77:0;-1:-1:-1;;;;;37718:18:0;::::1;37710:68;;;;-1:-1:-1::0;;;37710:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37805:16:0;::::1;37797:64;;;;-1:-1:-1::0;;;37797:64:0::1;;;;;;;:::i;:::-;37897:1;37888:6;:10;37880:64;;;::::0;-1:-1:-1;;;37880:64:0;;14713:2:1;37880:64:0::1;::::0;::::1;14695:21:1::0;14752:2;14732:18;;;14725:30;14791:34;14771:18;;;14764:62;-1:-1:-1;;;14842:18:1;;;14835:39;14891:19;;37880:64:0::1;14511:405:1::0;37880:64:0::1;8845:7:::0;8880:6;-1:-1:-1;;;;;38007:15:0;;::::1;8880:6:::0;;38007:15:::1;::::0;::::1;::::0;:59:::1;;-1:-1:-1::0;;;;;;38047:19:0;::::1;38061:4;38047:19;;38007:59;:102;;;;-1:-1:-1::0;38097:12:0::1;::::0;-1:-1:-1;;;;;38091:18:0;;::::1;38097:12:::0;::::1;38091:18;;38007:102;:146;;;;-1:-1:-1::0;38140:13:0::1;::::0;-1:-1:-1;;;;;38134:19:0;;::::1;38140:13:::0;::::1;38134:19;;38007:146;37981:450;;;-1:-1:-1::0;;;;;13483:18:0;;38197:22:::1;13483:18:::0;;;:9;:18;;;;;;;;;38266:24:::1;:28:::0;;;;;;;::::1;;::::0;:78:::1;;-1:-1:-1::0;38326:17:0::1;::::0;38299:23:::1;38316:6:::0;38299:14;:23:::1;:::i;:::-;:44;;38266:78;38258:153;;;::::0;-1:-1:-1;;;38258:153:0;;15123:2:1;38258:153:0::1;::::0;::::1;15105:21:1::0;15162:2;15142:18;;;15135:30;15201:34;15181:18;;;15174:62;-1:-1:-1;;;15252:18:1;;;15245:31;15293:19;;38258:153:0::1;14921:397:1::0;38258:153:0::1;38174:257;37981:450;38500:4;38451:28;13483:18:::0;;;:9;:18;;;;;;38577:23:::1;::::0;38553:47;::::1;::::0;::::1;::::0;;;38645:61:::1;;-1:-1:-1::0;38690:16:0::1;::::0;-1:-1:-1;;;38690:16:0;::::1;;;38689:17;38645:61;:107;;;;-1:-1:-1::0;38739:13:0::1;::::0;-1:-1:-1;;;;;38731:21:0;;::::1;38739:13:::0;::::1;38731:21;;38645:107;:153;;;;-1:-1:-1::0;38777:21:0::1;::::0;-1:-1:-1;;;38777:21:0;::::1;;;38645:153;38619:434;;;38864:23;::::0;38910:16:::1;:23:::0;;-1:-1:-1;;;;38910:23:0::1;-1:-1:-1::0;;;38910:23:0::1;::::0;;38864;-1:-1:-1;38956:30:0::1;38864:23:::0;38956:8:::1;:30::i;:::-;39009:16;:24:::0;;-1:-1:-1;;;;39009:24:0::1;::::0;;38619:434:::1;-1:-1:-1::0;;;;;39092:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;::::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;39120:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;39092:50;39089:1717;;;39162:33;39178:4;39184:2;39188:6;39162:15;:33::i;:::-;39089:1717;;;39271:13;::::0;-1:-1:-1;;;;;39271:13:0;;::::1;39263:21:::0;;::::1;::::0;39259:1528:::1;;39376:15;::::0;39337:16:::1;::::0;39356:36:::1;::::0;:15:::1;:6:::0;39367:3:::1;39356:10;:15::i;:::-;:19:::0;::::1;:36::i;:::-;39337:55;;39415:23;39441:37;39461:16;;39441:15;39452:3;39441:6;:10;;:15;;;;:::i;:37::-;39415:63:::0;-1:-1:-1;39504:13:0;;;:37:::1;;-1:-1:-1::0;39521:20:0;;39504:37:::1;39501:193;;;39608:33;39624:4;39630:2;39634:6;39608:15;:33::i;:::-;39664:7;;;;;;39501:193;39724:41;39749:15:::0;39724:20:::1;:6:::0;39735:8;39724:10:::1;:20::i;:::-;:24:::0;::::1;:41::i;:::-;39716:49:::0;-1:-1:-1;39788:67:0::1;39804:4:::0;39818::::1;39825:29;:8:::0;39838:15;39825:12:::1;:29::i;:::-;39788:15;:67::i;:::-;39878:33;39894:4;39900:2;39904:6;39878:15;:33::i;:::-;39307:628;;39259:1528;;;39973:13;::::0;-1:-1:-1;;;;;39973:13:0;;::::1;39967:19:::0;;::::1;::::0;39963:824:::1;;40079:16;::::0;40040::::1;::::0;40059:37:::1;::::0;:15:::1;:6:::0;40070:3:::1;40059:10;:15::i;:37::-;40040:56;;40119:23;40145:38;40165:17;;40145:15;40156:3;40145:6;:10;;:15;;;;:::i;39963:824::-;40730:33;40746:4;40752:2;40756:6;40730:15;:33::i;:::-;37691:3146;;9872:1;37532:3305:::0;;;;;:::o;3281:246::-;3367:7;3444:12;3436:6;;;;3428:29;;;;-1:-1:-1;;;3428:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3487:5:0;;;3281:246::o;40853:1023::-;40983:16;;40925:26;;40954:46;;:24;:15;40974:3;40954:19;:24::i;:46::-;40925:75;;41019:23;41045:47;41074:17;;41045:24;41065:3;41045:15;:19;;:24;;;;:::i;:47::-;41019:73;-1:-1:-1;41115:25:0;41143:36;41019:73;41143:18;:36;:::i;:::-;41115:64;-1:-1:-1;41220:20:0;;;:46;;-1:-1:-1;41244:22:0;;41220:46;41217:60;;;41269:7;;;40853:1023;:::o;41217:60::-;41297:12;41362:33;41379:15;41362:16;:33::i;:::-;41454:21;41433:18;41554:17;41522:28;41535:15;41454:21;41522:28;:::i;:::-;:50;;;;:::i;:::-;41496:76;-1:-1:-1;41591:23:0;41652:17;41617:31;41630:18;41617:10;:31;:::i;:::-;:53;;;;:::i;:::-;41714:23;;41706:65;;41591:79;;-1:-1:-1;;;;;;41714:23:0;;41751:15;;41706:65;;;;41751:15;41714:23;41706:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41811:17:0;;41803:59;;41693:78;;-1:-1:-1;;;;;;41811:17:0;;41842:15;;41803:59;;;;41842:15;41811:17;41803:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;40853:1023:0:o;17897:661::-;-1:-1:-1;;;;;18077:20:0;;18069:70;;;;-1:-1:-1;;;18069:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18166:23:0;;18158:71;;;;-1:-1:-1;;;18158:71:0;;;;;;;:::i;:::-;18338;18360:6;18338:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18338:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;18318:17:0;;;;;;;:9;:17;;;;;;:91;;;;18451:20;;;;;;;:32;;18476:6;18451:24;:32::i;:::-;-1:-1:-1;;;;;18428:20:0;;;;;;;:9;:20;;;;;;;:55;;;;18507:35;;;;;;;;;;18535:6;1897:25:1;;1885:2;1870:18;;1751:177;3007:114:0;3065:7;3100:5;3104:1;3100;:5;:::i;2865:114::-;2923:7;2958:5;2962:1;2958;:5;:::i;2733:114::-;2791:7;2826:5;2830:1;2826;:5;:::i;41911:595::-;42009:16;;;42023:1;42009:16;;;;;;;;41985:21;;42009:16;;;;;;;;;;-1:-1:-1;42009:16:0;41985:40;;42062:4;42044;42049:1;42044:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42044:23:0;;;:7;;;;;;;;;;:23;;;;42096:15;;:22;;;-1:-1:-1;;;42096:22:0;;;;:15;;;;;:20;;:22;;;;;42044:7;;42096:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42086:4;42091:1;42086:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42086:32:0;;;:7;;;;;;;;;:32;42169:15;;42137:62;;42154:4;;42169:15;42187:11;42137:8;:62::i;:::-;42218:15;;:272;;-1:-1:-1;;;42218:272:0;;-1:-1:-1;;;;;42218:15:0;;;;:66;;:272;;42307:11;;42218:15;;42393:4;;42428;;42456:15;;42218:272;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41966:540;41911:595;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:118::-;2480:5;2473:13;2466:21;2459:5;2456:32;2446:60;;2502:1;2499;2492:12;2517:241;2573:6;2626:2;2614:9;2605:7;2601:23;2597:32;2594:52;;;2642:1;2639;2632:12;2594:52;2681:9;2668:23;2700:28;2722:5;2700:28;:::i;3160:382::-;3225:6;3233;3286:2;3274:9;3265:7;3261:23;3257:32;3254:52;;;3302:1;3299;3292:12;3254:52;3341:9;3328:23;3360:31;3385:5;3360:31;:::i;:::-;3410:5;-1:-1:-1;3467:2:1;3452:18;;3439:32;3480:30;3439:32;3480:30;:::i;:::-;3529:7;3519:17;;;3160:382;;;;;:::o;3547:127::-;3608:10;3603:3;3599:20;3596:1;3589:31;3639:4;3636:1;3629:15;3663:4;3660:1;3653:15;3679:275;3750:2;3744:9;3815:2;3796:13;;-1:-1:-1;;3792:27:1;3780:40;;3850:18;3835:34;;3871:22;;;3832:62;3829:88;;;3897:18;;:::i;:::-;3933:2;3926:22;3679:275;;-1:-1:-1;3679:275:1:o;3959:183::-;4019:4;4052:18;4044:6;4041:30;4038:56;;;4074:18;;:::i;:::-;-1:-1:-1;4119:1:1;4115:14;4131:4;4111:25;;3959:183::o;4147:662::-;4201:5;4254:3;4247:4;4239:6;4235:17;4231:27;4221:55;;4272:1;4269;4262:12;4221:55;4308:6;4295:20;4334:4;4358:60;4374:43;4414:2;4374:43;:::i;:::-;4358:60;:::i;:::-;4452:15;;;4538:1;4534:10;;;;4522:23;;4518:32;;;4483:12;;;;4562:15;;;4559:35;;;4590:1;4587;4580:12;4559:35;4626:2;4618:6;4614:15;4638:142;4654:6;4649:3;4646:15;4638:142;;;4720:17;;4708:30;;4758:12;;;;4671;;4638:142;;;-1:-1:-1;4798:5:1;4147:662;-1:-1:-1;;;;;;4147:662:1:o;4814:1215::-;4932:6;4940;4993:2;4981:9;4972:7;4968:23;4964:32;4961:52;;;5009:1;5006;4999:12;4961:52;5049:9;5036:23;5078:18;5119:2;5111:6;5108:14;5105:34;;;5135:1;5132;5125:12;5105:34;5173:6;5162:9;5158:22;5148:32;;5218:7;5211:4;5207:2;5203:13;5199:27;5189:55;;5240:1;5237;5230:12;5189:55;5276:2;5263:16;5298:4;5322:60;5338:43;5378:2;5338:43;:::i;5322:60::-;5416:15;;;5498:1;5494:10;;;;5486:19;;5482:28;;;5447:12;;;;5522:19;;;5519:39;;;5554:1;5551;5544:12;5519:39;5578:11;;;;5598:217;5614:6;5609:3;5606:15;5598:217;;;5694:3;5681:17;5711:31;5736:5;5711:31;:::i;:::-;5755:18;;5631:12;;;;5793;;;;5598:217;;;5834:5;-1:-1:-1;;5877:18:1;;5864:32;;-1:-1:-1;;5908:16:1;;;5905:36;;;5937:1;5934;5927:12;5905:36;;5960:63;6015:7;6004:8;5993:9;5989:24;5960:63;:::i;:::-;5950:73;;;4814:1215;;;;;:::o;6034:180::-;6093:6;6146:2;6134:9;6125:7;6121:23;6117:32;6114:52;;;6162:1;6159;6152:12;6114:52;-1:-1:-1;6185:23:1;;6034:180;-1:-1:-1;6034:180:1:o;6219:248::-;6287:6;6295;6348:2;6336:9;6327:7;6323:23;6319:32;6316:52;;;6364:1;6361;6354:12;6316:52;-1:-1:-1;;6387:23:1;;;6457:2;6442:18;;;6429:32;;-1:-1:-1;6219:248:1:o;6472:388::-;6540:6;6548;6601:2;6589:9;6580:7;6576:23;6572:32;6569:52;;;6617:1;6614;6607:12;6569:52;6656:9;6643:23;6675:31;6700:5;6675:31;:::i;:::-;6725:5;-1:-1:-1;6782:2:1;6767:18;;6754:32;6795:33;6754:32;6795:33;:::i;6865:380::-;6944:1;6940:12;;;;6987;;;7008:61;;7062:4;7054:6;7050:17;7040:27;;7008:61;7115:2;7107:6;7104:14;7084:18;7081:38;7078:161;;7161:10;7156:3;7152:20;7149:1;7142:31;7196:4;7193:1;7186:15;7224:4;7221:1;7214:15;7078:161;;6865:380;;;:::o;7250:356::-;7452:2;7434:21;;;7471:18;;;7464:30;7530:34;7525:2;7510:18;;7503:62;7597:2;7582:18;;7250:356::o;7611:251::-;7681:6;7734:2;7722:9;7713:7;7709:23;7705:32;7702:52;;;7750:1;7747;7740:12;7702:52;7782:9;7776:16;7801:31;7826:5;7801:31;:::i;8455:245::-;8522:6;8575:2;8563:9;8554:7;8550:23;8546:32;8543:52;;;8591:1;8588;8581:12;8543:52;8623:9;8617:16;8642:28;8664:5;8642:28;:::i;9487:127::-;9548:10;9543:3;9539:20;9536:1;9529:31;9579:4;9576:1;9569:15;9603:4;9600:1;9593:15;9619:127;9680:10;9675:3;9671:20;9668:1;9661:31;9711:4;9708:1;9701:15;9735:4;9732:1;9725:15;9751:422;9840:1;9883:5;9840:1;9897:270;9918:7;9908:8;9905:21;9897:270;;;9977:4;9973:1;9969:6;9965:17;9959:4;9956:27;9953:53;;;9986:18;;:::i;:::-;10036:7;10026:8;10022:22;10019:55;;;10056:16;;;;10019:55;10135:22;;;;10095:15;;;;9897:270;;;9901:3;9751:422;;;;;:::o;10178:806::-;10227:5;10257:8;10247:80;;-1:-1:-1;10298:1:1;10312:5;;10247:80;10346:4;10336:76;;-1:-1:-1;10383:1:1;10397:5;;10336:76;10428:4;10446:1;10441:59;;;;10514:1;10509:130;;;;10421:218;;10441:59;10471:1;10462:10;;10485:5;;;10509:130;10546:3;10536:8;10533:17;10530:43;;;10553:18;;:::i;:::-;-1:-1:-1;;10609:1:1;10595:16;;10624:5;;10421:218;;10723:2;10713:8;10710:16;10704:3;10698:4;10695:13;10691:36;10685:2;10675:8;10672:16;10667:2;10661:4;10658:12;10654:35;10651:77;10648:159;;;-1:-1:-1;10760:19:1;;;10792:5;;10648:159;10839:34;10864:8;10858:4;10839:34;:::i;:::-;10909:6;10905:1;10901:6;10897:19;10888:7;10885:32;10882:58;;;10920:18;;:::i;:::-;10958:20;;10178:806;-1:-1:-1;;;10178:806:1:o;10989:140::-;11047:5;11076:47;11117:4;11107:8;11103:19;11097:4;11076:47;:::i;11134:168::-;11174:7;11240:1;11236;11232:6;11228:14;11225:1;11222:21;11217:1;11210:9;11203:17;11199:45;11196:71;;;11247:18;;:::i;:::-;-1:-1:-1;11287:9:1;;11134:168::o;11307:135::-;11346:3;11367:17;;;11364:43;;11387:18;;:::i;:::-;-1:-1:-1;11434:1:1;11423:13;;11307:135::o;12411:128::-;12451:3;12482:1;12478:6;12475:1;12472:13;12469:39;;;12488:18;;:::i;:::-;-1:-1:-1;12524:9:1;;12411:128::o;13701:401::-;13903:2;13885:21;;;13942:2;13922:18;;;13915:30;13981:34;13976:2;13961:18;;13954:62;-1:-1:-1;;;14047:2:1;14032:18;;14025:35;14092:3;14077:19;;13701:401::o;14107:399::-;14309:2;14291:21;;;14348:2;14328:18;;;14321:30;14387:34;14382:2;14367:18;;14360:62;-1:-1:-1;;;14453:2:1;14438:18;;14431:33;14496:3;14481:19;;14107:399::o;15323:217::-;15363:1;15389;15379:132;;15433:10;15428:3;15424:20;15421:1;15414:31;15468:4;15465:1;15458:15;15496:4;15493:1;15486:15;15379:132;-1:-1:-1;15525:9:1;;15323:217::o;15545:125::-;15585:4;15613:1;15610;15607:8;15604:34;;;15618:18;;:::i;:::-;-1:-1:-1;15655:9:1;;15545:125::o;15675:980::-;15937:4;15985:3;15974:9;15970:19;16016:6;16005:9;15998:25;16042:2;16080:6;16075:2;16064:9;16060:18;16053:34;16123:3;16118:2;16107:9;16103:18;16096:31;16147:6;16182;16176:13;16213:6;16205;16198:22;16251:3;16240:9;16236:19;16229:26;;16290:2;16282:6;16278:15;16264:29;;16311:1;16321:195;16335:6;16332:1;16329:13;16321:195;;;16400:13;;-1:-1:-1;;;;;16396:39:1;16384:52;;16491:15;;;;16456:12;;;;16432:1;16350:9;16321:195;;;-1:-1:-1;;;;;;;16572:32:1;;;;16567:2;16552:18;;16545:60;-1:-1:-1;;;16636:3:1;16621:19;16614:35;16533:3;15675:980;-1:-1:-1;;;15675:980:1:o
Swarm Source
ipfs://a09340cca8b024d27691b1da5709e80968636a94744fc06aada336f70be2b561
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.