ERC-20
Overview
Max Total Supply
1,000,000,000 HELLMO
Holders
92
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
184,770.67137722 HELLMOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Hellmo
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-28 */ // SPDX-License-Identifier: MIT /** ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡏⠠⢉⠒⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡊⠉⠒⠲⠤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠉⣹⢸⢳⡈⢢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⠈⣏⠲⡀⢷⡀⠀⠀⠀⠀⠀⣀⠜⢁⡾⠀⢹⡌⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⢷⠸⡆⠹⣄⢳⡀⢀⠤⠒⣋⡤⠖⠋⠀⠀⡼⢃⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⢸⡁⠈⠑⢄⡀⠀⢀⠼⢁⡗⠀⢸⡄⣷⠉⡴⠋⠁⠀⠀⠀⢠⠞⣠⡞⠙⢆⠀⠀⠀⠀⢀⣤⢤⡀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠙⣆⢰⣄⢳⡼⢁⡴⠋⠀⠀⢸⡇⠛⣸⠁⠀⠀⠀⠀⠀⡏⣴⣿⠇⣰⡄⢳⡀⠀⢀⠾⢠⢀⡧⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⢀⣤⠤⣄⡀⠀⣠⠏⡸⢹⡎⠁⡾⠀⠀⠀⠀⠸⢬⠷⠽⠀⣠⠀⠀⠀⠀⠻⡀⡤⣰⠃⠹⢤⣉⡟⢁⡴⣿⠉⣍⠳⡀⠀⠀⠀⠀⠀ ⠀⠀⠈⢷⡀⢀⠸⠾⢁⡼⠁⠸⡇⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠰⠋⠀⠀⠀⠀⠀⠈⠉⠁⠀⠀⢸⠃⢠⡏⠀⢿⣀⣿⢦⠘⡆⠀⠀⠀⠀ ⠀⠀⠀⠀⣳⠄⣷⢠⡎⠀⠀⠀⠙⢦⣷⠀⢸⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢧⣀⣷⠀⠀⠈⠁⢨⡇⣽⠀⠀⠀⠀ ⠀⠀⠀⢠⠇⣼⢹⣸⡇⠀⠀⠀⠀⠀⠀⢠⡇⠀⠀⠀⠀⠀⠀⣀⣠⣤⣀⠀⢀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠸⠀⠀⣠⣶⣉⣴⣿⣷⣀⣀⣤ ⠀⢿⣷⣾⣶⣷⣿⣏⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⢠⡾⠉⣷⣆⡬⢷⡋⣿⠧⠉⢳⡄⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣍ ⢶⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⣇⠀⠈⣾⠀⠀⢹⡆⠀⠀⢀⣿⣤⡀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⠛⠛ ⠀⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⡀⢀⣼⣿⣷⣾⣿⣿⣿⣿⣷⣀⡀⢀⣼⣿⣿⣿⣿⣿⡏⠈⠲⠀ ⠈⠛⢻⡙⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⢴⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣏⣾⣿⣿⣿⣿⣿⡿⠃⠀⢀⠀ ⠀⠀⡼⠧⡈⠻⣿⣿⣿⣿⣿⣷⣄⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠒⠀⢀⡼⠃ ⢀⣠⡇⢠⣌⣡⠼⠻⣿⣿⣿⣿⣿⣧⡀⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⢩⠄⡏ ⠸⡄⢧⣄⡙⢦⡀⠀⠘⠻⣿⣿⣿⣿⣿⣷⣦⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⢀⣀⡤⠞⣰⠏ ⠀⠳⡈⠳⣌⠉⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⣼⠀⠶⡾⠁⠀ ⠀⠀⠈⠢⣌⣳⡄⠀⠀⢢⡀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠙⢲⡆⡇⠀⠀ ⠀⠀⠀⠀⠊⡹⠃⠀⠀⠀⠃⠀⠀⠀⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⣠⠤⠚⢉⡤⠃⠀⠀ Welcome to the inferno of crypto! Are you ready to ignite your crypto portfolio? Say hello to $HELLMO, the hottest meme coin on the blockchain! Telegram: https://t.me/HellmoToken X: https://x.com/HellmoToken Website: https://www.hellmo-token.com/ **/ pragma solidity ^0.8.4; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.4; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ 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; } } pragma solidity ^0.8.4; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); } pragma solidity ^0.8.4; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity ^0.8.4; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity ^0.8.4; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity ^0.8.4; 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; } pragma solidity ^0.8.4; contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () public { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } pragma solidity ^0.8.4; contract Hellmo is Context, IERC20, Ownable { using SafeMath for uint256; mapping (address => uint256) public _rOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public _isExcludedFromFee; mapping(address => bool) public _isBlacklisted; address public _PresaleAddress = 0x000000000000000000000000000000000000dEaD; bool public liquidityLaunched = false; bool public isFirstLaunch = true; uint256 public lastSnipeTaxBlock; uint8 public snipeBlocks = 0; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1000000000000000000; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public _maxWalletSize = (_tTotal * 2) / 100; uint256 public _maxTaxSwap= 10000000000000000; uint256 private _redisFeeOnBuy = 6; uint256 private _taxFeeOnBuy = 14; uint256 private _redisFeeOnSell = 6; uint256 private _taxFeeOnSell = 14; uint256 private _redisFee; uint256 private _taxFee; string private constant _name = "HELLMO"; string private constant _symbol = "HELLMO"; uint8 private constant _decimals = 9; address payable private _appAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19); address payable private _marketingAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19); address payable private _buybackAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19); address payable private _burnAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19); IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwap = false; bool private swapEnabled = true; modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_appAddress] = true; _isExcludedFromFee[_marketingAddress] = true; _isExcludedFromFee[_buybackAddress] = true; _isExcludedFromFee[_burnAddress] = true; emit Transfer(address(0x0000000000000000000000000000000000000000), _msgSender(), _tTotal); } function setSnipeBlocks(uint8 _blocks) external onlyOwner { require(!liquidityLaunched); snipeBlocks = _blocks; } function setPresaleContract(address payable wallet) external onlyOwner{ _PresaleAddress = wallet; excludeFromFees(_PresaleAddress, true); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function tokenFromReflection(uint256 rAmount) private view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isBlacklisted[from], 'Blacklisted address'); _redisFee = 0; _taxFee = 0; // No adding liquidity before launched if (!liquidityLaunched) { if (to == uniswapV2Pair) { liquidityLaunched = true; // high tax ends in x blocks lastSnipeTaxBlock = block.number + snipeBlocks; } } //antibot block if (from != address(_PresaleAddress)) { if(liquidityLaunched && block.number <= lastSnipeTaxBlock && !isFirstLaunch){ _redisFee = _redisFeeOnBuy; _taxFee = _taxFeeOnBuy; _tokenTransfer(from,to,amount); if (to != address(uniswapV2Pair)) { _isBlacklisted[to]=true; } return; } } if (liquidityLaunched && isFirstLaunch){ isFirstLaunch = false; } if (from != owner() && to != owner()) { uint256 contractTokenBalance = balanceOf(address(this)); if (!inSwap && from != uniswapV2Pair && swapEnabled && contractTokenBalance > 0) { swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap))); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToFee(address(this).balance); } } if(from == uniswapV2Pair && to != address(uniswapV2Router)) { require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize."); _redisFee = _redisFeeOnBuy; _taxFee = _taxFeeOnBuy; } if (to == uniswapV2Pair && from != address(uniswapV2Router)) { _redisFee = _redisFeeOnSell; _taxFee = _taxFeeOnSell; } if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) { _redisFee = 0; _taxFee = 0; } } _tokenTransfer(from,to,amount); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee(uint256 amount) private { uint256 devAmount = amount.mul(2).div(8); uint256 mktAmount = amount.mul(2).div(8); uint256 buybackAmount = amount.mul(2).div(8); uint256 burnAmount = amount.sub(devAmount).sub(mktAmount).sub(buybackAmount); _appAddress.transfer(devAmount); _marketingAddress.transfer(mktAmount); _buybackAddress.transfer(buybackAmount); _burnAddress.transfer(burnAmount); } function min(uint256 a, uint256 b) private pure returns (uint256){ return (a > b) ? b : a; } function _tokenTransfer(address sender, address recipient, uint256 amount) private { _transferStandard(sender, recipient, amount); } event tokensRescued(address indexed token, address indexed to, uint amount); function rescueForeignTokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { emit tokensRescued(_tokenAddr, _to, _amount); IERC20(_tokenAddr).transfer(_to, _amount); } event appAddressUpdated(address indexed previous, address indexed adr); function setNewAppAddress(address payable appaddr) public onlyOwner { emit appAddressUpdated(_appAddress, appaddr); _appAddress = appaddr; _isExcludedFromFee[_appAddress] = true; } event marketingAddressUpdated(address indexed previous, address indexed adr); function setNewMarketingAddress(address payable markt) public onlyOwner { emit marketingAddressUpdated(_marketingAddress, markt); _marketingAddress = markt; _isExcludedFromFee[_marketingAddress] = true; } event burnAddressUpdated(address indexed previous, address indexed adr); function setNewBurnAddress(address payable burnaddr) public onlyOwner { emit burnAddressUpdated(_burnAddress, burnaddr); _burnAddress = burnaddr; _isExcludedFromFee[_burnAddress] = true; } event buybackAddressUpdated(address indexed previous, address indexed adr); function setNewBuybackAddress(address payable buybackaddr) public onlyOwner { emit buybackAddressUpdated(_buybackAddress, buybackaddr); _buybackAddress = buybackaddr; _isExcludedFromFee[_buybackAddress] = true; } function _transferStandard(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); uint256 tTransferAmount = tAmount.sub(tAmount.mul(_redisFee).div(100)).sub(tAmount.mul(_taxFee).div(100)); uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tAmount.mul(_redisFee).div(100).mul(currentRate); uint256 rTeam = tAmount.mul(_taxFee).div(100).mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _rOwned[address(this)] = _rOwned[address(this)].add(rTeam); _reflectFee(rFee); emit Transfer(sender, recipient, tTransferAmount); } /** * only thing to change _rTotal */ function _reflectFee(uint256 rFee) private { _rTotal = _rTotal.sub(rFee); } receive() external payable {} function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function manualswap() external { require(_msgSender() == owner()); uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualsend() external { require(_msgSender() == owner()); uint256 contractETHBalance = address(this).balance; sendETHToFee(contractETHBalance); } function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner { require(redisFeeOnBuy < 5, "Redis cannot be more than 5."); require(redisFeeOnSell < 5, "Redis cannot be more than 5."); require(taxFeeOnBuy < 25, "Tax cannot be more than 25."); require(taxFeeOnSell < 25, "Tax cannot be more than 25."); _redisFeeOnBuy = redisFeeOnBuy; _redisFeeOnSell = redisFeeOnSell; _taxFeeOnBuy = taxFeeOnBuy; _taxFeeOnSell = taxFeeOnSell; } function toggleSwap(bool _swapEnabled) public onlyOwner { swapEnabled = _swapEnabled; } event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFee[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } event ExcludeFromFees(address indexed account, bool isExcluded); function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFee[account] = excluded; emit ExcludeFromFees(account, excluded); } event BlacklistAddress(address indexed account, bool value); function blacklistAddress(address account, bool value) public onlyOwner{ _isBlacklisted[account] = value; emit BlacklistAddress(account, value); } event BlacklistMultiAddresses(address[] accounts, bool value); function blacklistMultiAddresses(address[] calldata accounts, bool value) public onlyOwner{ for(uint256 i = 0; i < accounts.length; i++) { _isBlacklisted[accounts[i]] = value; } emit BlacklistMultiAddresses(accounts, value); } function clearStuckBalance(address addr) external onlyOwner{ (bool sent,) =payable(addr).call{value: (address(this).balance)}(""); require(sent); } function removeLimits() external onlyOwner{ _maxWalletSize = _tTotal; } function withdrawToken(address _tokenContract, uint256 _amount) external onlyOwner { IERC20 tokenContract = IERC20(_tokenContract); // needs to execute `approve()` on the token contract to allow itself the transfer tokenContract.approve(address(this), _amount); tokenContract.transferFrom(address(this), owner(), _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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistMultiAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"appAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"burnAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"buybackAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"marketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensRescued","type":"event"},{"inputs":[],"name":"_PresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMultiAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFirstLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSnipeTaxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueForeignTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"appaddr","type":"address"}],"name":"setNewAppAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"burnaddr","type":"address"}],"name":"setNewBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buybackaddr","type":"address"}],"name":"setNewBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"markt","type":"address"}],"name":"setNewMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setPresaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_blocks","type":"uint8"}],"name":"setSnipeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlocks","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600580546001600160b01b031916750100000000000000000000000000000000000000dead1790556007805460ff191690556200004b670de0b6b3a76400005f19620003d4565b62000058905f19620003fe565b600855606462000072670de0b6b3a764000060026200041a565b6200007e919062000434565b600955662386f26fc10000600a556006600b819055600e600c819055600d919091558055601180546001600160a01b031990811673ae969b0a7841e9039059e09f3e566b1238d46b1990811790925560128054821683179055601380548216831790556014805490911690911790556016805461ffff60a01b1916600160a81b1790553480156200010d575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600854335f9081526001602090815260409182902092909255601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa158015620001c7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ed91906200044a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000239573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025f91906200044a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002aa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d091906200044a565b601680546001600160a01b0319166001600160a01b039283161790555f80548216815260036020526040808220805460ff1990811660019081179092553084528284208054821683179055601154851684528284208054821683179055601254851684528284208054821683179055601354851684528284208054821683179055601454909416835291208054909216179055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a7640000604051620003b191815260200190565b60405180910390a35062000479565b634e487b7160e01b5f52601260045260245ffd5b5f82620003e557620003e5620003c0565b500690565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620004145762000414620003ea565b92915050565b8082028115828204841417620004145762000414620003ea565b5f82620004455762000445620003c0565b500490565b5f602082840312156200045b575f80fd5b81516001600160a01b038116811462000472575f80fd5b9392505050565b61259a80620004875f395ff3fe60806040526004361061024c575f3560e01c8063758dbe0311610134578063a9059cbb116100b3578063c3c8cd8011610078578063c3c8cd80146106cb578063c492f046146106df578063dd62ed3e146106fe578063e293d31614610742578063f2fde38b14610761578063fca419ae14610780575f80fd5b8063a9059cbb14610630578063a9bbd1141461064f578063a9f615181461066e578063aa77ed671461068d578063c0246668146106ac575f80fd5b806395d89b41116100f957806395d89b41146102935780639e281a98146105b45780639f3d1360146105d3578063a2a957bb146105f2578063a2fff11414610611575f80fd5b8063758dbe0314610517578063764d72bf14610536578063768dc710146105555780638da5cb5b146105835780638f9a55c01461059f575f80fd5b806323b872dd116101cb5780636a1961c4116101905780636a1961c4146104885780636d8aa8f81461049d5780636fc3eaec146104bc57806370a08231146104d0578063715018a6146104ef578063751039fc14610503575f80fd5b806323b872dd146103eb5780632be29fa81461040a578063313ce56714610435578063455a43961461044857806349bd5a5e14610469575f80fd5b80631694505e116102115780631694505e14610344578063181281291461036357806318160ddd146103835780631cdd3be31461039d5780631eb147d5146103cb575f80fd5b8063032bba6a1461025757806306fdde0314610293578063095ea7b3146102c75780630cfc15f9146102f65780630faee56f1461032f575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b50600554610276906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029e575f80fd5b50604080518082018252600681526548454c4c4d4f60d01b6020820152905161028a9190612133565b3480156102d2575f80fd5b506102e66102e1366004612192565b61079f565b604051901515815260200161028a565b348015610301575f80fd5b506103216103103660046121bc565b60016020525f908152604090205481565b60405190815260200161028a565b34801561033a575f80fd5b50610321600a5481565b34801561034f575f80fd5b50601554610276906001600160a01b031681565b34801561036e575f80fd5b506005546102e690600160a81b900460ff1681565b34801561038e575f80fd5b50670de0b6b3a7640000610321565b3480156103a8575f80fd5b506102e66103b73660046121bc565b60046020525f908152604090205460ff1681565b3480156103d6575f80fd5b506005546102e690600160a01b900460ff1681565b3480156103f6575f80fd5b506102e66104053660046121d7565b6107b5565b348015610415575f80fd5b506007546104239060ff1681565b60405160ff909116815260200161028a565b348015610440575f80fd5b506009610423565b348015610453575f80fd5b50610467610462366004612222565b61081c565b005b348015610474575f80fd5b50601654610276906001600160a01b031681565b348015610493575f80fd5b5061032160065481565b3480156104a8575f80fd5b506104676104b7366004612259565b6108ad565b3480156104c7575f80fd5b506104676108f4565b3480156104db575f80fd5b506103216104ea3660046121bc565b610916565b3480156104fa575f80fd5b50610467610937565b34801561050e575f80fd5b506104676109a8565b348015610522575f80fd5b506104676105313660046121bc565b6109df565b348015610541575f80fd5b506104676105503660046121bc565b610a7a565b348015610560575f80fd5b506102e661056f3660046121bc565b60036020525f908152604090205460ff1681565b34801561058e575f80fd5b505f546001600160a01b0316610276565b3480156105aa575f80fd5b5061032160095481565b3480156105bf575f80fd5b506104676105ce366004612192565b610b02565b3480156105de575f80fd5b506104676105ed3660046121bc565b610c39565b3480156105fd575f80fd5b5061046761060c366004612274565b610cd4565b34801561061c575f80fd5b5061046761062b3660046121bc565b610e51565b34801561063b575f80fd5b506102e661064a366004612192565b610eec565b34801561065a575f80fd5b506104676106693660046121bc565b610ef8565b348015610679575f80fd5b506104676106883660046122a3565b610f4a565b348015610698575f80fd5b506104676106a73660046121bc565b610f9f565b3480156106b7575f80fd5b506104676106c6366004612222565b61103a565b3480156106d6575f80fd5b506104676110ba565b3480156106ea575f80fd5b506104676106f93660046122c3565b6110e4565b348015610709575f80fd5b50610321610718366004612342565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561074d575f80fd5b5061046761075c3660046121d7565b6111bc565b34801561076c575f80fd5b5061046761077b3660046121bc565b611267565b34801561078b575f80fd5b5061046761079a3660046122c3565b61134e565b5f6107ab338484611419565b5060015b92915050565b5f6107c184848461153c565b610812843361080d8560405180606001604052806028815260200161253d602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611a0e565b611419565b5060019392505050565b5f546001600160a01b0316331461084e5760405162461bcd60e51b81526004016108459061236e565b60405180910390fd5b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b5f546001600160a01b031633146108d65760405162461bcd60e51b81526004016108459061236e565b60168054911515600160a81b0260ff60a81b19909216919091179055565b5f546001600160a01b03163314610909575f80fd5b4761091381611a46565b50565b6001600160a01b0381165f908152600160205260408120546107af90611b84565b5f546001600160a01b031633146109605760405162461bcd60e51b81526004016108459061236e565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109d15760405162461bcd60e51b81526004016108459061236e565b670de0b6b3a7640000600955565b5f546001600160a01b03163314610a085760405162461bcd60e51b81526004016108459061236e565b6012546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b905f90a3601280546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610aa35760405162461bcd60e51b81526004016108459061236e565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610aec576040519150601f19603f3d011682016040523d82523d5f602084013e610af1565b606091505b5050905080610afe575f80fd5b5050565b5f546001600160a01b03163314610b2b5760405162461bcd60e51b81526004016108459061236e565b60405163095ea7b360e01b81523060048201526024810182905282906001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610b77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9b91906123a3565b50806001600160a01b03166323b872dd30610bbd5f546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064015b6020604051808303815f875af1158015610c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3391906123a3565b50505050565b5f546001600160a01b03163314610c625760405162461bcd60e51b81526004016108459061236e565b6011546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c39905f90a3601180546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610cfd5760405162461bcd60e51b81526004016108459061236e565b60058410610d4d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60058310610d9d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60198210610ded5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b60198110610e3d5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b600b93909355600d91909155600c55600e55565b5f546001600160a01b03163314610e7a5760405162461bcd60e51b81526004016108459061236e565b6013546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc905f90a3601380546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f6107ab33848461153c565b5f546001600160a01b03163314610f215760405162461bcd60e51b81526004016108459061236e565b600580546001600160a01b0319166001600160a01b03831690811790915561091390600161103a565b5f546001600160a01b03163314610f735760405162461bcd60e51b81526004016108459061236e565b600554600160a01b900460ff1615610f89575f80fd5b6007805460ff191660ff92909216919091179055565b5f546001600160a01b03163314610fc85760405162461bcd60e51b81526004016108459061236e565b6014546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f40905f90a3601480546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b031633146110635760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0382165f81815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a1565b5f546001600160a01b031633146110cf575f80fd5b5f6110d930610916565b905061091381611c06565b5f546001600160a01b0316331461110d5760405162461bcd60e51b81526004016108459061236e565b5f5b8281101561117b578160035f86868581811061112d5761112d6123be565b905060200201602081019061114291906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580611173816123e6565b91505061110f565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516111af939291906123fe565b60405180910390a1505050565b5f546001600160a01b031633146111e55760405162461bcd60e51b81526004016108459061236e565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161122a91815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401610bf3565b5f546001600160a01b031633146112905760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0381166112f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610845565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146113775760405162461bcd60e51b81526004016108459061236e565b5f5b828110156113e5578160045f868685818110611397576113976123be565b90506020020160208101906113ac91906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113dd816123e6565b915050611379565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf68383836040516111af939291906123fe565b6001600160a01b03831661147b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610845565b6001600160a01b0382166114dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610845565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610845565b6001600160a01b0382166116025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610845565b5f81116116635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610845565b6001600160a01b0383165f9081526004602052604090205460ff16156116c15760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610845565b5f600f819055601055600554600160a01b900460ff16611718576016546001600160a01b0390811690831603611718576005805460ff60a01b1916600160a01b1790556007546117149060ff1643612456565b6006555b6005546001600160a01b038481169116146117b757600554600160a01b900460ff16801561174857506006544311155b801561175e5750600554600160a81b900460ff16155b156117b757600b54600f55600c5460105561177a838383611d76565b6016546001600160a01b038381169116146117b2576001600160a01b0382165f908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156117d95750600554600160a81b900460ff165b156117ec576005805460ff60a81b191690555b5f546001600160a01b0384811691161480159061181657505f546001600160a01b03838116911614155b15611a03575f61182530610916565b601654909150600160a01b900460ff1615801561185057506016546001600160a01b03858116911614155b80156118655750601654600160a81b900460ff165b801561187057505f81115b156118a45761189261188d8361188884600a54611d81565b611d81565b611c06565b4780156118a2576118a247611a46565b505b6016546001600160a01b0385811691161480156118cf57506015546001600160a01b03848116911614155b1561194657600954826118e185610916565b6118eb9190612456565b11156119395760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610845565b600b54600f55600c546010555b6016546001600160a01b03848116911614801561197157506015546001600160a01b03858116911614155b1561198357600d54600f55600e546010555b6001600160a01b0384165f9081526003602052604090205460ff16806119c057506001600160a01b0383165f9081526003602052604090205460ff165b806119f257506016546001600160a01b038581169116148015906119f257506016546001600160a01b03848116911614155b15611a01575f600f8190556010555b505b6117b2838383611d76565b5f8184841115611a315760405162461bcd60e51b81526004016108459190612133565b505f611a3d8486612469565b95945050505050565b5f611a5d6008611a57846002611d95565b90611e13565b90505f611a706008611a57856002611d95565b90505f611a836008611a57866002611d95565b90505f611a9c82611a9685818989611e54565b90611e54565b6011546040519192506001600160a01b03169085156108fc029086905f818181858888f19350505050158015611ad4573d5f803e3d5ffd5b506012546040516001600160a01b039091169084156108fc029085905f818181858888f19350505050158015611b0c573d5f803e3d5ffd5b506013546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015611b44573d5f803e3d5ffd5b506014546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611b7c573d5f803e3d5ffd5b505050505050565b5f600854821115611bea5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610845565b5f611bf3611e95565b9050611bff8382611e13565b9392505050565b6016805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c4c57611c4c6123be565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ca3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc7919061247c565b81600181518110611cda57611cda6123be565b6001600160a01b039283166020918202929092010152601554611d009130911684611419565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d389085905f90869030904290600401612497565b5f604051808303815f87803b158015611d4f575f80fd5b505af1158015611d61573d5f803e3d5ffd5b50506016805460ff60a01b1916905550505050565b6117b2838383611eb6565b5f818311611d8f5782611bff565b50919050565b5f825f03611da457505f6107af565b5f611daf8385612506565b905082611dbc858361251d565b14611bff5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610845565b5f611bff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612057565b5f611bff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a0e565b5f805f611ea0612083565b9092509050611eaf8282611e13565b9250505090565b5f611ebf611e95565b90505f611f03611edf6064611a5760105487611d9590919063ffffffff16565b611a96611efc6064611a57600f5489611d9590919063ffffffff16565b8690611e54565b90505f611f108484611d95565b90505f611f3784611f316064611a57600f548a611d9590919063ffffffff16565b90611d95565b90505f611f5885611f316064611a576010548b611d9590919063ffffffff16565b90505f611f6982611a968686611e54565b6001600160a01b038a165f90815260016020526040902054909150611f8e9085611e54565b6001600160a01b03808b165f9081526001602052604080822093909355908a1681522054611fbc90826120c2565b6001600160a01b0389165f90815260016020526040808220929092553081522054611fe790836120c2565b305f90815260016020526040902055611fff83612120565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161204491815260200190565b60405180910390a3505050505050505050565b5f81836120775760405162461bcd60e51b81526004016108459190612133565b505f611a3d848661251d565b6008545f908190670de0b6b3a764000061209d8282611e13565b8210156120b957505060085492670de0b6b3a764000092509050565b90939092509050565b5f806120ce8385612456565b905083811015611bff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610845565b60085461212d9082611e54565b60085550565b5f6020808352835180828501525f5b8181101561215e57858101830151858201604001528201612142565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610913575f80fd5b5f80604083850312156121a3575f80fd5b82356121ae8161217e565b946020939093013593505050565b5f602082840312156121cc575f80fd5b8135611bff8161217e565b5f805f606084860312156121e9575f80fd5b83356121f48161217e565b925060208401356122048161217e565b929592945050506040919091013590565b8015158114610913575f80fd5b5f8060408385031215612233575f80fd5b823561223e8161217e565b9150602083013561224e81612215565b809150509250929050565b5f60208284031215612269575f80fd5b8135611bff81612215565b5f805f8060808587031215612287575f80fd5b5050823594602084013594506040840135936060013592509050565b5f602082840312156122b3575f80fd5b813560ff81168114611bff575f80fd5b5f805f604084860312156122d5575f80fd5b833567ffffffffffffffff808211156122ec575f80fd5b818601915086601f8301126122ff575f80fd5b81358181111561230d575f80fd5b8760208260051b8501011115612321575f80fd5b6020928301955093505084013561233781612215565b809150509250925092565b5f8060408385031215612353575f80fd5b823561235e8161217e565b9150602083013561224e8161217e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156123b3575f80fd5b8151611bff81612215565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016123f7576123f76123d2565b5060010190565b604080825281018390525f8460608301825b868110156124405782356124238161217e565b6001600160a01b0316825260209283019290910190600101612410565b5080925050508215156020830152949350505050565b808201808211156107af576107af6123d2565b818103818111156107af576107af6123d2565b5f6020828403121561248c575f80fd5b8151611bff8161217e565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124e55784516001600160a01b0316835293830193918301916001016124c0565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107af576107af6123d2565b5f8261253757634e487b7160e01b5f52601260045260245ffd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212205b136a57d1e48210e6960fea68afff7068d233801658b492e20af023a94882be64736f6c63430008140033
Deployed Bytecode
0x60806040526004361061024c575f3560e01c8063758dbe0311610134578063a9059cbb116100b3578063c3c8cd8011610078578063c3c8cd80146106cb578063c492f046146106df578063dd62ed3e146106fe578063e293d31614610742578063f2fde38b14610761578063fca419ae14610780575f80fd5b8063a9059cbb14610630578063a9bbd1141461064f578063a9f615181461066e578063aa77ed671461068d578063c0246668146106ac575f80fd5b806395d89b41116100f957806395d89b41146102935780639e281a98146105b45780639f3d1360146105d3578063a2a957bb146105f2578063a2fff11414610611575f80fd5b8063758dbe0314610517578063764d72bf14610536578063768dc710146105555780638da5cb5b146105835780638f9a55c01461059f575f80fd5b806323b872dd116101cb5780636a1961c4116101905780636a1961c4146104885780636d8aa8f81461049d5780636fc3eaec146104bc57806370a08231146104d0578063715018a6146104ef578063751039fc14610503575f80fd5b806323b872dd146103eb5780632be29fa81461040a578063313ce56714610435578063455a43961461044857806349bd5a5e14610469575f80fd5b80631694505e116102115780631694505e14610344578063181281291461036357806318160ddd146103835780631cdd3be31461039d5780631eb147d5146103cb575f80fd5b8063032bba6a1461025757806306fdde0314610293578063095ea7b3146102c75780630cfc15f9146102f65780630faee56f1461032f575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b50600554610276906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029e575f80fd5b50604080518082018252600681526548454c4c4d4f60d01b6020820152905161028a9190612133565b3480156102d2575f80fd5b506102e66102e1366004612192565b61079f565b604051901515815260200161028a565b348015610301575f80fd5b506103216103103660046121bc565b60016020525f908152604090205481565b60405190815260200161028a565b34801561033a575f80fd5b50610321600a5481565b34801561034f575f80fd5b50601554610276906001600160a01b031681565b34801561036e575f80fd5b506005546102e690600160a81b900460ff1681565b34801561038e575f80fd5b50670de0b6b3a7640000610321565b3480156103a8575f80fd5b506102e66103b73660046121bc565b60046020525f908152604090205460ff1681565b3480156103d6575f80fd5b506005546102e690600160a01b900460ff1681565b3480156103f6575f80fd5b506102e66104053660046121d7565b6107b5565b348015610415575f80fd5b506007546104239060ff1681565b60405160ff909116815260200161028a565b348015610440575f80fd5b506009610423565b348015610453575f80fd5b50610467610462366004612222565b61081c565b005b348015610474575f80fd5b50601654610276906001600160a01b031681565b348015610493575f80fd5b5061032160065481565b3480156104a8575f80fd5b506104676104b7366004612259565b6108ad565b3480156104c7575f80fd5b506104676108f4565b3480156104db575f80fd5b506103216104ea3660046121bc565b610916565b3480156104fa575f80fd5b50610467610937565b34801561050e575f80fd5b506104676109a8565b348015610522575f80fd5b506104676105313660046121bc565b6109df565b348015610541575f80fd5b506104676105503660046121bc565b610a7a565b348015610560575f80fd5b506102e661056f3660046121bc565b60036020525f908152604090205460ff1681565b34801561058e575f80fd5b505f546001600160a01b0316610276565b3480156105aa575f80fd5b5061032160095481565b3480156105bf575f80fd5b506104676105ce366004612192565b610b02565b3480156105de575f80fd5b506104676105ed3660046121bc565b610c39565b3480156105fd575f80fd5b5061046761060c366004612274565b610cd4565b34801561061c575f80fd5b5061046761062b3660046121bc565b610e51565b34801561063b575f80fd5b506102e661064a366004612192565b610eec565b34801561065a575f80fd5b506104676106693660046121bc565b610ef8565b348015610679575f80fd5b506104676106883660046122a3565b610f4a565b348015610698575f80fd5b506104676106a73660046121bc565b610f9f565b3480156106b7575f80fd5b506104676106c6366004612222565b61103a565b3480156106d6575f80fd5b506104676110ba565b3480156106ea575f80fd5b506104676106f93660046122c3565b6110e4565b348015610709575f80fd5b50610321610718366004612342565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561074d575f80fd5b5061046761075c3660046121d7565b6111bc565b34801561076c575f80fd5b5061046761077b3660046121bc565b611267565b34801561078b575f80fd5b5061046761079a3660046122c3565b61134e565b5f6107ab338484611419565b5060015b92915050565b5f6107c184848461153c565b610812843361080d8560405180606001604052806028815260200161253d602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611a0e565b611419565b5060019392505050565b5f546001600160a01b0316331461084e5760405162461bcd60e51b81526004016108459061236e565b60405180910390fd5b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b5f546001600160a01b031633146108d65760405162461bcd60e51b81526004016108459061236e565b60168054911515600160a81b0260ff60a81b19909216919091179055565b5f546001600160a01b03163314610909575f80fd5b4761091381611a46565b50565b6001600160a01b0381165f908152600160205260408120546107af90611b84565b5f546001600160a01b031633146109605760405162461bcd60e51b81526004016108459061236e565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109d15760405162461bcd60e51b81526004016108459061236e565b670de0b6b3a7640000600955565b5f546001600160a01b03163314610a085760405162461bcd60e51b81526004016108459061236e565b6012546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b905f90a3601280546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610aa35760405162461bcd60e51b81526004016108459061236e565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610aec576040519150601f19603f3d011682016040523d82523d5f602084013e610af1565b606091505b5050905080610afe575f80fd5b5050565b5f546001600160a01b03163314610b2b5760405162461bcd60e51b81526004016108459061236e565b60405163095ea7b360e01b81523060048201526024810182905282906001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610b77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9b91906123a3565b50806001600160a01b03166323b872dd30610bbd5f546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064015b6020604051808303815f875af1158015610c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3391906123a3565b50505050565b5f546001600160a01b03163314610c625760405162461bcd60e51b81526004016108459061236e565b6011546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c39905f90a3601180546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610cfd5760405162461bcd60e51b81526004016108459061236e565b60058410610d4d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60058310610d9d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60198210610ded5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b60198110610e3d5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b600b93909355600d91909155600c55600e55565b5f546001600160a01b03163314610e7a5760405162461bcd60e51b81526004016108459061236e565b6013546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc905f90a3601380546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f6107ab33848461153c565b5f546001600160a01b03163314610f215760405162461bcd60e51b81526004016108459061236e565b600580546001600160a01b0319166001600160a01b03831690811790915561091390600161103a565b5f546001600160a01b03163314610f735760405162461bcd60e51b81526004016108459061236e565b600554600160a01b900460ff1615610f89575f80fd5b6007805460ff191660ff92909216919091179055565b5f546001600160a01b03163314610fc85760405162461bcd60e51b81526004016108459061236e565b6014546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f40905f90a3601480546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b031633146110635760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0382165f81815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a1565b5f546001600160a01b031633146110cf575f80fd5b5f6110d930610916565b905061091381611c06565b5f546001600160a01b0316331461110d5760405162461bcd60e51b81526004016108459061236e565b5f5b8281101561117b578160035f86868581811061112d5761112d6123be565b905060200201602081019061114291906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580611173816123e6565b91505061110f565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516111af939291906123fe565b60405180910390a1505050565b5f546001600160a01b031633146111e55760405162461bcd60e51b81526004016108459061236e565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161122a91815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401610bf3565b5f546001600160a01b031633146112905760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0381166112f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610845565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146113775760405162461bcd60e51b81526004016108459061236e565b5f5b828110156113e5578160045f868685818110611397576113976123be565b90506020020160208101906113ac91906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113dd816123e6565b915050611379565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf68383836040516111af939291906123fe565b6001600160a01b03831661147b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610845565b6001600160a01b0382166114dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610845565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610845565b6001600160a01b0382166116025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610845565b5f81116116635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610845565b6001600160a01b0383165f9081526004602052604090205460ff16156116c15760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610845565b5f600f819055601055600554600160a01b900460ff16611718576016546001600160a01b0390811690831603611718576005805460ff60a01b1916600160a01b1790556007546117149060ff1643612456565b6006555b6005546001600160a01b038481169116146117b757600554600160a01b900460ff16801561174857506006544311155b801561175e5750600554600160a81b900460ff16155b156117b757600b54600f55600c5460105561177a838383611d76565b6016546001600160a01b038381169116146117b2576001600160a01b0382165f908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156117d95750600554600160a81b900460ff165b156117ec576005805460ff60a81b191690555b5f546001600160a01b0384811691161480159061181657505f546001600160a01b03838116911614155b15611a03575f61182530610916565b601654909150600160a01b900460ff1615801561185057506016546001600160a01b03858116911614155b80156118655750601654600160a81b900460ff165b801561187057505f81115b156118a45761189261188d8361188884600a54611d81565b611d81565b611c06565b4780156118a2576118a247611a46565b505b6016546001600160a01b0385811691161480156118cf57506015546001600160a01b03848116911614155b1561194657600954826118e185610916565b6118eb9190612456565b11156119395760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610845565b600b54600f55600c546010555b6016546001600160a01b03848116911614801561197157506015546001600160a01b03858116911614155b1561198357600d54600f55600e546010555b6001600160a01b0384165f9081526003602052604090205460ff16806119c057506001600160a01b0383165f9081526003602052604090205460ff165b806119f257506016546001600160a01b038581169116148015906119f257506016546001600160a01b03848116911614155b15611a01575f600f8190556010555b505b6117b2838383611d76565b5f8184841115611a315760405162461bcd60e51b81526004016108459190612133565b505f611a3d8486612469565b95945050505050565b5f611a5d6008611a57846002611d95565b90611e13565b90505f611a706008611a57856002611d95565b90505f611a836008611a57866002611d95565b90505f611a9c82611a9685818989611e54565b90611e54565b6011546040519192506001600160a01b03169085156108fc029086905f818181858888f19350505050158015611ad4573d5f803e3d5ffd5b506012546040516001600160a01b039091169084156108fc029085905f818181858888f19350505050158015611b0c573d5f803e3d5ffd5b506013546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015611b44573d5f803e3d5ffd5b506014546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611b7c573d5f803e3d5ffd5b505050505050565b5f600854821115611bea5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610845565b5f611bf3611e95565b9050611bff8382611e13565b9392505050565b6016805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c4c57611c4c6123be565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ca3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc7919061247c565b81600181518110611cda57611cda6123be565b6001600160a01b039283166020918202929092010152601554611d009130911684611419565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d389085905f90869030904290600401612497565b5f604051808303815f87803b158015611d4f575f80fd5b505af1158015611d61573d5f803e3d5ffd5b50506016805460ff60a01b1916905550505050565b6117b2838383611eb6565b5f818311611d8f5782611bff565b50919050565b5f825f03611da457505f6107af565b5f611daf8385612506565b905082611dbc858361251d565b14611bff5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610845565b5f611bff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612057565b5f611bff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a0e565b5f805f611ea0612083565b9092509050611eaf8282611e13565b9250505090565b5f611ebf611e95565b90505f611f03611edf6064611a5760105487611d9590919063ffffffff16565b611a96611efc6064611a57600f5489611d9590919063ffffffff16565b8690611e54565b90505f611f108484611d95565b90505f611f3784611f316064611a57600f548a611d9590919063ffffffff16565b90611d95565b90505f611f5885611f316064611a576010548b611d9590919063ffffffff16565b90505f611f6982611a968686611e54565b6001600160a01b038a165f90815260016020526040902054909150611f8e9085611e54565b6001600160a01b03808b165f9081526001602052604080822093909355908a1681522054611fbc90826120c2565b6001600160a01b0389165f90815260016020526040808220929092553081522054611fe790836120c2565b305f90815260016020526040902055611fff83612120565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161204491815260200190565b60405180910390a3505050505050505050565b5f81836120775760405162461bcd60e51b81526004016108459190612133565b505f611a3d848661251d565b6008545f908190670de0b6b3a764000061209d8282611e13565b8210156120b957505060085492670de0b6b3a764000092509050565b90939092509050565b5f806120ce8385612456565b905083811015611bff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610845565b60085461212d9082611e54565b60085550565b5f6020808352835180828501525f5b8181101561215e57858101830151858201604001528201612142565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610913575f80fd5b5f80604083850312156121a3575f80fd5b82356121ae8161217e565b946020939093013593505050565b5f602082840312156121cc575f80fd5b8135611bff8161217e565b5f805f606084860312156121e9575f80fd5b83356121f48161217e565b925060208401356122048161217e565b929592945050506040919091013590565b8015158114610913575f80fd5b5f8060408385031215612233575f80fd5b823561223e8161217e565b9150602083013561224e81612215565b809150509250929050565b5f60208284031215612269575f80fd5b8135611bff81612215565b5f805f8060808587031215612287575f80fd5b5050823594602084013594506040840135936060013592509050565b5f602082840312156122b3575f80fd5b813560ff81168114611bff575f80fd5b5f805f604084860312156122d5575f80fd5b833567ffffffffffffffff808211156122ec575f80fd5b818601915086601f8301126122ff575f80fd5b81358181111561230d575f80fd5b8760208260051b8501011115612321575f80fd5b6020928301955093505084013561233781612215565b809150509250925092565b5f8060408385031215612353575f80fd5b823561235e8161217e565b9150602083013561224e8161217e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156123b3575f80fd5b8151611bff81612215565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016123f7576123f76123d2565b5060010190565b604080825281018390525f8460608301825b868110156124405782356124238161217e565b6001600160a01b0316825260209283019290910190600101612410565b5080925050508215156020830152949350505050565b808201808211156107af576107af6123d2565b818103818111156107af576107af6123d2565b5f6020828403121561248c575f80fd5b8151611bff8161217e565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124e55784516001600160a01b0316835293830193918301916001016124c0565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107af576107af6123d2565b5f8261253757634e487b7160e01b5f52601260045260245ffd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212205b136a57d1e48210e6960fea68afff7068d233801658b492e20af023a94882be64736f6c63430008140033
Deployed Bytecode Sourcemap
19668:14758:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19999:75;;;;;;;;;;-1:-1:-1;19999:75:0;;;;-1:-1:-1;;;;;19999:75:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;19999:75:0;;;;;;;;22677:83;;;;;;;;;;-1:-1:-1;22747:5:0;;;;;;;;;;;-1:-1:-1;;;22747:5:0;;;;22677:83;;;;22747:5;22677:83;:::i;23529:161::-;;;;;;;;;;-1:-1:-1;23529:161:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;23529:161:0;1231:187:1;19758:43:0;;;;;;;;;;-1:-1:-1;19758:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1821:25:1;;;1809:2;1794:18;19758:43:0;1675:177:1;20470:45:0;;;;;;;;;;;;;;;;21310:41;;;;;;;;;;-1:-1:-1;21310:41:0;;;;-1:-1:-1;;;;;21310:41:0;;;20125:32;;;;;;;;;;-1:-1:-1;20125:32:0;;;;-1:-1:-1;;;20125:32:0;;;;;;22954:95;;;;;;;;;;-1:-1:-1;20328:19:0;22954:95;;19944:46;;;;;;;;;;-1:-1:-1;19944:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20081:37;;;;;;;;;;-1:-1:-1;20081:37:0;;;;-1:-1:-1;;;20081:37:0;;;;;;23698:313;;;;;;;;;;-1:-1:-1;23698:313:0;;;;;:::i;:::-;;:::i;20203:28::-;;;;;;;;;;-1:-1:-1;20203:28:0;;;;;;;;;;;2724:4:1;2712:17;;;2694:36;;2682:2;2667:18;20203:28:0;2552:184:1;22863:83:0;;;;;;;;;;-1:-1:-1;20899:1:0;22863:83;;33271:169;;;;;;;;;;-1:-1:-1;33271:169:0;;;;;:::i;:::-;;:::i;:::-;;21358:28;;;;;;;;;;-1:-1:-1;21358:28:0;;;;-1:-1:-1;;;;;21358:28:0;;;20164:32;;;;;;;;;;;;;;;;32447:101;;;;;;;;;;-1:-1:-1;32447:101:0;;;;;:::i;:::-;;:::i;31684:186::-;;;;;;;;;;;;;:::i;23057:138::-;;;;;;;;;;-1:-1:-1;23057:138:0;;;;;:::i;:::-;;:::i;19087:148::-;;;;;;;;;;;;;:::i;33973:85::-;;;;;;;;;;;;;:::i;29163:237::-;;;;;;;;;;-1:-1:-1;29163:237:0;;;;;:::i;:::-;;:::i;33795:170::-;;;;;;;;;;-1:-1:-1;33795:170:0;;;;;:::i;:::-;;:::i;19886:51::-;;;;;;;;;;-1:-1:-1;19886:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18445:79;;;;;;;;;;-1:-1:-1;18483:7:0;18510:6;-1:-1:-1;;;;;18510:6:0;18445:79;;20412:51;;;;;;;;;;;;;;;;34070:353;;;;;;;;;;-1:-1:-1;34070:353:0;;;;;:::i;:::-;;:::i;28855:213::-;;;;;;;;;;-1:-1:-1;28855:213:0;;;;;:::i;:::-;;:::i;31882:553::-;;;;;;;;;;-1:-1:-1;31882:553:0;;;;;:::i;:::-;;:::i;29796:245::-;;;;;;;;;;-1:-1:-1;29796:245:0;;;;;:::i;:::-;;:::i;23203:167::-;;;;;;;;;;-1:-1:-1;23203:167:0;;;;;:::i;:::-;;:::i;22507:162::-;;;;;;;;;;-1:-1:-1;22507:162:0;;;;;:::i;:::-;;:::i;22363:136::-;;;;;;;;;;-1:-1:-1;22363:136:0;;;;;:::i;:::-;;:::i;29486:221::-;;;;;;;;;;-1:-1:-1;29486:221:0;;;;;:::i;:::-;;:::i;33016:181::-;;;;;;;;;;-1:-1:-1;33016:181:0;;;;;:::i;:::-;;:::i;31489:187::-;;;;;;;;;;;;;:::i;32637:301::-;;;;;;;;;;-1:-1:-1;32637:301:0;;;;;:::i;:::-;;:::i;23378:143::-;;;;;;;;;;-1:-1:-1;23378:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;23486:18:0;;;23459:7;23486:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23378:143;28557:209;;;;;;;;;;-1:-1:-1;28557:209:0;;;;;:::i;:::-;;:::i;19390:244::-;;;;;;;;;;-1:-1:-1;19390:244:0;;;;;:::i;:::-;;:::i;33516:271::-;;;;;;;;;;-1:-1:-1;33516:271:0;;;;;:::i;:::-;;:::i;23529:161::-;23604:4;23621:39;6736:10;23644:7;23653:6;23621:8;:39::i;:::-;-1:-1:-1;23678:4:0;23529:161;;;;;:::o;23698:313::-;23796:4;23813:36;23823:6;23831:9;23842:6;23813:9;:36::i;:::-;23860:121;23869:6;6736:10;23891:89;23929:6;23891:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23891:19:0;;;;;;:11;:19;;;;;;;;6736:10;23891:33;;;;;;;;;;:37;:89::i;:::-;23860:8;:121::i;:::-;-1:-1:-1;23999:4:0;23698:313;;;;;:::o;33271:169::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;33353:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;33353:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33400:32;;1371:41:1;;;33400:32:0::1;::::0;1344:18:1;33400:32:0::1;;;;;;;;33271:169:::0;;:::o;32447:101::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;32514:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;32514:26:0::1;-1:-1:-1::0;;;;32514:26:0;;::::1;::::0;;;::::1;::::0;;32447:101::o;31684:186::-;18483:7;18510:6;-1:-1:-1;;;;;18510:6:0;6736:10;31734:23;31726:32;;;;;;31798:21;31830:32;31798:21;31830:12;:32::i;:::-;31715:155;31684:186::o;23057:138::-;-1:-1:-1;;;;;23170:16:0;;23123:7;23170:16;;;:7;:16;;;;;;23150:37;;:19;:37::i;19087:148::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;19194:1:::1;19178:6:::0;;19157:40:::1;::::0;-1:-1:-1;;;;;19178:6:0;;::::1;::::0;19157:40:::1;::::0;19194:1;;19157:40:::1;19225:1;19208:19:::0;;-1:-1:-1;;;;;;19208:19:0::1;::::0;;19087:148::o;33973:85::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;20328:19:::1;34026:14;:24:::0;33973:85::o;29163:237::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;29275:17:::1;::::0;29251:49:::1;::::0;-1:-1:-1;;;;;29251:49:0;;::::1;::::0;29275:17:::1;::::0;29251:49:::1;::::0;29275:17:::1;::::0;29251:49:::1;29312:17;:25:::0;;-1:-1:-1;;;;;29312:25:0;;::::1;-1:-1:-1::0;;;;;;29312:25:0;;::::1;::::0;::::1;::::0;;:17:::1;29348:37:::0;;;:18:::1;:37;::::0;;;;:44;;-1:-1:-1;;29348:44:0::1;29312:25:::0;29348:44:::1;::::0;;29163:237::o;33795:170::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;33866:9:::1;33887:4;-1:-1:-1::0;;;;;33879:18:0::1;33906:21;33879:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33865:68;;;33952:4;33944:13;;;::::0;::::1;;33854:111;33795:170:::0;:::o;34070:353::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;34302:45:::1;::::0;-1:-1:-1;;;34302:45:0;;34332:4:::1;34302:45;::::0;::::1;6314:51:1::0;6381:18;;;6374:34;;;34190:14:0;;-1:-1:-1;;;;;34302:21:0;::::1;::::0;::::1;::::0;6287:18:1;;34302:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34356:13;-1:-1:-1::0;;;;;34356:26:0::1;;34391:4;34398:7;18483::::0;18510:6;-1:-1:-1;;;;;18510:6:0;;18445:79;34398:7:::1;34356:59;::::0;-1:-1:-1;;;;;;34356:59:0::1;::::0;;;;;;-1:-1:-1;;;;;6927:15:1;;;34356:59:0::1;::::0;::::1;6909:34:1::0;6979:15;;6959:18;;;6952:43;7011:18;;;7004:34;;;6844:18;;34356:59:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34153:270;34070:353:::0;;:::o;28855:213::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;28957:11:::1;::::0;28939:39:::1;::::0;-1:-1:-1;;;;;28939:39:0;;::::1;::::0;28957:11:::1;::::0;28939:39:::1;::::0;28957:11:::1;::::0;28939:39:::1;28990:11;:21:::0;;-1:-1:-1;;;;;28990:21:0;;::::1;-1:-1:-1::0;;;;;;28990:21:0;;::::1;::::0;::::1;::::0;;:11:::1;29022:31:::0;;;:18:::1;:31;::::0;;;;:38;;-1:-1:-1;;29022:38:0::1;28990:21:::0;29022:38:::1;::::0;;28855:213::o;31882:553::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;32037:1:::1;32021:13;:17;32013:58;;;::::0;-1:-1:-1;;;32013:58:0;;7251:2:1;32013:58:0::1;::::0;::::1;7233:21:1::0;7290:2;7270:18;;;7263:30;7329;7309:18;;;7302:58;7377:18;;32013:58:0::1;7049:352:1::0;32013:58:0::1;32104:1;32087:14;:18;32079:59;;;::::0;-1:-1:-1;;;32079:59:0;;7251:2:1;32079:59:0::1;::::0;::::1;7233:21:1::0;7290:2;7270:18;;;7263:30;7329;7309:18;;;7302:58;7377:18;;32079:59:0::1;7049:352:1::0;32079:59:0::1;32168:2;32154:11;:16;32146:56;;;::::0;-1:-1:-1;;;32146:56:0;;7608:2:1;32146:56:0::1;::::0;::::1;7590:21:1::0;7647:2;7627:18;;;7620:30;7686:29;7666:18;;;7659:57;7733:18;;32146:56:0::1;7406:351:1::0;32146:56:0::1;32233:2;32218:12;:17;32210:57;;;::::0;-1:-1:-1;;;32210:57:0;;7608:2:1;32210:57:0::1;::::0;::::1;7590:21:1::0;7647:2;7627:18;;;7620:30;7686:29;7666:18;;;7659:57;7733:18;;32210:57:0::1;7406:351:1::0;32210:57:0::1;32278:14;:30:::0;;;;32319:15:::1;:32:::0;;;;32362:12:::1;:26:::0;32399:13:::1;:28:::0;31882:553::o;29796:245::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;29910:15:::1;::::0;29888:51:::1;::::0;-1:-1:-1;;;;;29888:51:0;;::::1;::::0;29910:15:::1;::::0;29888:51:::1;::::0;29910:15:::1;::::0;29888:51:::1;29951:15;:29:::0;;-1:-1:-1;;;;;29951:29:0;;::::1;-1:-1:-1::0;;;;;;29951:29:0;;::::1;::::0;::::1;::::0;;:15:::1;29991:35:::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;29991:42:0::1;29951:29:::0;29991:42:::1;::::0;;29796:245::o;23203:167::-;23281:4;23298:42;6736:10;23322:9;23333:6;23298:9;:42::i;22507:162::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;22588:15:::1;:24:::0;;-1:-1:-1;;;;;;22588:24:0::1;-1:-1:-1::0;;;;;22588:24:0;::::1;::::0;;::::1;::::0;;;22623:38:::1;::::0;-1:-1:-1;22623:15:0::1;:38::i;22363:136::-:0;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;22441:17:::1;::::0;-1:-1:-1;;;22441:17:0;::::1;;;22440:18;22432:27;;;::::0;::::1;;22470:11;:21:::0;;-1:-1:-1;;22470:21:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22363:136::o;29486:221::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;29591:12:::1;::::0;29572:42:::1;::::0;-1:-1:-1;;;;;29572:42:0;;::::1;::::0;29591:12:::1;::::0;29572:42:::1;::::0;29591:12:::1;::::0;29572:42:::1;29626:12;:23:::0;;-1:-1:-1;;;;;29626:23:0;;::::1;-1:-1:-1::0;;;;;;29626:23:0;;::::1;::::0;::::1;::::0;;:12:::1;29660:32:::0;;;:18:::1;:32;::::0;;;;:39;;-1:-1:-1;;29660:39:0::1;29626:23:::0;29660:39:::1;::::0;;29486:221::o;33016:181::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33101:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;33101:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33155:34;;1371:41:1;;;33155:34:0::1;::::0;1344:18:1;33155:34:0::1;1231:187:1::0;31489::0;18483:7;18510:6;-1:-1:-1;;;;;18510:6:0;6736:10;31539:23;31531:32;;;;;;31574:23;31600:24;31618:4;31600:9;:24::i;:::-;31574:50;;31635:33;31652:15;31635:16;:33::i;32637:301::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;32754:9:::1;32750:114;32769:19:::0;;::::1;32750:114;;;32844:8;32810:18;:31;32829:8;;32838:1;32829:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32810:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32810:31:0;:42;;-1:-1:-1;;32810:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32790:3;::::1;::::0;::::1;:::i;:::-;;;;32750:114;;;;32879:51;32911:8;;32921;32879:51;;;;;;;;:::i;:::-;;;;;;;;32637:301:::0;;;:::o;28557:209::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;28692:3:::1;-1:-1:-1::0;;;;;28666:39:0::1;28680:10;-1:-1:-1::0;;;;;28666:39:0::1;;28697:7;28666:39;;;;1821:25:1::0;;1809:2;1794:18;;1675:177;28666:39:0::1;;;;;;;;28717:41;::::0;-1:-1:-1;;;28717:41:0;;-1:-1:-1;;;;;6332:32:1;;;28717:41:0::1;::::0;::::1;6314:51:1::0;6381:18;;;6374:34;;;28717:27:0;::::1;::::0;::::1;::::0;6287:18:1;;28717:41:0::1;6140:274:1::0;19390:244:0;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19479:22:0;::::1;19471:73;;;::::0;-1:-1:-1;;;19471:73:0;;9167:2:1;19471:73:0::1;::::0;::::1;9149:21:1::0;9206:2;9186:18;;;9179:30;9245:34;9225:18;;;9218:62;-1:-1:-1;;;9296:18:1;;;9289:36;9342:19;;19471:73:0::1;8965:402:1::0;19471:73:0::1;19581:6;::::0;;19560:38:::1;::::0;-1:-1:-1;;;;;19560:38:0;;::::1;::::0;19581:6;::::1;::::0;19560:38:::1;::::0;::::1;19609:6;:17:::0;;-1:-1:-1;;;;;;19609:17:0::1;-1:-1:-1::0;;;;;19609:17:0;;;::::1;::::0;;;::::1;::::0;;19390:244::o;33516:271::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;33621:9:::1;33617:107;33636:19:::0;;::::1;33617:107;;;33707:5;33677:14;:27;33692:8;;33701:1;33692:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33677:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33677:27:0;:35;;-1:-1:-1;;33677:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33657:3;::::1;::::0;::::1;:::i;:::-;;;;33617:107;;;;33739:40;33763:8;;33773:5;33739:40;;;;;;;;:::i;24281:335::-:0;-1:-1:-1;;;;;24374:19:0;;24366:68;;;;-1:-1:-1;;;24366:68:0;;9574:2:1;24366:68:0;;;9556:21:1;9613:2;9593:18;;;9586:30;9652:34;9632:18;;;9625:62;-1:-1:-1;;;9703:18:1;;;9696:34;9747:19;;24366:68:0;9372:400:1;24366:68:0;-1:-1:-1;;;;;24453:21:0;;24445:68;;;;-1:-1:-1;;;24445:68:0;;9979:2:1;24445:68:0;;;9961:21:1;10018:2;9998:18;;;9991:30;10057:34;10037:18;;;10030:62;-1:-1:-1;;;10108:18:1;;;10101:32;10150:19;;24445:68:0;9777:398:1;24445:68:0;-1:-1:-1;;;;;24524:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24576:32;;1821:25:1;;;24576:32:0;;1794:18:1;24576:32:0;;;;;;;24281:335;;;:::o;24624:2582::-;-1:-1:-1;;;;;24712:18:0;;24704:68;;;;-1:-1:-1;;;24704:68:0;;10382:2:1;24704:68:0;;;10364:21:1;10421:2;10401:18;;;10394:30;10460:34;10440:18;;;10433:62;-1:-1:-1;;;10511:18:1;;;10504:35;10556:19;;24704:68:0;10180:401:1;24704:68:0;-1:-1:-1;;;;;24791:16:0;;24783:64;;;;-1:-1:-1;;;24783:64:0;;10788:2:1;24783:64:0;;;10770:21:1;10827:2;10807:18;;;10800:30;10866:34;10846:18;;;10839:62;-1:-1:-1;;;10917:18:1;;;10910:33;10960:19;;24783:64:0;10586:399:1;24783:64:0;24875:1;24866:6;:10;24858:64;;;;-1:-1:-1;;;24858:64:0;;11192:2:1;24858:64:0;;;11174:21:1;11231:2;11211:18;;;11204:30;11270:34;11250:18;;;11243:62;-1:-1:-1;;;11321:18:1;;;11314:39;11370:19;;24858:64:0;10990:405:1;24858:64:0;-1:-1:-1;;;;;24942:20:0;;;;;;:14;:20;;;;;;;;24941:21;24933:53;;;;-1:-1:-1;;;24933:53:0;;11602:2:1;24933:53:0;;;11584:21:1;11641:2;11621:18;;;11614:30;-1:-1:-1;;;11660:18:1;;;11653:49;11719:18;;24933:53:0;11400:343:1;24933:53:0;25011:1;24999:9;:13;;;25023:7;:11;25100:17;;-1:-1:-1;;;25100:17:0;;;;25095:245;;25144:13;;-1:-1:-1;;;;;25144:13:0;;;25138:19;;;;25134:195;;25178:17;:24;;-1:-1:-1;;;;25178:24:0;-1:-1:-1;;;25178:24:0;;;25302:11;;25287:26;;25178:24;25302:11;25287:12;:26;:::i;:::-;25267:17;:46;25134:195;25397:15;;-1:-1:-1;;;;;25381:32:0;;;25397:15;;25381:32;25377:434;;25433:17;;-1:-1:-1;;;25433:17:0;;;;:54;;;;;25470:17;;25454:12;:33;;25433:54;:72;;;;-1:-1:-1;25492:13:0;;-1:-1:-1;;;25492:13:0;;;;25491:14;25433:72;25430:370;;;25537:14;;25525:9;:26;25580:12;;25570:7;:22;25611:30;25626:4;25631:2;25634:6;25611:14;:30::i;:::-;25678:13;;-1:-1:-1;;;;;25664:28:0;;;25678:13;;25664:28;25660:100;;-1:-1:-1;;;;;25717:18:0;;;;;;:14;:18;;;;;:23;;-1:-1:-1;;25717:23:0;25736:4;25717:23;;;25660:100;24624:2582;;;:::o;25430:370::-;25827:17;;-1:-1:-1;;;25827:17:0;;;;:34;;;;-1:-1:-1;25848:13:0;;-1:-1:-1;;;25848:13:0;;;;25827:34;25823:87;;;25877:13;:21;;-1:-1:-1;;;;25877:21:0;;;25823:87;18483:7;18510:6;-1:-1:-1;;;;;25934:15:0;;;18510:6;;25934:15;;;;:32;;-1:-1:-1;18483:7:0;18510:6;-1:-1:-1;;;;;25953:13:0;;;18510:6;;25953:13;;25934:32;25930:1226;;;25997:28;26028:24;26046:4;26028:9;:24::i;:::-;26072:6;;25997:55;;-1:-1:-1;;;;26072:6:0;;;;26071:7;:32;;;;-1:-1:-1;26090:13:0;;-1:-1:-1;;;;;26082:21:0;;;26090:13;;26082:21;;26071:32;:47;;;;-1:-1:-1;26107:11:0;;-1:-1:-1;;;26107:11:0;;;;26071:47;:75;;;;;26145:1;26122:20;:24;26071:75;26067:377;;;26167:69;26184:51;26188:6;26196:38;26200:20;26222:11;;26196:3;:38::i;:::-;26184:3;:51::i;:::-;26167:16;:69::i;:::-;26284:21;26327:22;;26324:105;;26374:35;26387:21;26374:12;:35::i;:::-;26148:296;26067:377;26483:13;;-1:-1:-1;;;;;26475:21:0;;;26483:13;;26475:21;:55;;;;-1:-1:-1;26514:15:0;;-1:-1:-1;;;;;26500:30:0;;;26514:15;;26500:30;;26475:55;26472:260;;;26585:14;;26575:6;26559:13;26569:2;26559:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26551:79;;;;-1:-1:-1;;;26551:79:0;;12080:2:1;26551:79:0;;;12062:21:1;12119:2;12099:18;;;12092:30;12158:28;12138:18;;;12131:56;12204:18;;26551:79:0;11878:350:1;26551:79:0;26661:14;;26649:9;:26;26704:12;;26694:7;:22;26472:260;26762:13;;-1:-1:-1;;;;;26756:19:0;;;26762:13;;26756:19;:55;;;;-1:-1:-1;26795:15:0;;-1:-1:-1;;;;;26779:32:0;;;26795:15;;26779:32;;26756:55;26752:165;;;26844:15;;26832:9;:27;26888:13;;26878:7;:23;26752:165;-1:-1:-1;;;;;26950:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;26978:22:0;;;;;;:18;:22;;;;;;;;26950:50;26949:102;;;-1:-1:-1;27014:13:0;;-1:-1:-1;;;;;27006:21:0;;;27014:13;;27006:21;;;;:44;;-1:-1:-1;27037:13:0;;-1:-1:-1;;;;;27031:19:0;;;27037:13;;27031:19;;27006:44;26945:186;;;27084:1;27072:9;:13;;;27104:7;:11;26945:186;25968:1188;25930:1226;27168:30;27183:4;27188:2;27191:6;27168:14;:30::i;8768:192::-;8854:7;8890:12;8882:6;;;;8874:29;;;;-1:-1:-1;;;8874:29:0;;;;;;;;:::i;:::-;-1:-1:-1;8914:9:0;8926:5;8930:1;8926;:5;:::i;:::-;8914:17;8768:192;-1:-1:-1;;;;;8768:192:0:o;27713:482::-;27770:17;27790:20;27808:1;27790:13;:6;27801:1;27790:10;:13::i;:::-;:17;;:20::i;:::-;27770:40;-1:-1:-1;27821:17:0;27841:20;27859:1;27841:13;:6;27852:1;27841:10;:13::i;:20::-;27821:40;-1:-1:-1;27872:21:0;27896:20;27914:1;27896:13;:6;27907:1;27896:10;:13::i;:20::-;27872:44;-1:-1:-1;27927:18:0;27948:55;27872:44;27948:36;27974:9;27948:36;:6;27959:9;27948:10;:21::i;:::-;:25;;:36::i;:55::-;28014:11;;:31;;27927:76;;-1:-1:-1;;;;;;28014:11:0;;:31;;;;;28035:9;;28014:11;:31;:11;:31;28035:9;28014:11;:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28056:17:0;;:37;;-1:-1:-1;;;;;28056:17:0;;;;:37;;;;;28083:9;;28056:17;:37;:17;:37;28083:9;28056:17;:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28104:15:0;;:39;;-1:-1:-1;;;;;28104:15:0;;;;:39;;;;;28129:13;;28104:15;:39;:15;:39;28129:13;28104:15;:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28154:12:0;;:33;;-1:-1:-1;;;;;28154:12:0;;;;:33;;;;;28176:10;;28154:12;:33;:12;:33;28176:10;28154:12;:33;;;;;;;;;;;;;;;;;;;;;27759:436;;;;27713:482;:::o;24019:254::-;24086:7;24125;;24114;:18;;24106:73;;;;-1:-1:-1;;;24106:73:0;;12568:2:1;24106:73:0;;;12550:21:1;12607:2;12587:18;;;12580:30;12646:34;12626:18;;;12619:62;-1:-1:-1;;;12697:18:1;;;12690:40;12747:19;;24106:73:0;12366:406:1;24106:73:0;24190:19;24213:10;:8;:10::i;:::-;24190:33;-1:-1:-1;24241:24:0;:7;24190:33;24241:11;:24::i;:::-;24234:31;24019:254;-1:-1:-1;;;24019:254:0:o;27214:483::-;21509:6;:13;;-1:-1:-1;;;;21509:13:0;-1:-1:-1;;;21509:13:0;;;27316:16:::1;::::0;;27330:1:::1;27316:16:::0;;;;;::::1;::::0;;-1:-1:-1;;27316:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27316:16:0::1;27292:40;;27361:4;27343;27348:1;27343:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27343:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27387:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;27387:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;27343:7;;27387:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27377:4;27382:1;27377:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27377:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;27452:15:::1;::::0;27420:62:::1;::::0;27437:4:::1;::::0;27452:15:::1;27470:11:::0;27420:8:::1;:62::i;:::-;27493:15;::::0;:196:::1;::::0;-1:-1:-1;;;27493:196:0;;-1:-1:-1;;;;;27493:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;27574:11;;27493:15:::1;::::0;27616:4;;27643::::1;::::0;27663:15:::1;::::0;27493:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21545:6:0;:14;;-1:-1:-1;;;;21545:14:0;;;-1:-1:-1;;;;27214:483:0:o;28321:146::-;28415:44;28433:6;28441:9;28452:6;28415:17;:44::i;28203:106::-;28260:7;28291:1;28287;:5;28286:15;;28300:1;28286:15;;;-1:-1:-1;28296:1:0;28279:22;-1:-1:-1;28203:106:0:o;9219:471::-;9277:7;9522:1;9527;9522:6;9518:47;;-1:-1:-1;9552:1:0;9545:8;;9518:47;9577:9;9589:5;9593:1;9589;:5;:::i;:::-;9577:17;-1:-1:-1;9622:1:0;9613:5;9617:1;9577:17;9613:5;:::i;:::-;:10;9605:56;;;;-1:-1:-1;;;9605:56:0;;14747:2:1;9605:56:0;;;14729:21:1;14786:2;14766:18;;;14759:30;14825:34;14805:18;;;14798:62;-1:-1:-1;;;14876:18:1;;;14869:31;14917:19;;9605:56:0;14545:397:1;10166:132:0;10224:7;10251:39;10255:1;10258;10251:39;;;;;;;;;;;;;;;;;:3;:39::i;8329:136::-;8387:7;8414:43;8418:1;8421;8414:43;;;;;;;;;;;;;;;;;:3;:43::i;31048:163::-;31089:7;31110:15;31127;31146:19;:17;:19::i;:::-;31109:56;;-1:-1:-1;31109:56:0;-1:-1:-1;31183:20:0;31109:56;;31183:11;:20::i;:::-;31176:27;;;;31048:163;:::o;30049:805::-;30147:19;30170:10;:8;:10::i;:::-;30147:33;;30191:23;30217:79;30266:29;30291:3;30266:20;30278:7;;30266;:11;;:20;;;;:::i;:29::-;30217:44;30229:31;30256:3;30229:22;30241:9;;30229:7;:11;;:22;;;;:::i;:31::-;30217:7;;:11;:44::i;:79::-;30191:105;-1:-1:-1;30307:15:0;30325:24;:7;30337:11;30325;:24::i;:::-;30307:42;;30360:12;30375:48;30411:11;30375:31;30402:3;30375:22;30387:9;;30375:7;:11;;:22;;;;:::i;:31::-;:35;;:48::i;:::-;30360:63;;30434:13;30450:46;30484:11;30450:29;30475:3;30450:20;30462:7;;30450;:11;;:20;;;;:::i;:46::-;30434:62;-1:-1:-1;30507:23:0;30533:28;30434:62;30533:17;:7;30545:4;30533:11;:17::i;:28::-;-1:-1:-1;;;;;30590:15:0;;;;;;:7;:15;;;;;;30507:54;;-1:-1:-1;30590:28:0;;30610:7;30590:19;:28::i;:::-;-1:-1:-1;;;;;30572:15:0;;;;;;;:7;:15;;;;;;:46;;;;30650:18;;;;;;;:39;;30673:15;30650:22;:39::i;:::-;-1:-1:-1;;;;;30629:18:0;;;;;;:7;:18;;;;;;:60;;;;30741:4;30725:22;;;;:33;;30752:5;30725:26;:33::i;:::-;30716:4;30700:22;;;;:7;:22;;;;;:58;30769:17;30781:4;30769:11;:17::i;:::-;30819:9;-1:-1:-1;;;;;30802:44:0;30811:6;-1:-1:-1;;;;;30802:44:0;;30830:15;30802:44;;;;1821:25:1;;1809:2;1794:18;;1675:177;30802:44:0;;;;;;;;30136:718;;;;;;30049:805;;;:::o;10794:278::-;10880:7;10915:12;10908:5;10900:28;;;;-1:-1:-1;;;10900:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10939:9:0;10951:5;10955:1;10951;:5;:::i;31219:262::-;31316:7;;31269;;;;20328:19;31390:20;31316:7;20328:19;31390:11;:20::i;:::-;31380:7;:30;31376:61;;;-1:-1:-1;;31420:7:0;;;20328:19;;-1:-1:-1;31219:262:0;-1:-1:-1;31219:262:0:o;31376:61::-;31456:7;;31465;;-1:-1:-1;31219:262:0;-1:-1:-1;31219:262:0:o;7865:181::-;7923:7;;7955:5;7959:1;7955;:5;:::i;:::-;7943:17;;7984:1;7979;:6;;7971:46;;;;-1:-1:-1;;;7971:46:0;;15149:2:1;7971:46:0;;;15131:21:1;15188:2;15168:18;;;15161:30;15227:29;15207:18;;;15200:57;15274:18;;7971:46:0;14947:351:1;30917:89:0;30981:7;;:17;;30993:4;30981:11;:17::i;:::-;30971:7;:27;-1:-1:-1;30917:89:0:o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1423:247::-;1482:6;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;2091:456::-;2168:6;2176;2184;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;-1:-1:-1;2418:2:1;2403:18;;2390:32;2431:33;2390:32;2431:33;:::i;:::-;2091:456;;2483:7;;-1:-1:-1;;;2537:2:1;2522:18;;;;2509:32;;2091:456::o;2741:118::-;2827:5;2820:13;2813:21;2806:5;2803:32;2793:60;;2849:1;2846;2839:12;2864:382;2929:6;2937;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;3045:9;3032:23;3064:31;3089:5;3064:31;:::i;:::-;3114:5;-1:-1:-1;3171:2:1;3156:18;;3143:32;3184:30;3143:32;3184:30;:::i;:::-;3233:7;3223:17;;;2864:382;;;;;:::o;3251:241::-;3307:6;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3415:9;3402:23;3434:28;3456:5;3434:28;:::i;3757:385::-;3843:6;3851;3859;3867;3920:3;3908:9;3899:7;3895:23;3891:33;3888:53;;;3937:1;3934;3927:12;3888:53;-1:-1:-1;;3960:23:1;;;4030:2;4015:18;;4002:32;;-1:-1:-1;4081:2:1;4066:18;;4053:32;;4132:2;4117:18;4104:32;;-1:-1:-1;3757:385:1;-1:-1:-1;3757:385:1:o;4147:269::-;4204:6;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4312:9;4299:23;4362:4;4355:5;4351:16;4344:5;4341:27;4331:55;;4382:1;4379;4372:12;4421:750;4513:6;4521;4529;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4638:9;4625:23;4667:18;4708:2;4700:6;4697:14;4694:34;;;4724:1;4721;4714:12;4694:34;4762:6;4751:9;4747:22;4737:32;;4807:7;4800:4;4796:2;4792:13;4788:27;4778:55;;4829:1;4826;4819:12;4778:55;4869:2;4856:16;4895:2;4887:6;4884:14;4881:34;;;4911:1;4908;4901:12;4881:34;4966:7;4959:4;4949:6;4946:1;4942:14;4938:2;4934:23;4930:34;4927:47;4924:67;;;4987:1;4984;4977:12;4924:67;5018:4;5010:13;;;;-1:-1:-1;5042:6:1;-1:-1:-1;;5083:20:1;;5070:34;5113:28;5070:34;5113:28;:::i;:::-;5160:5;5150:15;;;4421:750;;;;;:::o;5176:388::-;5244:6;5252;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5360:9;5347:23;5379:31;5404:5;5379:31;:::i;:::-;5429:5;-1:-1:-1;5486:2:1;5471:18;;5458:32;5499:33;5458:32;5499:33;:::i;5569:356::-;5771:2;5753:21;;;5790:18;;;5783:30;5849:34;5844:2;5829:18;;5822:62;5916:2;5901:18;;5569:356::o;6419:245::-;6486:6;6539:2;6527:9;6518:7;6514:23;6510:32;6507:52;;;6555:1;6552;6545:12;6507:52;6587:9;6581:16;6606:28;6628:5;6606:28;:::i;7762:127::-;7823:10;7818:3;7814:20;7811:1;7804:31;7854:4;7851:1;7844:15;7878:4;7875:1;7868:15;7894:127;7955:10;7950:3;7946:20;7943:1;7936:31;7986:4;7983:1;7976:15;8010:4;8007:1;8000:15;8026:135;8065:3;8086:17;;;8083:43;;8106:18;;:::i;:::-;-1:-1:-1;8153:1:1;8142:13;;8026:135::o;8166:794::-;8388:2;8400:21;;;8373:18;;8456:22;;;8340:4;8535:6;8509:2;8494:18;;8340:4;8569:304;8583:6;8580:1;8577:13;8569:304;;;8658:6;8645:20;8678:31;8703:5;8678:31;:::i;:::-;-1:-1:-1;;;;;8734:31:1;8722:44;;8789:4;8848:15;;;;8813:12;;;;8762:1;8598:9;8569:304;;;8573:3;8890;8882:11;;;;8945:6;8938:14;8931:22;8924:4;8913:9;8909:20;8902:52;8166:794;;;;;;:::o;11748:125::-;11813:9;;;11834:10;;;11831:36;;;11847:18;;:::i;12233:128::-;12300:9;;;12321:11;;;12318:37;;;12335:18;;:::i;12909:251::-;12979:6;13032:2;13020:9;13011:7;13007:23;13003:32;13000:52;;;13048:1;13045;13038:12;13000:52;13080:9;13074:16;13099:31;13124:5;13099:31;:::i;13165:980::-;13427:4;13475:3;13464:9;13460:19;13506:6;13495:9;13488:25;13532:2;13570:6;13565:2;13554:9;13550:18;13543:34;13613:3;13608:2;13597:9;13593:18;13586:31;13637:6;13672;13666:13;13703:6;13695;13688:22;13741:3;13730:9;13726:19;13719:26;;13780:2;13772:6;13768:15;13754:29;;13801:1;13811:195;13825:6;13822:1;13819:13;13811:195;;;13890:13;;-1:-1:-1;;;;;13886:39:1;13874:52;;13981:15;;;;13946:12;;;;13922:1;13840:9;13811:195;;;-1:-1:-1;;;;;;;14062:32:1;;;;14057:2;14042:18;;14035:60;-1:-1:-1;;;14126:3:1;14111:19;14104:35;14023:3;13165:980;-1:-1:-1;;;13165:980:1:o;14150:168::-;14223:9;;;14254;;14271:15;;;14265:22;;14251:37;14241:71;;14292:18;;:::i;14323:217::-;14363:1;14389;14379:132;;14433:10;14428:3;14424:20;14421:1;14414:31;14468:4;14465:1;14458:15;14496:4;14493:1;14486:15;14379:132;-1:-1:-1;14525:9:1;;14323:217::o
Swarm Source
ipfs://5b136a57d1e48210e6960fea68afff7068d233801658b492e20af023a94882be
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.