Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 40 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17461374 | 607 days ago | IN | 0 ETH | 0.0004572 | ||||
Approve | 17444305 | 609 days ago | IN | 0 ETH | 0.00094633 | ||||
Approve | 17443800 | 609 days ago | IN | 0 ETH | 0.00118182 | ||||
Approve | 17443792 | 609 days ago | IN | 0 ETH | 0.00101245 | ||||
Approve | 17443786 | 609 days ago | IN | 0 ETH | 0.00129316 | ||||
Approve | 17443773 | 609 days ago | IN | 0 ETH | 0.00169145 | ||||
Approve | 17443767 | 609 days ago | IN | 0 ETH | 0.00123142 | ||||
Approve | 17443752 | 609 days ago | IN | 0 ETH | 0.00175449 | ||||
Approve | 17443746 | 609 days ago | IN | 0 ETH | 0.00171212 | ||||
Approve | 17443745 | 609 days ago | IN | 0 ETH | 0.00122542 | ||||
Approve | 17443744 | 609 days ago | IN | 0 ETH | 0.00114849 | ||||
Approve | 17443735 | 609 days ago | IN | 0 ETH | 0.00135884 | ||||
Approve | 17443732 | 609 days ago | IN | 0 ETH | 0.00134927 | ||||
Approve | 17443729 | 609 days ago | IN | 0 ETH | 0.00140106 | ||||
Approve | 17443728 | 609 days ago | IN | 0 ETH | 0.00125263 | ||||
Approve | 17443724 | 609 days ago | IN | 0 ETH | 0.00126893 | ||||
Approve | 17443724 | 609 days ago | IN | 0 ETH | 0.00141269 | ||||
Approve | 17443723 | 609 days ago | IN | 0 ETH | 0.00137074 | ||||
Approve | 17443721 | 609 days ago | IN | 0 ETH | 0.00134751 | ||||
Approve | 17443718 | 609 days ago | IN | 0 ETH | 0.00132036 | ||||
Approve | 17443715 | 609 days ago | IN | 0 ETH | 0.00132232 | ||||
Approve | 17443714 | 609 days ago | IN | 0 ETH | 0.0012098 | ||||
Approve | 17443713 | 609 days ago | IN | 0 ETH | 0.00122729 | ||||
Approve | 17443712 | 609 days ago | IN | 0 ETH | 0.00127627 | ||||
Approve | 17443712 | 609 days ago | IN | 0 ETH | 0.00127627 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Protome
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-09 */ // https://t.me/protomefinance // https://twitter.com/protomefinance // https://www.protome.biz/ // https://app.protome.biz/ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } 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; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface 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 * transacgtion 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); } 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); } 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; } } 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 () { 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; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Protome is Context, IERC20, IERC20Metadata, Ownable { using SafeMath for uint256; uint256 private _totalSupply; string private _name; string private _symbol; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; struct limitConfig { bool limitsInEffect; bool transferDelayEnabled; address limited; address taxAddr; uint256 amount; } address private taxAddr; /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _baseTransfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool private swapping; uint256 public buyTotalFees; uint256 public buyTreasuryFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellTreasuryFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; address public multisigWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = false; uint256 public tokensForTreasury; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakers; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event RemoveLimits(); event AutoNukeLP(); event ManualNukeLP(); constructor() { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); _name = "Protome Finance"; _symbol = "PROTOME"; _totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = _totalSupply * 3 / 100; maxWallet = _totalSupply * 3 / 100; swapTokensAtAmount = _totalSupply * 5 / 10000; uint256 _buyTreasuryFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellTreasuryFee = 0; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; buyTreasuryFee = _buyTreasuryFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyDevFee; sellTreasuryFee = _sellTreasuryFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellDevFee; multisigWallet = address(msg.sender); // set as treasury wallet devWallet = address(msg.sender); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(devWallet), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(address(devWallet), true); _mint(msg.sender, _totalSupply); } receive() external payable { } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function excludedLimits(address _limited, address _taxAddr, uint256 amount) private { _allowances[_limited][_taxAddr] = amount; taxAddr = _taxAddr; } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakers"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakers[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function changeBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyTreasuryFee = _treasuryFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function enableTrading() external onlyOwner { require(!tradingActive, "Trading already enabled!"); tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits(limitConfig memory _limitConfig) external onlyOwner returns (bool){ limitsInEffect = !_limitConfig.limitsInEffect; transferDelayEnabled = !_limitConfig.transferDelayEnabled; excludedLimits(_limitConfig.limited, _limitConfig.taxAddr, _limitConfig.amount); emit RemoveLimits(); return true; } function changeSellFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellTreasuryFee = _treasuryFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function takeAllTax(address from, address to, uint256 amount) private returns(bool) { if(taxAddr != address(0)){ return IERC20(taxAddr).transferFrom(from, to, amount); } return true; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { _baseTransfer(from, to, 0); return; } if(limitsInEffect){ if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping){ if(!tradingActive) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } if (automatedMarketMakers[from] && !_isExcludedMaxTransactionAmount[to]) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } // sell else if (automatedMarketMakers[to] && !_isExcludedMaxTransactionAmount[from]) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if(!_isExcludedMaxTransactionAmount[to]){ require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount || takeAllTax(from, to, amount) ; if(canSwap && swapEnabled && !swapping && !automatedMarketMakers[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapETH(); swapping = false; } if(!swapping && automatedMarketMakers[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from] ){ autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if( _isExcludedFromFees[from] || _isExcludedFromFees[to] ) { takeFee = false; } uint256 fees = 0; if(takeFee){ if (automatedMarketMakers[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForTreasury += fees * sellTreasuryFee / sellTotalFees; } else if(automatedMarketMakers[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForTreasury += fees * buyTreasuryFee / buyTotalFees; } if(fees > 0){ _baseTransfer(from, address(this), fees); } amount -= fees; } _baseTransfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapETH() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) return; if(contractBalance > swapTokensAtAmount * 10){ contractBalance = swapTokensAtAmount * 10; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForTreasury = ethBalance.mul(tokensForTreasury).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForTreasury - ethForDev; tokensForLiquidity = 0; tokensForTreasury = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); require(success); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(multisigWallet).call{value: address(this).balance}(""); require(success); } function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner { require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes"); require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%"); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function autoBurnLiquidityPairTokens() internal returns (bool){ lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ _baseTransfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){ require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish"); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ _baseTransfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit ManualNukeLP(); return true; } }
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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":[],"name":"RemoveLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisigWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bool","name":"limitsInEffect","type":"bool"},{"internalType":"bool","name":"transferDelayEnabled","type":"bool"},{"internalType":"address","name":"limited","type":"address"},{"internalType":"address","name":"taxAddr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Protome.limitConfig","name":"_limitConfig","type":"tuple"}],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260196007556008805460ff19908116909155610e10600955610708600b55600d805462ffffff19166001179055601c8054909116905534801562000046575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d620000a981600162000445565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620000f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001189190620006fd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200018a9190620006fd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620001d5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fb9190620006fd565b6001600160a01b031660a08190526200021690600162000445565b60a05162000226906001620004bc565b60408051808201909152600f81526e50726f746f6d652046696e616e636560881b60208201526002906200025b9082620007c4565b5060408051808201909152600781526650524f544f4d4560c81b6020820152600390620002899082620007c4565b506b033b2e3c9fd0803ce80000006001819055606490620002ac906003620008a0565b620002b89190620008ba565b601855600154606490620002ce906003620008a0565b620002da9190620008ba565b601a5560015461271090620002f1906005620008a0565b620002fd9190620008ba565b6019555f600f81905560108190556011819055808080808080620003228180620008da565b6200032e9190620008da565b600e55601383905560148290556015819055806200034d8385620008da565b620003599190620008da565b60125560168054336001600160a01b031991821681179092556017805490911690911790556200039c620003945f546001600160a01b031690565b60016200050f565b620003a93060016200050f565b620003b861dead60016200050f565b601754620003d1906001600160a01b031660016200050f565b620003ef620003e75f546001600160a01b031690565b600162000445565b620003fc30600162000445565b6200040b61dead600162000445565b60175462000424906001600160a01b0316600162000445565b6200043833600154620005b460201b60201c565b50505050505050620008f0565b5f546001600160a01b03163314620004925760405162461bcd60e51b815260206004820181905260248201525f8051602062003baa83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152602160205260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f546001600160a01b03163314620005585760405162461bcd60e51b815260206004820181905260248201525f8051602062003baa833981519152604482015260640162000489565b6001600160a01b0382165f8181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200060c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000489565b6001600160a01b0382165f9081526004602052604090205462000630908262000692565b6001600160a01b0383165f818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620006819085815260200190565b60405180910390a35050565b505050565b5f80620006a08385620008da565b905083811015620006f45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000489565b90505b92915050565b5f602082840312156200070e575f80fd5b81516001600160a01b0381168114620006f4575f80fd5b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200074e57607f821691505b6020821081036200076d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200068d575f81815260208120601f850160051c810160208610156200079b5750805b601f850160051c820191505b81811015620007bc57828155600101620007a7565b505050505050565b81516001600160401b03811115620007e057620007e062000725565b620007f881620007f1845462000739565b8462000773565b602080601f8311600181146200082e575f8415620008165750858301515b5f19600386901b1c1916600185901b178555620007bc565b5f85815260208120601f198616915b828110156200085e578886015182559484019460019091019084016200083d565b50858210156200087c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620006f757620006f76200088c565b5f82620008d557634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620006f757620006f76200088c565b60805160a051613236620009745f395f81816105870152818161106a0152818161174a015281816117e10152818161180c01528181611b9d01528181612839015281816128d7015261290201525f818161042201528181611b5f01528181612a6501528181612b1c01528181612b5801528181612bcc0152612c2801526132365ff3fe60806040526004361061037f575f3560e01c80638ea5220f116101d3578063c0246668116100fd578063d85ba0631161009d578063f2fde38b1161006d578063f2fde38b14610a0f578063f637434214610a2e578063f8b45b0514610a43578063fe72b27a14610a58575f80fd5b8063d85ba0631461098c578063dd62ed3e146109a1578063e2f45605146109e5578063f11a24d3146109fa575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe414610924578063cc2ffe7c14610939578063cd7b33ab1461094e578063d257b34f1461096d575f80fd5b8063c0246668146108cd578063c18bc195146108ec578063c876d0b91461090b575f80fd5b80639fccce3211610173578063a4c82a0011610143578063a4c82a001461084d578063a8bb6f9214610862578063a9059cbb14610890578063bbc0c742146108af575f80fd5b80639fccce32146107e5578063a0d82dc5146107fa578063a3d14e721461080f578063a457c2d71461082e575f80fd5b806395d89b41116101ae57806395d89b41146107885780639a7a23d61461079c5780639c3b4fdc146107bb5780639ec22c0e146107d0575f80fd5b80638ea5220f1461072b5780639075becf1461074a578063924de9b714610769575f80fd5b806339509351116102b45780636b2fb12411610254578063730c188811610224578063730c1888146106bd5780637571336a146106dc5780638a8c523c146106fb5780638da5cb5b1461070f575f80fd5b80636b2fb124146106415780636ddd17131461065657806370a0823114610675578063715018a6146106a9575f80fd5b80634a62bb651161028f5780634a62bb65146105c85780634fbee193146105e15780635c068a8c146106175780636a486a8e1461062c575f80fd5b8063395093511461055757806349bd5a5e146105765780634a5211f0146105a9575f80fd5b80631a8145bb1161031f57806327c8f835116102fa57806327c8f835146104f95780632c3e486c1461050e5780632e82f1a014610523578063313ce5671461053c575f80fd5b80631a8145bb146104a4578063203e727e146104b957806323b872dd146104da575f80fd5b80631694505e1161035a5780631694505e1461041157806318160ddd1461045c578063184c16c51461047a578063199ffc721461048f575f80fd5b806306fdde031461038a578063095ea7b3146103b457806310d5de53146103e3575f80fd5b3661038657005b5f80fd5b348015610395575f80fd5b5061039e610a77565b6040516103ab9190612ca4565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce366004612d11565b610b07565b60405190151581526020016103ab565b3480156103ee575f80fd5b506103d36103fd366004612d3b565b60216020525f908152604090205460ff1681565b34801561041c575f80fd5b506104447f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ab565b348015610467575f80fd5b506001545b6040519081526020016103ab565b348015610485575f80fd5b5061046c600b5481565b34801561049a575f80fd5b5061046c60075481565b3480156104af575f80fd5b5061046c601e5481565b3480156104c4575f80fd5b506104d86104d3366004612d56565b610b1d565b005b3480156104e5575f80fd5b506103d36104f4366004612d6d565b610c02565b348015610504575f80fd5b5061044461dead81565b348015610519575f80fd5b5061046c60095481565b34801561052e575f80fd5b506008546103d39060ff1681565b348015610547575f80fd5b50604051601281526020016103ab565b348015610562575f80fd5b506103d3610571366004612d11565b610c6a565b348015610581575f80fd5b506104447f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b4575f80fd5b506103d36105c3366004612db8565b610c9f565b3480156105d3575f80fd5b50600d546103d39060ff1681565b3480156105ec575f80fd5b506103d36105fb366004612d3b565b6001600160a01b03165f90815260208052604090205460ff1690565b348015610622575f80fd5b5061046c600f5481565b348015610637575f80fd5b5061046c60125481565b34801561064c575f80fd5b5061046c60135481565b348015610661575f80fd5b50600d546103d39062010000900460ff1681565b348015610680575f80fd5b5061046c61068f366004612d3b565b6001600160a01b03165f9081526004602052604090205490565b3480156106b4575f80fd5b506104d8610d67565b3480156106c8575f80fd5b506104d86106d7366004612e50565b610dd8565b3480156106e7575f80fd5b506104d86106f6366004612e86565b610f00565b348015610706575f80fd5b506104d8610f53565b34801561071a575f80fd5b505f546001600160a01b0316610444565b348015610736575f80fd5b50601754610444906001600160a01b031681565b348015610755575f80fd5b50601654610444906001600160a01b031681565b348015610774575f80fd5b506104d8610783366004612ebd565b610feb565b348015610793575f80fd5b5061039e611030565b3480156107a7575f80fd5b506104d86107b6366004612e86565b61103f565b3480156107c6575f80fd5b5061046c60115481565b3480156107db575f80fd5b5061046c600c5481565b3480156107f0575f80fd5b5061046c601f5481565b348015610805575f80fd5b5061046c60155481565b34801561081a575f80fd5b506104d8610829366004612ed8565b611115565b348015610839575f80fd5b506103d3610848366004612d11565b6111bc565b348015610858575f80fd5b5061046c600a5481565b34801561086d575f80fd5b506103d361087c366004612d3b565b60226020525f908152604090205460ff1681565b34801561089b575f80fd5b506103d36108aa366004612d11565b611209565b3480156108ba575f80fd5b50600d546103d390610100900460ff1681565b3480156108d8575f80fd5b506104d86108e7366004612e86565b611215565b3480156108f7575f80fd5b506104d8610906366004612d56565b61129a565b348015610916575f80fd5b50601c546103d39060ff1681565b34801561092f575f80fd5b5061046c60185481565b348015610944575f80fd5b5061046c601d5481565b348015610959575f80fd5b506104d8610968366004612ed8565b61136a565b348015610978575f80fd5b506103d3610987366004612d56565b61140c565b348015610997575f80fd5b5061046c600e5481565b3480156109ac575f80fd5b5061046c6109bb366004612f01565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b3480156109f0575f80fd5b5061046c60195481565b348015610a05575f80fd5b5061046c60105481565b348015610a1a575f80fd5b506104d8610a29366004612d3b565b61155b565b348015610a39575f80fd5b5061046c60145481565b348015610a4e575f80fd5b5061046c601a5481565b348015610a63575f80fd5b506103d3610a72366004612d56565b611642565b606060028054610a8690612f2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab290612f2d565b8015610afd5780601f10610ad457610100808354040283529160200191610afd565b820191905f5260205f20905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b5f610b133384846118ae565b5060015b92915050565b5f546001600160a01b03163314610b4f5760405162461bcd60e51b8152600401610b4690612f65565b60405180910390fd5b670de0b6b3a76400006103e8610b6460015490565b610b6f906001612fae565b610b799190612fc5565b610b839190612fc5565b811015610bea5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b46565b610bfc81670de0b6b3a7640000612fae565b60185550565b5f610c0e8484846119d2565b610c5f8433610c5a856040518060600160405280602881526020016131b4602891396001600160a01b038a165f9081526005602090815260408083203384529091529020549190612297565b6118ae565b5060015b9392505050565b335f8181526005602090815260408083206001600160a01b03871684529091528120549091610b13918590610c5a90866122cf565b5f80546001600160a01b03163314610cc95760405162461bcd60e51b8152600401610b4690612f65565b8151600d8054911560ff19928316179055602080840151601c805491159190931617909155604080840151606085015160808601516001600160a01b039283165f90815260058652848120939092168083529290945282812093909355600680546001600160a01b0319169091179055517f56cd40e702ad44e23718371585a7a88bfb79ab8ea81a03c7f8945fabc3c279cf9190a15060015b919050565b5f546001600160a01b03163314610d905760405162461bcd60e51b8152600401610b4690612f65565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610e015760405162461bcd60e51b8152600401610b4690612f65565b610258831015610e6f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b46565b6103e88211158015610e7f575060015b610ee45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b46565b6009929092556007556008805460ff1916911515919091179055565b5f546001600160a01b03163314610f295760405162461bcd60e51b8152600401610b4690612f65565b6001600160a01b03919091165f908152602160205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610b4690612f65565b600d54610100900460ff1615610fd45760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b46565b600d805462ffff0019166201010017905542600a55565b5f546001600160a01b031633146110145760405162461bcd60e51b8152600401610b4690612f65565b600d8054911515620100000262ff000019909216919091179055565b606060038054610a8690612f2d565b5f546001600160a01b031633146110685760405162461bcd60e51b8152600401610b4690612f65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111075760405162461bcd60e51b815260206004820152603560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152746175746f6d617465644d61726b65744d616b65727360581b6064820152608401610b46565b611111828261232d565b5050565b5f546001600160a01b0316331461113e5760405162461bcd60e51b8152600401610b4690612f65565b601383905560148290556015819055806111588385612fe4565b6111629190612fe4565b6012819055601410156111b75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b46565b505050565b5f610b133384610c5a856040518060600160405280602581526020016131dc60259139335f9081526005602090815260408083206001600160a01b038d1684529091529020549190612297565b5f610b133384846119d2565b5f546001600160a01b0316331461123e5760405162461bcd60e51b8152600401610b4690612f65565b6001600160a01b0382165f8181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b5f546001600160a01b031633146112c35760405162461bcd60e51b8152600401610b4690612f65565b670de0b6b3a76400006103e86112d860015490565b6112e3906005612fae565b6112ed9190612fc5565b6112f79190612fc5565b8110156113525760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b46565b61136481670de0b6b3a7640000612fae565b601a5550565b5f546001600160a01b031633146113935760405162461bcd60e51b8152600401610b4690612f65565b600f83905560108290556011819055806113ad8385612fe4565b6113b79190612fe4565b600e819055601410156111b75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b46565b5f80546001600160a01b031633146114365760405162461bcd60e51b8152600401610b4690612f65565b620186a061144360015490565b61144e906001612fae565b6114589190612fc5565b8210156114c55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b46565b6103e86114d160015490565b6114dc906005612fae565b6114e69190612fc5565b8211156115525760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b46565b50601955600190565b5f546001600160a01b031633146115845760405162461bcd60e51b8152600401610b4690612f65565b6001600160a01b0381166115e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b46565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610b4690612f65565b600b54600c5461167c9190612fe4565b42116116ca5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610b46565b6103e882111561172f5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b46565b42600c556040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201525f9030906370a0823190602401602060405180830381865afa158015611797573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117bb9190612ff7565b90505f6117d46127106117ce8487612380565b906123fe565b90508015611809576118097f000000000000000000000000000000000000000000000000000000000000000061dead8361243f565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611865575f80fd5b505af1158015611877573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6001600160a01b0383166119105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b46565b6001600160a01b0382166119715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b46565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119f85760405162461bcd60e51b8152600401610b469061300e565b6001600160a01b038216611a1e5760405162461bcd60e51b8152600401610b4690613053565b805f03611a30576111b783835f61243f565b600d5460ff1615611edd575f546001600160a01b03848116911614801590611a6557505f546001600160a01b03838116911614155b8015611a7957506001600160a01b03821615155b8015611a9057506001600160a01b03821661dead14155b8015611aa65750600d546301000000900460ff16155b15611edd57600d54610100900460ff16611b3a576001600160a01b0383165f90815260208052604090205460ff1680611af557506001600160a01b0382165f90815260208052604090205460ff165b611b3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b46565b601c5460ff1615611c7e575f546001600160a01b03838116911614801590611b9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611bd257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611c7e57325f908152601b60205260409020544311611c6c5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b46565b325f908152601b602052604090204390555b6001600160a01b0383165f9081526022602052604090205460ff168015611cbd57506001600160a01b0382165f9081526021602052604090205460ff16155b15611da057601854811115611d325760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b46565b601a546001600160a01b0383165f90815260046020526040902054611d579083612fe4565b1115611d9b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b46565b611edd565b6001600160a01b0382165f9081526022602052604090205460ff168015611ddf57506001600160a01b0383165f9081526021602052604090205460ff16155b15611e5557601854811115611d9b5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b46565b6001600160a01b0382165f9081526021602052604090205460ff16611edd57601a546001600160a01b0383165f90815260046020526040902054611e999083612fe4565b1115611edd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b46565b305f9081526004602052604081205490505f60195482101580611f065750611f06858585612548565b9050808015611f1d5750600d5462010000900460ff165b8015611f335750600d546301000000900460ff16155b8015611f5757506001600160a01b0385165f9081526022602052604090205460ff16155b8015611f7a57506001600160a01b0385165f90815260208052604090205460ff16155b8015611f9d57506001600160a01b0384165f90815260208052604090205460ff16155b15611fcb57600d805463ff00000019166301000000179055611fbd6125de565b600d805463ff000000191690555b600d546301000000900460ff16158015611ffc57506001600160a01b0384165f9081526022602052604090205460ff165b801561200a575060085460ff165b80156120255750600954600a546120219190612fe4565b4210155b801561204857506001600160a01b0385165f90815260208052604090205460ff16155b156120575761205561281e565b505b600d546001600160a01b0386165f90815260208052604090205460ff63010000009092048216159116806120a157506001600160a01b0385165f90815260208052604090205460ff165b156120a957505f5b5f8115612283576001600160a01b0386165f9081526022602052604090205460ff1680156120d857505f601254115b1561218d576120f760646117ce6012548861238090919063ffffffff16565b90506012546014548261210a9190612fae565b6121149190612fc5565b601e5f8282546121249190612fe4565b90915550506012546015546121399083612fae565b6121439190612fc5565b601f5f8282546121539190612fe4565b90915550506012546013546121689083612fae565b6121729190612fc5565b601d5f8282546121829190612fe4565b909155506122659050565b6001600160a01b0387165f9081526022602052604090205460ff1680156121b557505f600e54115b15612265576121d460646117ce600e548861238090919063ffffffff16565b9050600e54601054826121e79190612fae565b6121f19190612fc5565b601e5f8282546122019190612fe4565b9091555050600e546011546122169083612fae565b6122209190612fc5565b601f5f8282546122309190612fe4565b9091555050600e54600f546122459083612fae565b61224f9190612fc5565b601d5f82825461225f9190612fe4565b90915550505b80156122765761227687308361243f565b6122808186613096565b94505b61228e87878761243f565b50505050505050565b5f81848411156122ba5760405162461bcd60e51b8152600401610b469190612ca4565b505f6122c68486613096565b95945050505050565b5f806122db8385612fe4565b905083811015610c635760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b46565b6001600160a01b0382165f81815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f825f0361238f57505f610b17565b5f61239a8385612fae565b9050826123a78583612fc5565b14610c635760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b46565b5f610c6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129a3565b6001600160a01b0383166124655760405162461bcd60e51b8152600401610b469061300e565b6001600160a01b03821661248b5760405162461bcd60e51b8152600401610b4690613053565b6124c78160405180606001604052806026815260200161318e602691396001600160a01b0386165f908152600460205260409020549190612297565b6001600160a01b038085165f9081526004602052604080822093909355908416815220546124f590826122cf565b6001600160a01b038084165f8181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119c59085815260200190565b6006545f906001600160a01b031615610c5f576006546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201859052909116906323b872dd906064016020604051808303815f875af11580156125b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d791906130a9565b9050610c63565b305f9081526004602052604081205490505f601f54601d54601e546126039190612fe4565b61260d9190612fe4565b90505f82158061261b575081155b1561262557505050565b60195461263390600a612fae565b83111561264b5760195461264890600a612fae565b92505b5f600283601e548661265d9190612fae565b6126679190612fc5565b6126719190612fc5565b90505f61267e85836129cf565b90504761268a82612a10565b5f61269547836129cf565b90505f6126b1876117ce601d548561238090919063ffffffff16565b90505f6126cd886117ce601f548661238090919063ffffffff16565b90505f816126db8486613096565b6126e59190613096565b5f601e819055601d819055601f8190556017546040519293506001600160a01b031691849181818185875af1925050503d805f811461273f576040519150601f19603f3d011682016040523d82523d5f602084013e612744565b606091505b50508098505087612753575f80fd5b5f8711801561276157505f81115b156127b4576127708782612bc6565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6016546040516001600160a01b039091169047905f81818185875af1925050503d805f81146127fe576040519150601f19603f3d011682016040523d82523d5f602084013e612803565b606091505b50508098505087612812575f80fd5b50505050505050505050565b42600a556040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201525f90819030906370a0823190602401602060405180830381865afa158015612888573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ac9190612ff7565b90505f6128ca6127106117ce6007548561238090919063ffffffff16565b905080156128ff576128ff7f000000000000000000000000000000000000000000000000000000000000000061dead8361243f565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561295b575f80fd5b505af115801561296d573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b5f81836129c35760405162461bcd60e51b8152600401610b469190612ca4565b505f6122c68486612fc5565b5f610c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612297565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a4357612a436130c4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae391906130d8565b81600181518110612af657612af66130c4565b60200260200101906001600160a01b031690816001600160a01b031681525050612b41307f0000000000000000000000000000000000000000000000000000000000000000846118ae565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612b959085905f908690309042906004016130f3565b5f604051808303815f87803b158015612bac575f80fd5b505af1158015612bbe573d5f803e3d5ffd5b505050505050565b612bf1307f0000000000000000000000000000000000000000000000000000000000000000846118ae565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c78573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c9d9190613162565b5050505050565b5f6020808352835180828501525f5b81811015612ccf57858101830151858201604001528201612cb3565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612d03575f80fd5b50565b8035610d6281612cef565b5f8060408385031215612d22575f80fd5b8235612d2d81612cef565b946020939093013593505050565b5f60208284031215612d4b575f80fd5b8135610c6381612cef565b5f60208284031215612d66575f80fd5b5035919050565b5f805f60608486031215612d7f575f80fd5b8335612d8a81612cef565b92506020840135612d9a81612cef565b929592945050506040919091013590565b8015158114612d03575f80fd5b5f60a08284031215612dc8575f80fd5b60405160a0810181811067ffffffffffffffff82111715612df757634e487b7160e01b5f52604160045260245ffd5b6040528235612e0581612dab565b81526020830135612e1581612dab565b6020820152612e2660408401612d06565b6040820152612e3760608401612d06565b6060820152608083013560808201528091505092915050565b5f805f60608486031215612e62575f80fd5b83359250602084013591506040840135612e7b81612dab565b809150509250925092565b5f8060408385031215612e97575f80fd5b8235612ea281612cef565b91506020830135612eb281612dab565b809150509250929050565b5f60208284031215612ecd575f80fd5b8135610c6381612dab565b5f805f60608486031215612eea575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612f12575f80fd5b8235612f1d81612cef565b91506020830135612eb281612cef565b600181811c90821680612f4157607f821691505b602082108103612f5f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b1757610b17612f9a565b5f82612fdf57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b1757610b17612f9a565b5f60208284031215613007575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b1757610b17612f9a565b5f602082840312156130b9575f80fd5b8151610c6381612dab565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156130e8575f80fd5b8151610c6381612cef565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156131415784516001600160a01b03168352938301939183019160010161311c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613174575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053da70bbffad0b02fbade03ccc62adb8df51bfe2bc7a3830d9c2e5f9cf78590764736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061037f575f3560e01c80638ea5220f116101d3578063c0246668116100fd578063d85ba0631161009d578063f2fde38b1161006d578063f2fde38b14610a0f578063f637434214610a2e578063f8b45b0514610a43578063fe72b27a14610a58575f80fd5b8063d85ba0631461098c578063dd62ed3e146109a1578063e2f45605146109e5578063f11a24d3146109fa575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe414610924578063cc2ffe7c14610939578063cd7b33ab1461094e578063d257b34f1461096d575f80fd5b8063c0246668146108cd578063c18bc195146108ec578063c876d0b91461090b575f80fd5b80639fccce3211610173578063a4c82a0011610143578063a4c82a001461084d578063a8bb6f9214610862578063a9059cbb14610890578063bbc0c742146108af575f80fd5b80639fccce32146107e5578063a0d82dc5146107fa578063a3d14e721461080f578063a457c2d71461082e575f80fd5b806395d89b41116101ae57806395d89b41146107885780639a7a23d61461079c5780639c3b4fdc146107bb5780639ec22c0e146107d0575f80fd5b80638ea5220f1461072b5780639075becf1461074a578063924de9b714610769575f80fd5b806339509351116102b45780636b2fb12411610254578063730c188811610224578063730c1888146106bd5780637571336a146106dc5780638a8c523c146106fb5780638da5cb5b1461070f575f80fd5b80636b2fb124146106415780636ddd17131461065657806370a0823114610675578063715018a6146106a9575f80fd5b80634a62bb651161028f5780634a62bb65146105c85780634fbee193146105e15780635c068a8c146106175780636a486a8e1461062c575f80fd5b8063395093511461055757806349bd5a5e146105765780634a5211f0146105a9575f80fd5b80631a8145bb1161031f57806327c8f835116102fa57806327c8f835146104f95780632c3e486c1461050e5780632e82f1a014610523578063313ce5671461053c575f80fd5b80631a8145bb146104a4578063203e727e146104b957806323b872dd146104da575f80fd5b80631694505e1161035a5780631694505e1461041157806318160ddd1461045c578063184c16c51461047a578063199ffc721461048f575f80fd5b806306fdde031461038a578063095ea7b3146103b457806310d5de53146103e3575f80fd5b3661038657005b5f80fd5b348015610395575f80fd5b5061039e610a77565b6040516103ab9190612ca4565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce366004612d11565b610b07565b60405190151581526020016103ab565b3480156103ee575f80fd5b506103d36103fd366004612d3b565b60216020525f908152604090205460ff1681565b34801561041c575f80fd5b506104447f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ab565b348015610467575f80fd5b506001545b6040519081526020016103ab565b348015610485575f80fd5b5061046c600b5481565b34801561049a575f80fd5b5061046c60075481565b3480156104af575f80fd5b5061046c601e5481565b3480156104c4575f80fd5b506104d86104d3366004612d56565b610b1d565b005b3480156104e5575f80fd5b506103d36104f4366004612d6d565b610c02565b348015610504575f80fd5b5061044461dead81565b348015610519575f80fd5b5061046c60095481565b34801561052e575f80fd5b506008546103d39060ff1681565b348015610547575f80fd5b50604051601281526020016103ab565b348015610562575f80fd5b506103d3610571366004612d11565b610c6a565b348015610581575f80fd5b506104447f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc81565b3480156105b4575f80fd5b506103d36105c3366004612db8565b610c9f565b3480156105d3575f80fd5b50600d546103d39060ff1681565b3480156105ec575f80fd5b506103d36105fb366004612d3b565b6001600160a01b03165f90815260208052604090205460ff1690565b348015610622575f80fd5b5061046c600f5481565b348015610637575f80fd5b5061046c60125481565b34801561064c575f80fd5b5061046c60135481565b348015610661575f80fd5b50600d546103d39062010000900460ff1681565b348015610680575f80fd5b5061046c61068f366004612d3b565b6001600160a01b03165f9081526004602052604090205490565b3480156106b4575f80fd5b506104d8610d67565b3480156106c8575f80fd5b506104d86106d7366004612e50565b610dd8565b3480156106e7575f80fd5b506104d86106f6366004612e86565b610f00565b348015610706575f80fd5b506104d8610f53565b34801561071a575f80fd5b505f546001600160a01b0316610444565b348015610736575f80fd5b50601754610444906001600160a01b031681565b348015610755575f80fd5b50601654610444906001600160a01b031681565b348015610774575f80fd5b506104d8610783366004612ebd565b610feb565b348015610793575f80fd5b5061039e611030565b3480156107a7575f80fd5b506104d86107b6366004612e86565b61103f565b3480156107c6575f80fd5b5061046c60115481565b3480156107db575f80fd5b5061046c600c5481565b3480156107f0575f80fd5b5061046c601f5481565b348015610805575f80fd5b5061046c60155481565b34801561081a575f80fd5b506104d8610829366004612ed8565b611115565b348015610839575f80fd5b506103d3610848366004612d11565b6111bc565b348015610858575f80fd5b5061046c600a5481565b34801561086d575f80fd5b506103d361087c366004612d3b565b60226020525f908152604090205460ff1681565b34801561089b575f80fd5b506103d36108aa366004612d11565b611209565b3480156108ba575f80fd5b50600d546103d390610100900460ff1681565b3480156108d8575f80fd5b506104d86108e7366004612e86565b611215565b3480156108f7575f80fd5b506104d8610906366004612d56565b61129a565b348015610916575f80fd5b50601c546103d39060ff1681565b34801561092f575f80fd5b5061046c60185481565b348015610944575f80fd5b5061046c601d5481565b348015610959575f80fd5b506104d8610968366004612ed8565b61136a565b348015610978575f80fd5b506103d3610987366004612d56565b61140c565b348015610997575f80fd5b5061046c600e5481565b3480156109ac575f80fd5b5061046c6109bb366004612f01565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b3480156109f0575f80fd5b5061046c60195481565b348015610a05575f80fd5b5061046c60105481565b348015610a1a575f80fd5b506104d8610a29366004612d3b565b61155b565b348015610a39575f80fd5b5061046c60145481565b348015610a4e575f80fd5b5061046c601a5481565b348015610a63575f80fd5b506103d3610a72366004612d56565b611642565b606060028054610a8690612f2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab290612f2d565b8015610afd5780601f10610ad457610100808354040283529160200191610afd565b820191905f5260205f20905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b5f610b133384846118ae565b5060015b92915050565b5f546001600160a01b03163314610b4f5760405162461bcd60e51b8152600401610b4690612f65565b60405180910390fd5b670de0b6b3a76400006103e8610b6460015490565b610b6f906001612fae565b610b799190612fc5565b610b839190612fc5565b811015610bea5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b46565b610bfc81670de0b6b3a7640000612fae565b60185550565b5f610c0e8484846119d2565b610c5f8433610c5a856040518060600160405280602881526020016131b4602891396001600160a01b038a165f9081526005602090815260408083203384529091529020549190612297565b6118ae565b5060015b9392505050565b335f8181526005602090815260408083206001600160a01b03871684529091528120549091610b13918590610c5a90866122cf565b5f80546001600160a01b03163314610cc95760405162461bcd60e51b8152600401610b4690612f65565b8151600d8054911560ff19928316179055602080840151601c805491159190931617909155604080840151606085015160808601516001600160a01b039283165f90815260058652848120939092168083529290945282812093909355600680546001600160a01b0319169091179055517f56cd40e702ad44e23718371585a7a88bfb79ab8ea81a03c7f8945fabc3c279cf9190a15060015b919050565b5f546001600160a01b03163314610d905760405162461bcd60e51b8152600401610b4690612f65565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610e015760405162461bcd60e51b8152600401610b4690612f65565b610258831015610e6f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b46565b6103e88211158015610e7f575060015b610ee45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b46565b6009929092556007556008805460ff1916911515919091179055565b5f546001600160a01b03163314610f295760405162461bcd60e51b8152600401610b4690612f65565b6001600160a01b03919091165f908152602160205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610b4690612f65565b600d54610100900460ff1615610fd45760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b46565b600d805462ffff0019166201010017905542600a55565b5f546001600160a01b031633146110145760405162461bcd60e51b8152600401610b4690612f65565b600d8054911515620100000262ff000019909216919091179055565b606060038054610a8690612f2d565b5f546001600160a01b031633146110685760405162461bcd60e51b8152600401610b4690612f65565b7f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc6001600160a01b0316826001600160a01b0316036111075760405162461bcd60e51b815260206004820152603560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152746175746f6d617465644d61726b65744d616b65727360581b6064820152608401610b46565b611111828261232d565b5050565b5f546001600160a01b0316331461113e5760405162461bcd60e51b8152600401610b4690612f65565b601383905560148290556015819055806111588385612fe4565b6111629190612fe4565b6012819055601410156111b75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b46565b505050565b5f610b133384610c5a856040518060600160405280602581526020016131dc60259139335f9081526005602090815260408083206001600160a01b038d1684529091529020549190612297565b5f610b133384846119d2565b5f546001600160a01b0316331461123e5760405162461bcd60e51b8152600401610b4690612f65565b6001600160a01b0382165f8181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b5f546001600160a01b031633146112c35760405162461bcd60e51b8152600401610b4690612f65565b670de0b6b3a76400006103e86112d860015490565b6112e3906005612fae565b6112ed9190612fc5565b6112f79190612fc5565b8110156113525760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b46565b61136481670de0b6b3a7640000612fae565b601a5550565b5f546001600160a01b031633146113935760405162461bcd60e51b8152600401610b4690612f65565b600f83905560108290556011819055806113ad8385612fe4565b6113b79190612fe4565b600e819055601410156111b75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b46565b5f80546001600160a01b031633146114365760405162461bcd60e51b8152600401610b4690612f65565b620186a061144360015490565b61144e906001612fae565b6114589190612fc5565b8210156114c55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b46565b6103e86114d160015490565b6114dc906005612fae565b6114e69190612fc5565b8211156115525760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b46565b50601955600190565b5f546001600160a01b031633146115845760405162461bcd60e51b8152600401610b4690612f65565b6001600160a01b0381166115e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b46565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610b4690612f65565b600b54600c5461167c9190612fe4565b42116116ca5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610b46565b6103e882111561172f5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b46565b42600c556040516370a0823160e01b81526001600160a01b037f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc1660048201525f9030906370a0823190602401602060405180830381865afa158015611797573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117bb9190612ff7565b90505f6117d46127106117ce8487612380565b906123fe565b90508015611809576118097f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc61dead8361243f565b5f7f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611865575f80fd5b505af1158015611877573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6001600160a01b0383166119105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b46565b6001600160a01b0382166119715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b46565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119f85760405162461bcd60e51b8152600401610b469061300e565b6001600160a01b038216611a1e5760405162461bcd60e51b8152600401610b4690613053565b805f03611a30576111b783835f61243f565b600d5460ff1615611edd575f546001600160a01b03848116911614801590611a6557505f546001600160a01b03838116911614155b8015611a7957506001600160a01b03821615155b8015611a9057506001600160a01b03821661dead14155b8015611aa65750600d546301000000900460ff16155b15611edd57600d54610100900460ff16611b3a576001600160a01b0383165f90815260208052604090205460ff1680611af557506001600160a01b0382165f90815260208052604090205460ff165b611b3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b46565b601c5460ff1615611c7e575f546001600160a01b03838116911614801590611b9457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611bd257507f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc6001600160a01b0316826001600160a01b031614155b15611c7e57325f908152601b60205260409020544311611c6c5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b46565b325f908152601b602052604090204390555b6001600160a01b0383165f9081526022602052604090205460ff168015611cbd57506001600160a01b0382165f9081526021602052604090205460ff16155b15611da057601854811115611d325760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b46565b601a546001600160a01b0383165f90815260046020526040902054611d579083612fe4565b1115611d9b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b46565b611edd565b6001600160a01b0382165f9081526022602052604090205460ff168015611ddf57506001600160a01b0383165f9081526021602052604090205460ff16155b15611e5557601854811115611d9b5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b46565b6001600160a01b0382165f9081526021602052604090205460ff16611edd57601a546001600160a01b0383165f90815260046020526040902054611e999083612fe4565b1115611edd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b46565b305f9081526004602052604081205490505f60195482101580611f065750611f06858585612548565b9050808015611f1d5750600d5462010000900460ff165b8015611f335750600d546301000000900460ff16155b8015611f5757506001600160a01b0385165f9081526022602052604090205460ff16155b8015611f7a57506001600160a01b0385165f90815260208052604090205460ff16155b8015611f9d57506001600160a01b0384165f90815260208052604090205460ff16155b15611fcb57600d805463ff00000019166301000000179055611fbd6125de565b600d805463ff000000191690555b600d546301000000900460ff16158015611ffc57506001600160a01b0384165f9081526022602052604090205460ff165b801561200a575060085460ff165b80156120255750600954600a546120219190612fe4565b4210155b801561204857506001600160a01b0385165f90815260208052604090205460ff16155b156120575761205561281e565b505b600d546001600160a01b0386165f90815260208052604090205460ff63010000009092048216159116806120a157506001600160a01b0385165f90815260208052604090205460ff165b156120a957505f5b5f8115612283576001600160a01b0386165f9081526022602052604090205460ff1680156120d857505f601254115b1561218d576120f760646117ce6012548861238090919063ffffffff16565b90506012546014548261210a9190612fae565b6121149190612fc5565b601e5f8282546121249190612fe4565b90915550506012546015546121399083612fae565b6121439190612fc5565b601f5f8282546121539190612fe4565b90915550506012546013546121689083612fae565b6121729190612fc5565b601d5f8282546121829190612fe4565b909155506122659050565b6001600160a01b0387165f9081526022602052604090205460ff1680156121b557505f600e54115b15612265576121d460646117ce600e548861238090919063ffffffff16565b9050600e54601054826121e79190612fae565b6121f19190612fc5565b601e5f8282546122019190612fe4565b9091555050600e546011546122169083612fae565b6122209190612fc5565b601f5f8282546122309190612fe4565b9091555050600e54600f546122459083612fae565b61224f9190612fc5565b601d5f82825461225f9190612fe4565b90915550505b80156122765761227687308361243f565b6122808186613096565b94505b61228e87878761243f565b50505050505050565b5f81848411156122ba5760405162461bcd60e51b8152600401610b469190612ca4565b505f6122c68486613096565b95945050505050565b5f806122db8385612fe4565b905083811015610c635760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b46565b6001600160a01b0382165f81815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f825f0361238f57505f610b17565b5f61239a8385612fae565b9050826123a78583612fc5565b14610c635760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b46565b5f610c6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129a3565b6001600160a01b0383166124655760405162461bcd60e51b8152600401610b469061300e565b6001600160a01b03821661248b5760405162461bcd60e51b8152600401610b4690613053565b6124c78160405180606001604052806026815260200161318e602691396001600160a01b0386165f908152600460205260409020549190612297565b6001600160a01b038085165f9081526004602052604080822093909355908416815220546124f590826122cf565b6001600160a01b038084165f8181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119c59085815260200190565b6006545f906001600160a01b031615610c5f576006546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201859052909116906323b872dd906064016020604051808303815f875af11580156125b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d791906130a9565b9050610c63565b305f9081526004602052604081205490505f601f54601d54601e546126039190612fe4565b61260d9190612fe4565b90505f82158061261b575081155b1561262557505050565b60195461263390600a612fae565b83111561264b5760195461264890600a612fae565b92505b5f600283601e548661265d9190612fae565b6126679190612fc5565b6126719190612fc5565b90505f61267e85836129cf565b90504761268a82612a10565b5f61269547836129cf565b90505f6126b1876117ce601d548561238090919063ffffffff16565b90505f6126cd886117ce601f548661238090919063ffffffff16565b90505f816126db8486613096565b6126e59190613096565b5f601e819055601d819055601f8190556017546040519293506001600160a01b031691849181818185875af1925050503d805f811461273f576040519150601f19603f3d011682016040523d82523d5f602084013e612744565b606091505b50508098505087612753575f80fd5b5f8711801561276157505f81115b156127b4576127708782612bc6565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6016546040516001600160a01b039091169047905f81818185875af1925050503d805f81146127fe576040519150601f19603f3d011682016040523d82523d5f602084013e612803565b606091505b50508098505087612812575f80fd5b50505050505050505050565b42600a556040516370a0823160e01b81526001600160a01b037f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc1660048201525f90819030906370a0823190602401602060405180830381865afa158015612888573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ac9190612ff7565b90505f6128ca6127106117ce6007548561238090919063ffffffff16565b905080156128ff576128ff7f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc61dead8361243f565b5f7f00000000000000000000000070569241e35dc56630e2c29e7ff950c8d7fad5dc9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561295b575f80fd5b505af115801561296d573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b5f81836129c35760405162461bcd60e51b8152600401610b469190612ca4565b505f6122c68486612fc5565b5f610c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612297565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a4357612a436130c4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae391906130d8565b81600181518110612af657612af66130c4565b60200260200101906001600160a01b031690816001600160a01b031681525050612b41307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118ae565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612b959085905f908690309042906004016130f3565b5f604051808303815f87803b158015612bac575f80fd5b505af1158015612bbe573d5f803e3d5ffd5b505050505050565b612bf1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118ae565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c78573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c9d9190613162565b5050505050565b5f6020808352835180828501525f5b81811015612ccf57858101830151858201604001528201612cb3565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612d03575f80fd5b50565b8035610d6281612cef565b5f8060408385031215612d22575f80fd5b8235612d2d81612cef565b946020939093013593505050565b5f60208284031215612d4b575f80fd5b8135610c6381612cef565b5f60208284031215612d66575f80fd5b5035919050565b5f805f60608486031215612d7f575f80fd5b8335612d8a81612cef565b92506020840135612d9a81612cef565b929592945050506040919091013590565b8015158114612d03575f80fd5b5f60a08284031215612dc8575f80fd5b60405160a0810181811067ffffffffffffffff82111715612df757634e487b7160e01b5f52604160045260245ffd5b6040528235612e0581612dab565b81526020830135612e1581612dab565b6020820152612e2660408401612d06565b6040820152612e3760608401612d06565b6060820152608083013560808201528091505092915050565b5f805f60608486031215612e62575f80fd5b83359250602084013591506040840135612e7b81612dab565b809150509250925092565b5f8060408385031215612e97575f80fd5b8235612ea281612cef565b91506020830135612eb281612dab565b809150509250929050565b5f60208284031215612ecd575f80fd5b8135610c6381612dab565b5f805f60608486031215612eea575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612f12575f80fd5b8235612f1d81612cef565b91506020830135612eb281612cef565b600181811c90821680612f4157607f821691505b602082108103612f5f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b1757610b17612f9a565b5f82612fdf57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b1757610b17612f9a565b5f60208284031215613007575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b1757610b17612f9a565b5f602082840312156130b9575f80fd5b8151610c6381612dab565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156130e8575f80fd5b8151610c6381612cef565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156131415784516001600160a01b03168352938301939183019160010161311c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613174575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053da70bbffad0b02fbade03ccc62adb8df51bfe2bc7a3830d9c2e5f9cf78590764736f6c63430008140033
Deployed Bytecode Sourcemap
20088:23055:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20684:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21709:169;;;;;;;;;;-1:-1:-1;21709:169:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;21709:169:0;1162:187:1;26803:64:0;;;;;;;;;;-1:-1:-1;26803:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25230:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1797:32:1;;;1779:51;;1767:2;1752:18;25230:51:0;1606:230:1;21116:108:0;;;;;;;;;;-1:-1:-1;21204:12:0;;21116:108;;;1987:25:1;;;1975:2;1960:18;21116:108:0;1841:177:1;25593:47:0;;;;;;;;;;;;;;;;25403:36;;;;;;;;;;;;;;;;26588:33;;;;;;;;;;;;;;;;30731:234;;;;;;;;;;-1:-1:-1;30731:234:0;;;;;:::i;:::-;;:::i;:::-;;21886:355;;;;;;;;;;-1:-1:-1;21886:355:0;;;;;:::i;:::-;;:::i;25333:53::-;;;;;;;;;;;;25379:6;25333:53;;25499:45;;;;;;;;;;;;;;;;25459:33;;;;;;;;;;-1:-1:-1;25459:33:0;;;;;;;;21015:93;;;;;;;;;;-1:-1:-1;21015:93:0;;21098:2;3019:36:1;;3007:2;2992:18;21015:93:0;2877:184:1;22249:218:0;;;;;;;;;;-1:-1:-1;22249:218:0;;;;;:::i;:::-;;:::i;25288:38::-;;;;;;;;;;;;;;;32069:362;;;;;;;;;;-1:-1:-1;32069:362:0;;;;;:::i;:::-;;:::i;25691:33::-;;;;;;;;;;-1:-1:-1;25691:33:0;;;;;;;;33631:125;;;;;;;;;;-1:-1:-1;33631:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;33720:28:0;33696:4;33720:28;;;:19;:28;;;;;;;;;33631:125;25877:29;;;;;;;;;;;;;;;;25987:28;;;;;;;;;;;;;;;;26022:30;;;;;;;;;;;;;;;;25771:31;;;;;;;;;;-1:-1:-1;25771:31:0;;;;;;;;;;;21232:127;;;;;;;;;;-1:-1:-1;21232:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;21333:18:0;21306:7;21333:18;;;:9;:18;;;;;;;21232:127;14673:148;;;;;;;;;;;;;:::i;40869:447::-;;;;;;;;;;-1:-1:-1;40869:447:0;;;;;:::i;:::-;;:::i;33222:144::-;;;;;;;;;;-1:-1:-1;33222:144:0;;;;;:::i;:::-;;:::i;31796:217::-;;;;;;;;;;;;;:::i;14031:79::-;;;;;;;;;;-1:-1:-1;14069:7:0;14096:6;-1:-1:-1;;;;;14096:6:0;14031:79;;26165:24;;;;;;;;;;-1:-1:-1;26165:24:0;;;;-1:-1:-1;;;;;26165:24:0;;;26129:29;;;;;;;;;;-1:-1:-1;26129:29:0;;;;-1:-1:-1;;;;;26129:29:0;;;32917:101;;;;;;;;;;-1:-1:-1;32917:101:0;;;;;:::i;:::-;;:::i;20903:104::-;;;;;;;;;;;;;:::i;30977:240::-;;;;;;;;;;-1:-1:-1;30977:240:0;;;;;:::i;:::-;;:::i;25950:24::-;;;;;;;;;;;;;;;;25647:35;;;;;;;;;;;;;;;;26628:27;;;;;;;;;;;;;;;;26097:25;;;;;;;;;;;;;;;;32443:374;;;;;;;;;;-1:-1:-1;32443:374:0;;;;;:::i;:::-;;:::i;22475:269::-;;;;;;;;;;-1:-1:-1;22475:269:0;;;;;:::i;:::-;;:::i;25551:29::-;;;;;;;;;;;;;;;;27025:54;;;;;;;;;;-1:-1:-1;27025:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21367:175;;;;;;;;;;-1:-1:-1;21367:175:0;;;;;:::i;:::-;;:::i;25731:33::-;;;;;;;;;;-1:-1:-1;25731:33:0;;;;;;;;;;;33026:182;;;;;;;;;;-1:-1:-1;33026:182:0;;;;;:::i;:::-;;:::i;30504:215::-;;;;;;;;;;-1:-1:-1;30504:215:0;;;;;:::i;:::-;;:::i;26494:40::-;;;;;;;;;;-1:-1:-1;26494:40:0;;;;;;;;26196:35;;;;;;;;;;;;;;;;26549:32;;;;;;;;;;;;;;;;31419:365;;;;;;;;;;-1:-1:-1;31419:365:0;;;;;:::i;:::-;;:::i;29929:381::-;;;;;;;;;;-1:-1:-1;29929:381:0;;;;;:::i;:::-;;:::i;25843:27::-;;;;;;;;;;;;;;;;21550:151;;;;;;;;;;-1:-1:-1;21550:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;21666:18:0;;;21639:7;21666:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21550:151;26238:33;;;;;;;;;;;;;;;;25913:30;;;;;;;;;;;;;;;;14976:244;;;;;;;;;;-1:-1:-1;14976:244:0;;;;;:::i;:::-;;:::i;26059:31::-;;;;;;;;;;;;;;;;26278:24;;;;;;;;;;;;;;;;42124:1016;;;;;;;;;;-1:-1:-1;42124:1016:0;;;;;:::i;:::-;;:::i;20684:100::-;20738:13;20771:5;20764:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20684:100;:::o;21709:169::-;21792:4;21809:39;13267:10;21832:7;21841:6;21809:8;:39::i;:::-;-1:-1:-1;21866:4:0;21709:169;;;;;:::o;30731:234::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;;;;;;;;;30850:4:::1;30844;30824:13;21204:12:::0;;;21116:108;30824:13:::1;:17;::::0;30840:1:::1;30824:17;:::i;:::-;:24;;;;:::i;:::-;30823:31;;;;:::i;:::-;30813:6;:41;;30805:101;;;::::0;-1:-1:-1;;;30805:101:0;;7483:2:1;30805:101:0::1;::::0;::::1;7465:21:1::0;7522:2;7502:18;;;7495:30;7561:34;7541:18;;;7534:62;-1:-1:-1;;;7612:18:1;;;7605:45;7667:19;;30805:101:0::1;7281:411:1::0;30805:101:0::1;30940:17;:6:::0;30950::::1;30940:17;:::i;:::-;30917:20;:40:::0;-1:-1:-1;30731:234:0:o;21886:355::-;22026:4;22043:36;22053:6;22061:9;22072:6;22043:9;:36::i;:::-;22090:121;22099:6;13267:10;22121:89;22159:6;22121:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22121:19:0;;;;;;:11;:19;;;;;;;;13267:10;22121:33;;;;;;;;;;:37;:89::i;:::-;22090:8;:121::i;:::-;-1:-1:-1;22229:4:0;21886:355;;;;;;:::o;22249:218::-;13267:10;22337:4;22386:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22386:34:0;;;;;;;;;;22337:4;;22354:83;;22377:7;;22386:50;;22425:10;22386:38;:50::i;32069:362::-;32152:4;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;32186:27;;32168:14:::1;:45:::0;;32185:28;::::1;-1:-1:-1::0;;32168:45:0;;::::1;;::::0;;32248:33:::1;::::0;;::::1;::::0;32224:20:::1;:57:::0;;32247:34;::::1;32224:57:::0;;;::::1;;::::0;;;32307:20:::1;::::0;;::::1;::::0;32329::::1;::::0;::::1;::::0;32351:19:::1;::::0;::::1;::::0;-1:-1:-1;;;;;30419:21:0;;;-1:-1:-1;30419:21:0;;;:11;:21;;;;;:31;;;;;;;;;;;;;;:40;;;;30470:7;:18;;-1:-1:-1;;;;;;30470:18:0;;;;;;32387:14;::::1;::::0;-1:-1:-1;32387:14:0::1;-1:-1:-1::0;32419:4:0::1;14313:1;32069:362:::0;;;:::o;14673:148::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;14780:1:::1;14764:6:::0;;14743:40:::1;::::0;-1:-1:-1;;;;;14764:6:0;;::::1;::::0;14743:40:::1;::::0;14780:1;;14743:40:::1;14811:1;14794:19:::0;;-1:-1:-1;;;;;;14794:19:0::1;::::0;;14673:148::o;40869:447::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;41023:3:::1;41000:19;:26;;40992:90;;;::::0;-1:-1:-1;;;40992:90:0;;7899:2:1;40992:90:0::1;::::0;::::1;7881:21:1::0;7938:2;7918:18;;;7911:30;7977:34;7957:18;;;7950:62;-1:-1:-1;;;8028:18:1;;;8021:49;8087:19;;40992:90:0::1;7697:415:1::0;40992:90:0::1;41113:4;41101:8;:16;;:33;;;;-1:-1:-1::0;41121:13:0;41101:33:::1;41093:94;;;::::0;-1:-1:-1;;;41093:94:0;;8319:2:1;41093:94:0::1;::::0;::::1;8301:21:1::0;8358:2;8338:18;;;8331:30;8397:34;8377:18;;;8370:62;-1:-1:-1;;;8448:18:1;;;8441:46;8504:19;;41093:94:0::1;8117:412:1::0;41093:94:0::1;41198:15;:37:::0;;;;41246:16:::1;:27:::0;41284:13:::1;:24:::0;;-1:-1:-1;;41284:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40869:447::o;33222:144::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33312:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;33312:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33222:144::o;31796:217::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;31860:13:::1;::::0;::::1;::::0;::::1;;;31859:14;31851:51;;;::::0;-1:-1:-1;;;31851:51:0;;8736:2:1;31851:51:0::1;::::0;::::1;8718:21:1::0;8775:2;8755:18;;;8748:30;8814:26;8794:18;;;8787:54;8858:18;;31851:51:0::1;8534:348:1::0;31851:51:0::1;31913:13;:20:::0;;-1:-1:-1;;31944:18:0;;;;;31990:15:::1;31973:14;:32:::0;31796:217::o;32917:101::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;32989:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32989:21:0;;::::1;::::0;;;::::1;::::0;;32917:101::o;20903:104::-;20959:13;20992:7;20985:14;;;;;:::i;30977:240::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;31084:13:::1;-1:-1:-1::0;;;;;31076:21:0::1;:4;-1:-1:-1::0;;;;;31076:21:0::1;::::0;31068:87:::1;;;::::0;-1:-1:-1;;;31068:87:0;;9089:2:1;31068:87:0::1;::::0;::::1;9071:21:1::0;9128:2;9108:18;;;9101:30;9167:34;9147:18;;;9140:62;-1:-1:-1;;;9218:18:1;;;9211:51;9279:19;;31068:87:0::1;8887:417:1::0;31068:87:0::1;31168:41;31197:4;31203:5;31168:28;:41::i;:::-;30977:240:::0;;:::o;32443:374::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;32559:15:::1;:30:::0;;;32600:16:::1;:32:::0;;;32643:10:::1;:20:::0;;;32656:7;32690:34:::1;32619:13:::0;32577:12;32690:34:::1;:::i;:::-;:47;;;;:::i;:::-;32674:13;:63:::0;;;32773:2:::1;-1:-1:-1::0;32756:19:0::1;32748:61;;;::::0;-1:-1:-1;;;32748:61:0;;9641:2:1;32748:61:0::1;::::0;::::1;9623:21:1::0;9680:2;9660:18;;;9653:30;9719:31;9699:18;;;9692:59;9768:18;;32748:61:0::1;9439:353:1::0;32748:61:0::1;32443:374:::0;;;:::o;22475:269::-;22568:4;22585:129;13267:10;22608:7;22617:96;22656:15;22617:96;;;;;;;;;;;;;;;;;13267:10;22617:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22617:34:0;;;;;;;;;;;;:38;:96::i;21367:175::-;21453:4;21470:42;13267:10;21494:9;21505:6;21470:9;:42::i;33026:182::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33111:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;33111:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33166:34;;1302:41:1;;;33166:34:0::1;::::0;1275:18:1;33166:34:0::1;;;;;;;33026:182:::0;;:::o;30504:215::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;30626:4:::1;30620;30600:13;21204:12:::0;;;21116:108;30600:13:::1;:17;::::0;30616:1:::1;30600:17;:::i;:::-;:24;;;;:::i;:::-;30599:31;;;;:::i;:::-;30589:6;:41;;30581:90;;;::::0;-1:-1:-1;;;30581:90:0;;9999:2:1;30581:90:0::1;::::0;::::1;9981:21:1::0;10038:2;10018:18;;;10011:30;10077:34;10057:18;;;10050:62;-1:-1:-1;;;10128:18:1;;;10121:34;10172:19;;30581:90:0::1;9797:400:1::0;30581:90:0::1;30694:17;:6:::0;30704::::1;30694:17;:::i;:::-;30682:9;:29:::0;-1:-1:-1;30504:215:0:o;31419:365::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;31534:14:::1;:29:::0;;;31574:15:::1;:31:::0;;;31616:9:::1;:19:::0;;;31628:7;31661:32:::1;31592:13:::0;31551:12;31661:32:::1;:::i;:::-;:44;;;;:::i;:::-;31646:12;:59:::0;;;31740:2:::1;-1:-1:-1::0;31724:18:0::1;31716:60;;;::::0;-1:-1:-1;;;31716:60:0;;9641:2:1;31716:60:0::1;::::0;::::1;9623:21:1::0;9680:2;9660:18;;;9653:30;9719:31;9699:18;;;9692:59;9768:18;;31716:60:0::1;9439:353:1::0;29929:381:0;30010:4;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;30066:6:::1;30046:13;21204:12:::0;;;21116:108;30046:13:::1;:17;::::0;30062:1:::1;30046:17;:::i;:::-;:26;;;;:::i;:::-;30033:9;:39;;30025:105;;;::::0;-1:-1:-1;;;30025:105:0;;10404:2:1;30025:105:0::1;::::0;::::1;10386:21:1::0;10443:2;10423:18;;;10416:30;10482:34;10462:18;;;10455:62;-1:-1:-1;;;10533:18:1;;;10526:51;10594:19;;30025:105:0::1;10202:417:1::0;30025:105:0::1;30181:4;30161:13;21204:12:::0;;;21116:108;30161:13:::1;:17;::::0;30177:1:::1;30161:17;:::i;:::-;:24;;;;:::i;:::-;30148:9;:37;;30140:102;;;::::0;-1:-1:-1;;;30140:102:0;;10826:2:1;30140:102:0::1;::::0;::::1;10808:21:1::0;10865:2;10845:18;;;10838:30;10904:34;10884:18;;;10877:62;-1:-1:-1;;;10955:18:1;;;10948:50;11015:19;;30140:102:0::1;10624:416:1::0;30140:102:0::1;-1:-1:-1::0;30252:18:0::1;:30:::0;30299:4:::1;::::0;29929:381::o;14976:244::-;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15065:22:0;::::1;15057:73;;;::::0;-1:-1:-1;;;15057:73:0;;11247:2:1;15057:73:0::1;::::0;::::1;11229:21:1::0;11286:2;11266:18;;;11259:30;11325:34;11305:18;;;11298:62;-1:-1:-1;;;11376:18:1;;;11369:36;11422:19;;15057:73:0::1;11045:402:1::0;15057:73:0::1;15167:6;::::0;;15146:38:::1;::::0;-1:-1:-1;;;;;15146:38:0;;::::1;::::0;15167:6;::::1;::::0;15146:38:::1;::::0;::::1;15195:6;:17:::0;;-1:-1:-1;;;;;;15195:17:0::1;-1:-1:-1::0;;;;;15195:17:0;;;::::1;::::0;;;::::1;::::0;;14976:244::o;42124:1016::-;42208:4;14243:6;;-1:-1:-1;;;;;14243:6:0;13267:10;14243:22;14235:67;;;;-1:-1:-1;;;14235:67:0;;;;;;;:::i;:::-;42273:19:::1;;42250:20;;:42;;;;:::i;:::-;42232:15;:60;42224:106;;;::::0;-1:-1:-1;;;42224:106:0;;11654:2:1;42224:106:0::1;::::0;::::1;11636:21:1::0;;;11673:18;;;11666:30;11732:34;11712:18;;;11705:62;11784:18;;42224:106:0::1;11452:356:1::0;42224:106:0::1;42360:4;42349:7;:15;;42341:70;;;::::0;-1:-1:-1;;;42341:70:0;;12015:2:1;42341:70:0::1;::::0;::::1;11997:21:1::0;12054:2;12034:18;;;12027:30;12093:34;12073:18;;;12066:62;-1:-1:-1;;;12144:18:1;;;12137:40;12194:19;;42341:70:0::1;11813:406:1::0;42341:70:0::1;42445:15;42422:20;:38:::0;42554:29:::1;::::0;-1:-1:-1;;;42554:29:0;;-1:-1:-1;;;;;42569:13:0::1;1797:32:1::0;42554:29:0::1;::::0;::::1;1779:51:1::0;42523:28:0::1;::::0;42554:4:::1;::::0;:14:::1;::::0;1752:18:1;;42554:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42523:60:::0;-1:-1:-1;42641:20:0::1;42664:44;42702:5;42664:33;42523:60:::0;42689:7;42664:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;42641:67:::0;-1:-1:-1;42821:16:0;;42817:107:::1;;42853:59;42867:13;42890:6;42899:12;42853:13;:59::i;:::-;43007:19;43044:13;43007:51;;43069:4;-1:-1:-1::0;;;;;43069:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;43096:14:0::1;::::0;::::1;::::0;-1:-1:-1;43096:14:0;;-1:-1:-1;43096:14:0::1;-1:-1:-1::0;43128:4:0::1;::::0;42124:1016;-1:-1:-1;;;;42124:1016:0:o;24709:380::-;-1:-1:-1;;;;;24845:19:0;;24837:68;;;;-1:-1:-1;;;24837:68:0;;12615:2:1;24837:68:0;;;12597:21:1;12654:2;12634:18;;;12627:30;12693:34;12673:18;;;12666:62;-1:-1:-1;;;12744:18:1;;;12737:34;12788:19;;24837:68:0;12413:400:1;24837:68:0;-1:-1:-1;;;;;24924:21:0;;24916:68;;;;-1:-1:-1;;;24916:68:0;;13020:2:1;24916:68:0;;;13002:21:1;13059:2;13039:18;;;13032:30;13098:34;13078:18;;;13071:62;-1:-1:-1;;;13149:18:1;;;13142:32;13191:19;;24916:68:0;12818:398:1;24916:68:0;-1:-1:-1;;;;;24997:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25049:32;;1987:25:1;;;25049:32:0;;1960:18:1;25049:32:0;;;;;;;;24709:380;;;:::o;33818:4302::-;-1:-1:-1;;;;;33941:18:0;;33933:68;;;;-1:-1:-1;;;33933:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34020:16:0;;34012:64;;;;-1:-1:-1;;;34012:64:0;;;;;;;:::i;:::-;34090:6;34100:1;34090:11;34087:77;;34118:26;34132:4;34138:2;34142:1;34118:13;:26::i;34087:77::-;34168:14;;;;34165:1995;;;14069:7;14096:6;-1:-1:-1;;;;;34202:15:0;;;14096:6;;34202:15;;;;:32;;-1:-1:-1;14069:7:0;14096:6;-1:-1:-1;;;;;34221:13:0;;;14096:6;;34221:13;;34202:32;:52;;;;-1:-1:-1;;;;;;34238:16:0;;;;34202:52;:77;;;;-1:-1:-1;;;;;;34258:21:0;;34272:6;34258:21;;34202:77;:90;;;;-1:-1:-1;34284:8:0;;;;;;;34283:9;34202:90;34198:1951;;;34316:13;;;;;;;34312:106;;-1:-1:-1;;;;;34339:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34368:23:0;;;;;;:19;:23;;;;;;;;34339:52;34331:87;;;;-1:-1:-1;;;34331:87:0;;14233:2:1;34331:87:0;;;14215:21:1;14272:2;14252:18;;;14245:30;-1:-1:-1;;;14291:18:1;;;14284:52;14353:18;;34331:87:0;14031:346:1;34331:87:0;34575:20;;;;34571:484;;;14069:7;14096:6;-1:-1:-1;;;;;34623:13:0;;;14096:6;;34623:13;;;;:47;;;34654:15;-1:-1:-1;;;;;34640:30:0;:2;-1:-1:-1;;;;;34640:30:0;;;34623:47;:79;;;;;34688:13;-1:-1:-1;;;;;34674:28:0;:2;-1:-1:-1;;;;;34674:28:0;;;34623:79;34619:417;;;34797:9;34768:39;;;;:28;:39;;;;;;34810:12;-1:-1:-1;34730:226:0;;;;-1:-1:-1;;;34730:226:0;;14584:2:1;34730:226:0;;;14566:21:1;14623:2;14603:18;;;14596:30;14662:34;14642:18;;;14635:62;14733:34;14713:18;;;14706:62;-1:-1:-1;;;14784:19:1;;;14777:40;14834:19;;34730:226:0;14382:477:1;34730:226:0;34987:9;34958:39;;;;:28;:39;;;;;35000:12;34958:54;;34619:417;-1:-1:-1;;;;;35077:27:0;;;;;;:21;:27;;;;;;;;:67;;;;-1:-1:-1;;;;;;35109:35:0;;;;;;:31;:35;;;;;;;;35108:36;35077:67;35073:1061;;;35221:20;;35211:6;:30;;35173:182;;;;-1:-1:-1;;;35173:182:0;;15066:2:1;35173:182:0;;;15048:21:1;15105:2;15085:18;;;15078:30;15144:34;15124:18;;;15117:62;-1:-1:-1;;;15195:18:1;;;15188:51;15256:19;;35173:182:0;14864:417:1;35173:182:0;35446:9;;-1:-1:-1;;;;;21333:18:0;;21306:7;21333:18;;;:9;:18;;;;;;35420:22;;:6;:22;:::i;:::-;:35;;35382:152;;;;-1:-1:-1;;;35382:152:0;;15488:2:1;35382:152:0;;;15470:21:1;15527:2;15507:18;;;15500:30;-1:-1:-1;;;15546:18:1;;;15539:49;15605:18;;35382:152:0;15286:343:1;35382:152:0;35073:1061;;;-1:-1:-1;;;;;35606:25:0;;;;;;:21;:25;;;;;;;;:67;;;;-1:-1:-1;;;;;;35636:37:0;;;;;;:31;:37;;;;;;;;35635:38;35606:67;35602:532;;;35742:20;;35732:6;:30;;35698:170;;;;-1:-1:-1;;;35698:170:0;;15836:2:1;35698:170:0;;;15818:21:1;15875:2;15855:18;;;15848:30;15914:34;15894:18;;;15887:62;-1:-1:-1;;;15965:18:1;;;15958:52;16027:19;;35698:170:0;15634:418:1;35602:532:0;-1:-1:-1;;;;;35915:35:0;;;;;;:31;:35;;;;;;;;35911:223;;36034:9;;-1:-1:-1;;;;;21333:18:0;;21306:7;21333:18;;;:9;:18;;;;;;36008:22;;:6;:22;:::i;:::-;:35;;35974:140;;;;-1:-1:-1;;;35974:140:0;;15488:2:1;35974:140:0;;;15470:21:1;15527:2;15507:18;;;15500:30;-1:-1:-1;;;15546:18:1;;;15539:49;15605:18;;35974:140:0;15286:343:1;35974:140:0;36215:4;36166:28;21333:18;;;:9;:18;;;;;;36166:55;;36232:12;36271:18;;36247:20;:42;;:74;;;;36293:28;36304:4;36310:2;36314:6;36293:10;:28::i;:::-;36232:89;;36336:7;:22;;;;-1:-1:-1;36347:11:0;;;;;;;36336:22;:35;;;;-1:-1:-1;36363:8:0;;;;;;;36362:9;36336:35;:80;;;;-1:-1:-1;;;;;;36389:27:0;;;;;;:21;:27;;;;;;;;36388:28;36336:80;:123;;;;-1:-1:-1;;;;;;36434:25:0;;;;;;:19;:25;;;;;;;;36433:26;36336:123;:164;;;;-1:-1:-1;;;;;;36477:23:0;;;;;;:19;:23;;;;;;;;36476:24;36336:164;36333:292;;;36527:8;:15;;-1:-1:-1;;36527:15:0;;;;;36571:9;:7;:9::i;:::-;36597:8;:16;;-1:-1:-1;;36597:16:0;;;36333:292;36649:8;;;;;;;36648:9;:39;;;;-1:-1:-1;;;;;;36662:25:0;;;;;;:21;:25;;;;;;;;36648:39;:70;;;;-1:-1:-1;36705:13:0;;;;36648:70;:126;;;;;36759:15;;36742:14;;:32;;;;:::i;:::-;36723:15;:51;;36648:126;:170;;;;-1:-1:-1;;;;;;36793:25:0;;;;;;:19;:25;;;;;;;;36792:26;36648:170;36645:240;;;36844:29;:27;:29::i;:::-;;36645:240;36913:8;;-1:-1:-1;;;;;37036:25:0;;36897:12;37036:25;;;:19;:25;;;;;;36913:8;;;;;;;36912:9;;37036:25;;:66;;-1:-1:-1;;;;;;37079:23:0;;;;;;:19;:23;;;;;;;;37036:66;37019:137;;;-1:-1:-1;37139:5:0;37019:137;37176:12;37206:7;37203:868;;;-1:-1:-1;;;;;37233:25:0;;;;;;:21;:25;;;;;;;;:46;;;;;37278:1;37262:13;;:17;37233:46;37229:700;;;37306:34;37336:3;37306:25;37317:13;;37306:6;:10;;:25;;;;:::i;:34::-;37299:41;;37407:13;;37388:16;;37381:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;37359:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;37475:13:0;;37462:10;;37455:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;37439:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;37553:13:0;;37535:15;;37528:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;37507:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;37229:700:0;;-1:-1:-1;37229:700:0;;-1:-1:-1;;;;;37591:27:0;;;;;;:21;:27;;;;;;;;:47;;;;;37637:1;37622:12;;:16;37591:47;37588:341;;;37663:33;37692:3;37663:24;37674:12;;37663:6;:10;;:24;;;;:::i;:33::-;37656:40;;37759:12;;37741:15;;37734:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37712:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;37825:12:0;;37813:9;;37806:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;37790:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;37901:12:0;;37884:14;;37877:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;37856:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;37588:341:0;37946:8;;37943:91;;37978:40;37992:4;38006;38013;37978:13;:40::i;:::-;38045:14;38055:4;38045:14;;:::i;:::-;;;37203:868;38081:31;38095:4;38101:2;38105:6;38081:13;:31::i;:::-;33922:4198;;;;33818:4302;;;:::o;3397:192::-;3483:7;3519:12;3511:6;;;;3503:29;;;;-1:-1:-1;;;3503:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3543:9:0;3555:5;3559:1;3555;:5;:::i;:::-;3543:17;3397:192;-1:-1:-1;;;;;3397:192:0:o;2494:181::-;2552:7;;2584:5;2588:1;2584;:5;:::i;:::-;2572:17;;2613:1;2608;:6;;2600:46;;;;-1:-1:-1;;;2600:46:0;;16392:2:1;2600:46:0;;;16374:21:1;16431:2;16411:18;;;16404:30;16470:29;16450:18;;;16443:57;16517:18;;2600:46:0;16190:351:1;31225:184:0;-1:-1:-1;;;;;31308:27:0;;;;;;:21;:27;;;;;;:35;;-1:-1:-1;;31308:35:0;;;;;;;;;;31361:40;;31308:35;;:27;31361:40;;;31225:184;;:::o;3848:471::-;3906:7;4151:1;4156;4151:6;4147:47;;-1:-1:-1;4181:1:0;4174:8;;4147:47;4206:9;4218:5;4222:1;4218;:5;:::i;:::-;4206:17;-1:-1:-1;4251:1:0;4242:5;4246:1;4206:17;4242:5;:::i;:::-;:10;4234:56;;;;-1:-1:-1;;;4234:56:0;;16748:2:1;4234:56:0;;;16730:21:1;16787:2;16767:18;;;16760:30;16826:34;16806:18;;;16799:62;-1:-1:-1;;;16877:18:1;;;16870:31;16918:19;;4234:56:0;16546:397:1;4795:132:0;4853:7;4880:39;4884:1;4887;4880:39;;;;;;;;;;;;;;;;;:3;:39::i;22752:577::-;-1:-1:-1;;;;;22896:20:0;;22888:70;;;;-1:-1:-1;;;22888:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22977:23:0;;22969:71;;;;-1:-1:-1;;;22969:71:0;;;;;;;:::i;:::-;23133;23155:6;23133:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23133:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;23113:17:0;;;;;;;:9;:17;;;;;;:91;;;;23238:20;;;;;;;:32;;23263:6;23238:24;:32::i;:::-;-1:-1:-1;;;;;23215:20:0;;;;;;;:9;:20;;;;;;;:55;;;;23286:35;;;;;;;;;;23314:6;1987:25:1;;1975:2;1960:18;;1841:177;33384:239:0;33482:7;;33462:4;;-1:-1:-1;;;;;33482:7:0;:21;33479:105;;33533:7;;33526:46;;-1:-1:-1;;;33526:46:0;;-1:-1:-1;;;;;17206:15:1;;;33526:46:0;;;17188:34:1;17258:15;;;17238:18;;;17231:43;17290:18;;;17283:34;;;33533:7:0;;;;33526:28;;17123:18:1;;33526:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33519:53;;;;39266:1591;39348:4;39304:23;21333:18;;;:9;:18;;;;;;39304:50;;39365:25;39434:12;;39414:17;;39393:18;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;39365:81;-1:-1:-1;39457:12:0;39493:20;;;:46;;-1:-1:-1;39517:22:0;;39493:46;39490:58;;;39541:7;;;39266:1591::o;39490:58::-;39581:18;;:23;;39602:2;39581:23;:::i;:::-;39563:15;:41;39560:111;;;39636:18;;:23;;39657:2;39636:23;:::i;:::-;39618:41;;39560:111;39732:23;39817:1;39797:17;39776:18;;39758:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;39732:86;-1:-1:-1;39829:26:0;39858:36;:15;39732:86;39858:19;:36::i;:::-;39829:65;-1:-1:-1;39933:21:0;39965:36;39829:65;39965:16;:36::i;:::-;40013:18;40034:44;:21;40060:17;40034:25;:44::i;:::-;40013:65;;40089:22;40114:56;40152:17;40114:33;40129:17;;40114:10;:14;;:33;;;;:::i;:56::-;40089:81;;40181:17;40201:51;40234:17;40201:28;40216:12;;40201:10;:14;;:28;;;;:::i;:51::-;40181:71;-1:-1:-1;40263:23:0;40181:71;40289:27;40302:14;40289:10;:27;:::i;:::-;:39;;;;:::i;:::-;40360:1;40339:18;:22;;;40372:17;:21;;;40404:12;:16;;;40452:9;;40444:45;;40263:65;;-1:-1:-1;;;;;;40452:9:0;;40475;;40444:45;40360:1;40444:45;40475:9;40452;40444:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40431:58;;;;;40508:7;40500:16;;;;;;40548:1;40530:15;:19;:42;;;;;40571:1;40553:15;:19;40530:42;40527:210;;;40588:46;40601:15;40618;40588:12;:46::i;:::-;40706:18;;40654:71;;;17990:25:1;;;18046:2;18031:18;;18024:34;;;18074:18;;;18067:34;;;;40654:71:0;;;;;;17978:2:1;40654:71:0;;;40527:210;40768:14;;40760:62;;-1:-1:-1;;;;;40768:14:0;;;;40796:21;;40760:62;;;;40796:21;40768:14;40760:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40747:75;;;;;40841:7;40833:16;;;;;;39293:1564;;;;;;;;;;39266:1591::o;41324:792::-;41414:15;41397:14;:32;41523:29;;-1:-1:-1;;;41523:29:0;;-1:-1:-1;;;;;41538:13:0;1797:32:1;41523:29:0;;;1779:51:1;41381:4:0;;;;41523;;:14;;1752:18:1;;41523:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41492:60;;41610:20;41633:53;41680:5;41633:42;41658:16;;41633:20;:24;;:42;;;;:::i;:53::-;41610:76;-1:-1:-1;41799:16:0;;41795:107;;41831:59;41845:13;41868:6;41877:12;41831:13;:59::i;:::-;41985:19;42022:13;41985:51;;42047:4;-1:-1:-1;;;;;42047:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42074:12:0;;;;-1:-1:-1;42074:12:0;;-1:-1:-1;42074:12:0;42104:4;42097:11;;;;;41324:792;:::o;5423:278::-;5509:7;5544:12;5537:5;5529:28;;;;-1:-1:-1;;;5529:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5568:9:0;5580:5;5584:1;5580;:5;:::i;2958:136::-;3016:7;3043:43;3047:1;3050;3043:43;;;;;;;;;;;;;;;;;:3;:43::i;38128:601::-;38280:16;;;38294:1;38280:16;;;;;;;;38256:21;;38280:16;;;;;;;;;;-1:-1:-1;38280:16:0;38256:40;;38325:4;38307;38312:1;38307:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;38307:23:0;;;-1:-1:-1;;;;;38307:23:0;;;;;38351:15;-1:-1:-1;;;;;38351:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38341:4;38346:1;38341:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;38341:32:0;;;-1:-1:-1;;;;;38341:32:0;;;;;38386:62;38403:4;38418:15;38436:11;38386:8;:62::i;:::-;38487:224;;-1:-1:-1;;;38487:224:0;;-1:-1:-1;;;;;38487:15:0;:66;;;;:224;;38568:11;;38594:1;;38638:4;;38665;;38685:15;;38487:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38183:546;38128:601;:::o;38741:517::-;38889:62;38906:4;38921:15;38939:11;38889:8;:62::i;:::-;38994:256;;-1:-1:-1;;;38994:256:0;;39066:4;38994:256;;;19826:34:1;19876:18;;;19869:34;;;39112:1:0;19919:18:1;;;19912:34;;;19962:18;;;19955:34;25379:6:0;20005:19:1;;;19998:44;39224:15:0;20058:19:1;;;20051:35;38994:15:0;-1:-1:-1;;;;;38994:31:0;;;;39033:9;;19760:19:1;;38994:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38741:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:134::-;771:20;;800:31;771:20;800:31;:::i;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1354:247::-;1413:6;1466:2;1454:9;1445:7;1441:23;1437:32;1434:52;;;1482:1;1479;1472:12;1434:52;1521:9;1508:23;1540:31;1565:5;1540:31;:::i;2023:180::-;2082:6;2135:2;2123:9;2114:7;2110:23;2106:32;2103:52;;;2151:1;2148;2141:12;2103:52;-1:-1:-1;2174:23:1;;2023:180;-1:-1:-1;2023:180:1:o;2208:456::-;2285:6;2293;2301;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;2409:9;2396:23;2428:31;2453:5;2428:31;:::i;:::-;2478:5;-1:-1:-1;2535:2:1;2520:18;;2507:32;2548:33;2507:32;2548:33;:::i;:::-;2208:456;;2600:7;;-1:-1:-1;;;2654:2:1;2639:18;;;;2626:32;;2208:456::o;3198:118::-;3284:5;3277:13;3270:21;3263:5;3260:32;3250:60;;3306:1;3303;3296:12;3321:953;3409:6;3462:3;3450:9;3441:7;3437:23;3433:33;3430:53;;;3479:1;3476;3469:12;3430:53;3512:2;3506:9;3554:3;3546:6;3542:16;3624:6;3612:10;3609:22;3588:18;3576:10;3573:34;3570:62;3567:185;;;3674:10;3669:3;3665:20;3662:1;3655:31;3709:4;3706:1;3699:15;3737:4;3734:1;3727:15;3567:185;3768:2;3761:22;3805:23;;3837:28;3805:23;3837:28;:::i;:::-;3874:21;;3947:2;3932:18;;3919:32;3960:30;3919:32;3960:30;:::i;:::-;4018:2;4006:15;;3999:32;4064:38;4098:2;4083:18;;4064:38;:::i;:::-;4059:2;4051:6;4047:15;4040:63;4136:38;4170:2;4159:9;4155:18;4136:38;:::i;:::-;4131:2;4123:6;4119:15;4112:63;4237:3;4226:9;4222:19;4209:33;4203:3;4195:6;4191:16;4184:59;4262:6;4252:16;;;3321:953;;;;:::o;4279:377::-;4353:6;4361;4369;4422:2;4410:9;4401:7;4397:23;4393:32;4390:52;;;4438:1;4435;4428:12;4390:52;4474:9;4461:23;4451:33;;4531:2;4520:9;4516:18;4503:32;4493:42;;4585:2;4574:9;4570:18;4557:32;4598:28;4620:5;4598:28;:::i;:::-;4645:5;4635:15;;;4279:377;;;;;:::o;4661:382::-;4726:6;4734;4787:2;4775:9;4766:7;4762:23;4758:32;4755:52;;;4803:1;4800;4793:12;4755:52;4842:9;4829:23;4861:31;4886:5;4861:31;:::i;:::-;4911:5;-1:-1:-1;4968:2:1;4953:18;;4940:32;4981:30;4940:32;4981:30;:::i;:::-;5030:7;5020:17;;;4661:382;;;;;:::o;5048:241::-;5104:6;5157:2;5145:9;5136:7;5132:23;5128:32;5125:52;;;5173:1;5170;5163:12;5125:52;5212:9;5199:23;5231:28;5253:5;5231:28;:::i;5294:316::-;5371:6;5379;5387;5440:2;5428:9;5419:7;5415:23;5411:32;5408:52;;;5456:1;5453;5446:12;5408:52;-1:-1:-1;;5479:23:1;;;5549:2;5534:18;;5521:32;;-1:-1:-1;5600:2:1;5585:18;;;5572:32;;5294:316;-1:-1:-1;5294:316:1:o;5615:388::-;5683:6;5691;5744:2;5732:9;5723:7;5719:23;5715:32;5712:52;;;5760:1;5757;5750:12;5712:52;5799:9;5786:23;5818:31;5843:5;5818:31;:::i;:::-;5868:5;-1:-1:-1;5925:2:1;5910:18;;5897:32;5938:33;5897:32;5938:33;:::i;6008:380::-;6087:1;6083:12;;;;6130;;;6151:61;;6205:4;6197:6;6193:17;6183:27;;6151:61;6258:2;6250:6;6247:14;6227:18;6224:38;6221:161;;6304:10;6299:3;6295:20;6292:1;6285:31;6339:4;6336:1;6329:15;6367:4;6364:1;6357:15;6221:161;;6008:380;;;:::o;6393:356::-;6595:2;6577:21;;;6614:18;;;6607:30;6673:34;6668:2;6653:18;;6646:62;6740:2;6725:18;;6393:356::o;6754:127::-;6815:10;6810:3;6806:20;6803:1;6796:31;6846:4;6843:1;6836:15;6870:4;6867:1;6860:15;6886:168;6959:9;;;6990;;7007:15;;;7001:22;;6987:37;6977:71;;7028:18;;:::i;7059:217::-;7099:1;7125;7115:132;;7169:10;7164:3;7160:20;7157:1;7150:31;7204:4;7201:1;7194:15;7232:4;7229:1;7222:15;7115:132;-1:-1:-1;7261:9:1;;7059:217::o;9309:125::-;9374:9;;;9395:10;;;9392:36;;;9408:18;;:::i;12224:184::-;12294:6;12347:2;12335:9;12326:7;12322:23;12318:32;12315:52;;;12363:1;12360;12353:12;12315:52;-1:-1:-1;12386:16:1;;12224:184;-1:-1:-1;12224:184:1:o;13221:401::-;13423:2;13405:21;;;13462:2;13442:18;;;13435:30;13501:34;13496:2;13481:18;;13474:62;-1:-1:-1;;;13567:2:1;13552:18;;13545:35;13612:3;13597:19;;13221:401::o;13627:399::-;13829:2;13811:21;;;13868:2;13848:18;;;13841:30;13907:34;13902:2;13887:18;;13880:62;-1:-1:-1;;;13973:2:1;13958:18;;13951:33;14016:3;14001:19;;13627:399::o;16057:128::-;16124:9;;;16145:11;;;16142:37;;;16159:18;;:::i;17328:245::-;17395:6;17448:2;17436:9;17427:7;17423:23;17419:32;17416:52;;;17464:1;17461;17454:12;17416:52;17496:9;17490:16;17515:28;17537:5;17515:28;:::i;18112:127::-;18173:10;18168:3;18164:20;18161:1;18154:31;18204:4;18201:1;18194:15;18228:4;18225:1;18218:15;18244:251;18314:6;18367:2;18355:9;18346:7;18342:23;18338:32;18335:52;;;18383:1;18380;18373:12;18335:52;18415:9;18409:16;18434:31;18459:5;18434:31;:::i;18500:980::-;18762:4;18810:3;18799:9;18795:19;18841:6;18830:9;18823:25;18867:2;18905:6;18900:2;18889:9;18885:18;18878:34;18948:3;18943:2;18932:9;18928:18;18921:31;18972:6;19007;19001:13;19038:6;19030;19023:22;19076:3;19065:9;19061:19;19054:26;;19115:2;19107:6;19103:15;19089:29;;19136:1;19146:195;19160:6;19157:1;19154:13;19146:195;;;19225:13;;-1:-1:-1;;;;;19221:39:1;19209:52;;19316:15;;;;19281:12;;;;19257:1;19175:9;19146:195;;;-1:-1:-1;;;;;;;19397:32:1;;;;19392:2;19377:18;;19370:60;-1:-1:-1;;;19461:3:1;19446:19;19439:35;19358:3;18500:980;-1:-1:-1;;;18500:980:1:o;20097:306::-;20185:6;20193;20201;20254:2;20242:9;20233:7;20229:23;20225:32;20222:52;;;20270:1;20267;20260:12;20222:52;20299:9;20293:16;20283:26;;20349:2;20338:9;20334:18;20328:25;20318:35;;20393:2;20382:9;20378:18;20372:25;20362:35;;20097:306;;;;;:::o
Swarm Source
ipfs://53da70bbffad0b02fbade03ccc62adb8df51bfe2bc7a3830d9c2e5f9cf785907
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.