Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
XmarToken
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-16 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 ); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address to, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); event Mint(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); } 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; function getAmountsOut( uint amountIn, address[] memory path ) external view returns (uint[] memory amounts); } contract XmarToken is ERC20, ERC20Burnable, Pausable, Ownable { mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; mapping(address => bool) private _isExemptFromMaxWallet; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10_000_000_000 * 10 ** 18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); bool public tradeTaxEnabled; struct Taxes { uint8 marketing; uint8 dev; uint8 cellBurn; uint8 cellRewards; uint8 liquidity; } Taxes public transferTaxes = Taxes(0,0, 0, 0, 0); Taxes public buyTaxes = Taxes(2, 1, 1, 1, 1); Taxes public sellTaxes = Taxes(3,1, 1, 2, 3); struct TotFeesPaidStruct { uint256 marketing; uint256 dev; uint256 cellBurn; uint256 cellRewards; uint256 liquidity; } TotFeesPaidStruct public totFeesPaid; enum ETransferType { Sell, Buy, Transfer } address public constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD; address public WETH; address public marketingAddress = 0x1a48c0049D7d9915a28c3fCADf2423886B6A1D40; // Wallet Marketing address public devAddress = 0x6feae7377E2C05fD3Fe0a4efA46D349aAFAaf90f; // Wallet Dev IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool internal inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool private _enforceMaxWalletBalance = false; // Default is false uint256 public _maxWalletBalance = 200000000 * 10 ** 18; uint256 public _maxTxAmount = 10000000000 * 10 ** 18; uint256 private numTokensSellToAddToLiquidity = 5000 * 10 ** 18; uint256 private numTokensSellMarketing = 20000 * 10 ** 18; uint256 private numTokensSellDev = 10000 * 10 ** 18; // 1. Blacklist Mapping mapping(address => bool) private _isBlacklisted; // 2. Blacklist Modifier modifier notBlacklisted() { require(!_isBlacklisted[msg.sender], "Blacklisted: Cannot execute operation"); _; } modifier exemptFromMaxWallet(address from, address to, uint256 amount) { if (_enforceMaxWalletBalance && !_isExemptFromMaxWallet[to]) { require( balanceOf(to) + amount <= _maxWalletBalance, "Transfer amount would exceed the maxWalletBalance." ); } _; } uint256 public swapToMarketing; uint256 public swapToDev; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapCellForMarketing(uint256 cellSwapped); event SwapCellForDev(uint256 cellSwapped); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("XmarToken", "XT") { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); WETH = _uniswapV2Router.WETH(); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[devAddress] = true; _isExemptFromMaxWallet[owner()] = true; // Exempt owner _isExemptFromMaxWallet[uniswapV2Pair] = true; _isExemptFromMaxWallet[address(this)] = true; // Exempt the contract itself _isExcluded[address(this)] = true; _isExcluded[DEAD_ADDRESS] = true; _isExcluded[uniswapV2Pair] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function tokenFromReflection( uint256 rAmount ) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount / currentRate; } function setTradeTaxStatus() external onlyOwner { //6% Buy - 10% Sell - 0% Transfer tradeTaxEnabled = !tradeTaxEnabled; } function setMarketingAddress(address _marketingAddress) external onlyOwner { marketingAddress = _marketingAddress; } function setDevAddress(address _devAddress) external onlyOwner { devAddress = _devAddress; } function updateNumTokensSellToAddToLiquidity( uint256 _numTokensSellToAddToLiquidity ) external onlyOwner { numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity; } function updateNumTokensSellMarketing( uint256 _numTokensSellMarketing ) external onlyOwner { numTokensSellMarketing = _numTokensSellMarketing; } function updateNumTokensSellDev( uint256 _numTokensSellDev ) external onlyOwner { numTokensSellDev = _numTokensSellDev; } function excludeAccountRewards(address account) external onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccountRewards(address account) external onlyOwner { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / tSupply; } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < (_rTotal / _tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _transfer( address from, address to, uint256 amount ) internal virtual override notBlacklisted exemptFromMaxWallet(from, to, amount) { require(!_isBlacklisted[from], "Blacklisted: Sender is blacklisted"); require(!_isBlacklisted[to], "Blacklisted: Recipient is blacklisted"); require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. handleLiquidityAndSwaps(from); // This is a new helper function, see below //indicates if fee should be deducted from transfer ETransferType transferType = ETransferType.Transfer; Taxes memory usedTaxes = transferTaxes; bool traderExcludedFromFee = false; if (to == uniswapV2Pair) { transferType = ETransferType.Sell; usedTaxes = sellTaxes; traderExcludedFromFee = _isExcludedFromFee[from]; } else if (from == uniswapV2Pair) { transferType = ETransferType.Buy; usedTaxes = buyTaxes; traderExcludedFromFee = _isExcludedFromFee[to]; } if ( !tradeTaxEnabled || transferType == ETransferType.Transfer || traderExcludedFromFee || usedTaxes.cellRewards + usedTaxes.marketing + usedTaxes.dev + usedTaxes.liquidity + usedTaxes.cellBurn == 0 ) { taxFreeTransfer(from, to, amount); } else { //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, usedTaxes); } } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance / 2; uint256 otherHalf = contractTokenBalance - half; // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance - initialBalance; // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } 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 owner(), block.timestamp ); } /// @dev minimum rate is T_TOTAL, Make sure rSupply / tSupply >= T_TOTAL function taxFreeTransfer( address sender, address recipient, uint256 tAmount ) internal { uint256 rate = _getRate(); _reduceBalance(sender, tAmount, rate); _addBalance(recipient, tAmount, rate); emit Transfer(sender, recipient, tAmount); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 tAmount, Taxes memory usedTaxes ) private { uint256 tTransferAmount = tAmount; uint256 rate = _getRate(); if (usedTaxes.liquidity != 0) { uint256 tLiquidity = (tAmount * usedTaxes.liquidity) / 100; if (tLiquidity != 0) { tTransferAmount -= tLiquidity; totFeesPaid.liquidity += tLiquidity; _addBalance(address(this), tLiquidity, rate); emit Transfer(sender, address(this), tLiquidity); } } if (usedTaxes.cellBurn != 0) { uint256 tBurn = (tAmount * usedTaxes.cellBurn) / 100; if (tBurn != 0) { tTransferAmount -= tBurn; totFeesPaid.cellBurn += tBurn; _addBalance(DEAD_ADDRESS, tBurn, rate); emit Transfer(sender, DEAD_ADDRESS, tBurn); } } if (usedTaxes.marketing != 0) { uint256 tsMarketing = (tAmount * usedTaxes.marketing) / 100; if (tsMarketing != 0) { tTransferAmount -= tsMarketing; totFeesPaid.marketing += tsMarketing; swapToMarketing += tsMarketing; _addBalance(address(this), tsMarketing, rate); emit Transfer(sender, address(this), tsMarketing); } } if (usedTaxes.dev != 0) { uint256 tsDev = (tAmount * usedTaxes.dev) / 100; if (tsDev != 0) { tTransferAmount -= tsDev; totFeesPaid.dev += tsDev; swapToDev += tsDev; _addBalance(address(this), tsDev, rate); emit Transfer(sender, address(this), tsDev); } } if (usedTaxes.cellRewards != 0) { uint256 tRfi = (tAmount * usedTaxes.cellRewards) / 100; if (tRfi != 0) { tTransferAmount -= tRfi; _rTotal -= tRfi * _getRate(); totFeesPaid.cellRewards += tRfi; } } _reduceBalance(sender, tAmount, rate); if (tTransferAmount != 0) { _addBalance(recipient, tTransferAmount, rate); emit Transfer(sender, recipient, tTransferAmount); } } function swapCellForWETH() internal { uint256 contractTokenBalanceToSwapForWETH = swapToMarketing; // Approve the Uniswap V2 Router to spend Cell tokens _approve( address(this), address(uniswapV2Router), contractTokenBalanceToSwapForWETH ); swapToMarketing = 0; // Define the swap path (Cell -> WETH) address[] memory path = new address[](2); path[0] = address(this); // Cell token address path[1] = uniswapV2Router.WETH(); // WETH address // Perform the token swap on Uniswap IUniswapV2Router02(uniswapV2Router) .swapExactTokensForTokensSupportingFeeOnTransferTokens( contractTokenBalanceToSwapForWETH, 0, path, marketingAddress, block.timestamp ); emit SwapCellForMarketing(contractTokenBalanceToSwapForWETH); } function swapCellForWETH1() internal { uint256 contractTokenBalanceToSwapForWETH1 = swapToDev; // Approve the Uniswap V2 Router to spend Cell tokens _approve( address(this), address(uniswapV2Router), contractTokenBalanceToSwapForWETH1 ); swapToDev = 0; // Define the swap path (Cell -> WETH) address[] memory path = new address[](2); path[0] = address(this); // Cell token address path[1] = uniswapV2Router.WETH(); // WETH address // Perform the token swap on Uniswap IUniswapV2Router02(uniswapV2Router) .swapExactTokensForTokensSupportingFeeOnTransferTokens( contractTokenBalanceToSwapForWETH1, 0, path, devAddress, block.timestamp ); emit SwapCellForDev(contractTokenBalanceToSwapForWETH1); } function _addBalance( address account, uint256 tAmount, uint256 rate ) private { if (_isExcluded[account]) { _tOwned[account] += tAmount; } else { _rOwned[account] += tAmount * rate; } } function _reduceBalance( address account, uint256 tAmount, uint256 rate ) private { if (_isExcluded[account]) { _tOwned[account] -= tAmount; } else { _rOwned[account] -= tAmount * rate; } } function addToBlacklist(address _address) external onlyOwner { _isBlacklisted[_address] = true; } function removeFromBlacklist(address _address) external onlyOwner { _isBlacklisted[_address] = false; } function setExemptionFromMaxWallet(address _address, bool _status) external onlyOwner { require(_address != uniswapV2Pair, "Cannot set pair address"); _isExemptFromMaxWallet[_address] = _status; } function getNumTokensSellMarketing() public view returns (uint256) { return numTokensSellMarketing; } function getNumTokensSellDev() public view returns (uint256) { return numTokensSellDev; } function isExemptFromMaxWallet(address account) public view returns (bool) { return _isExemptFromMaxWallet[account]; } function toggleMaxWalletEnforcement() external onlyOwner { _enforceMaxWalletBalance = !_enforceMaxWalletBalance; } function isMaxWalletEnforcementActive() public view returns (bool) { return _enforceMaxWalletBalance; } function handleLiquidityAndSwaps(address from) internal { uint256 contractTokenBalance = balanceOf(address(this)) - (swapToMarketing + swapToDev); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; tradeTaxEnabled = false; //add liquidity swapAndLiquify(contractTokenBalance); tradeTaxEnabled = true; } uint256 contractTokenBalanceWETH1 = swapToDev; bool overMinTokenBalanceWETH1 = contractTokenBalanceWETH1 >= numTokensSellDev; if ( overMinTokenBalanceWETH1 && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { tradeTaxEnabled = false; swapCellForWETH1(); tradeTaxEnabled = true; } uint256 contractTokenBalanceWETH = swapToMarketing; bool overMinTokenBalanceWETH = contractTokenBalanceWETH >= numTokensSellMarketing; if ( overMinTokenBalanceWETH && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { tradeTaxEnabled = false; swapCellForWETH(); tradeTaxEnabled = 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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cellSwapped","type":"uint256"}],"name":"SwapCellForDev","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cellSwapped","type":"uint256"}],"name":"SwapCellForMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"cellBurn","type":"uint8"},{"internalType":"uint8","name":"cellRewards","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccountRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getNumTokensSellDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumTokensSellMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccountRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExemptFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxWalletEnforcementActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"cellBurn","type":"uint8"},{"internalType":"uint8","name":"cellRewards","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setExemptionFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradeTaxStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapToDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapToMarketing","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":"toggleMaxWalletEnforcement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"cellBurn","type":"uint256"},{"internalType":"uint256","name":"cellRewards","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"transferTaxes","outputs":[{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"cellBurn","type":"uint8"},{"internalType":"uint8","name":"cellRewards","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"stateMutability":"view","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":"_numTokensSellDev","type":"uint256"}],"name":"updateNumTokensSellDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellMarketing","type":"uint256"}],"name":"updateNumTokensSellMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"}],"name":"updateNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526b204fce5e3e25026110000000600d819055620000249060001962000638565b62000032906000196200065b565b600e556040805160a080820183526000808352602080840182905283850182905260608085018390526080948501929092526010805464ffffffffff1990811690915585518085018752600280825260018285018190528289018190528286018190529187018290526011805464010101010290851617905587519586018852600380875286850183905297860191909152928401929092529190920192909252601280546403020101039216919091179055601980546001600160a01b0319908116731a48c0049d7d9915a28c3fcadf2423886b6a1d4017909155601a8054909116736feae7377e2c05fd3fe0a4efa46d349aafaaf90f179055601c805461ffff60a81b1916600160a81b1790556aa56fa5b99019a5c8000000601d556b204fce5e3e25026110000000601e5569010f0cf064dd59200000601f5569043c33c1937564800000905569021e19e0c9bab24000006021553480156200019657600080fd5b50604051806040016040528060098152602001682c36b0b92a37b5b2b760b91b81525060405180604001604052806002815260200161161560f21b8152508160039081620001e5919062000728565b506004620001f4828262000728565b50506005805460ff19169055506200020c33620005de565b600e543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002999190620007f4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030d9190620007f4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200035b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003819190620007f4565b601c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c9190620007f4565b601880546001600160a01b03199081166001600160a01b0393841617909155601b80549091169183169190911790556001600960006200045960055461010090046001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155601954821684528284208054861682179055601a54909116835290822080549093168117909255600c90620004e060055461010090046001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601c805483168252600c85528382208054871660019081179091553083528483208054881682179055600a90955283822080548716861790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb8054871686179055549091168152208054909216179055620005873390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d54604051620005cf91815260200190565b60405180910390a35062000826565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826200065657634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200067d57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006ae57607f821691505b602082108103620006cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072357600081815260208120601f850160051c81016020861015620006fe5750805b601f850160051c820191505b818110156200071f578281556001016200070a565b5050505b505050565b81516001600160401b0381111562000744576200074462000683565b6200075c8162000755845462000699565b84620006d5565b602080601f8311600181146200079457600084156200077b5750858301515b600019600386901b1c1916600185901b1785556200071f565b600085815260208120601f198616915b82811015620007c557888601518255948401946001909101908401620007a4565b5085821015620007e45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200080757600080fd5b81516001600160a01b03811681146200081f57600080fd5b9392505050565b612e9e80620008366000396000f3fe6080604052600436106103395760003560e01c8063864701a5116101ab578063bc67776d116100f7578063dd62ed3e11610095578063ecabe9961161006f578063ecabe99614610a29578063edb16b5c14610a49578063f2fde38b14610a68578063f66895a314610a8857600080fd5b8063dd62ed3e146109c9578063ea2f0b37146109e9578063ebf4d35214610a0957600080fd5b8063d0d41fe1116100d1578063d0d41fe11461093a578063d29b71031461095a578063d4a5af8414610993578063d6ba1ba8146109a957600080fd5b8063bc67776d146108e4578063c49b9a80146108fa578063c9ed74431461091a57600080fd5b80639aa2fcdc11610164578063a5ece9411161013e578063a5ece9411461086a578063a68984a11461088a578063a9059cbb146108a4578063ad5c4648146108c457600080fd5b80639aa2fcdc146107e55780639ba5e4d5146107fb578063a457c2d71461084a57600080fd5b8063864701a5146106f257806388f82020146107345780638b266da21461076d5780638da5cb5b1461078d578063906e9dd0146107b057806395d89b41146107d057600080fd5b806344337ea11161028557806357871a2711610223578063715018a6116101fd578063715018a61461069d578063720959e0146106b257806376098f33146106c75780637d1db4a5146106dc57600080fd5b806357871a27146106455780635c975abb1461066557806370a082311461067d57600080fd5b80634e6fd6c41161025f5780634e6fd6c4146105605780635331803c146105765780635342acb4146105ec578063537df3b61461062557600080fd5b806344337ea1146104ff57806349bd5a5e1461051f5780634a74bb021461053f57600080fd5b8063313ce567116102f25780633ad10ef6116102cc5780633ad10ef61461048a5780634099d76a146104aa57806342966c68146104bf578063437823ec146104df57600080fd5b8063313ce56714610437578063368b5ccd14610453578063395093511461046a57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103d857806323b872dd146103f75780632d8381191461041757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610aca565b6040516103679190612ac5565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612b28565b610b5c565b6040519015158152602001610367565b3480156103ac57600080fd5b50601b546103c0906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b3480156103e457600080fd5b50600d545b604051908152602001610367565b34801561040357600080fd5b50610390610412366004612b54565b610b76565b34801561042357600080fd5b506103e9610432366004612b95565b610b9a565b34801561044357600080fd5b5060405160128152602001610367565b34801561045f57600080fd5b50610468610c23565b005b34801561047657600080fd5b50610390610485366004612b28565b610c4c565b34801561049657600080fd5b50601a546103c0906001600160a01b031681565b3480156104b657600080fd5b50610468610c6e565b3480156104cb57600080fd5b506104686104da366004612b95565b610c8a565b3480156104eb57600080fd5b506104686104fa366004612bae565b610c97565b34801561050b57600080fd5b5061046861051a366004612bae565b610cc3565b34801561052b57600080fd5b50601c546103c0906001600160a01b031681565b34801561054b57600080fd5b50601c5461039090600160a81b900460ff1681565b34801561056c57600080fd5b506103c061dead81565b34801561058257600080fd5b506010546105b89060ff808216916101008104821691620100008204811691630100000081048216916401000000009091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610367565b3480156105f857600080fd5b50610390610607366004612bae565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561063157600080fd5b50610468610640366004612bae565b610cef565b34801561065157600080fd5b50610468610660366004612b95565b610d18565b34801561067157600080fd5b5060055460ff16610390565b34801561068957600080fd5b506103e9610698366004612bae565b610d25565b3480156106a957600080fd5b50610468610d84565b3480156106be57600080fd5b506021546103e9565b3480156106d357600080fd5b506020546103e9565b3480156106e857600080fd5b506103e9601e5481565b3480156106fe57600080fd5b506011546105b89060ff808216916101008104821691620100008204811691630100000081048216916401000000009091041685565b34801561074057600080fd5b5061039061074f366004612bae565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561077957600080fd5b50610468610788366004612bae565b610d98565b34801561079957600080fd5b5060055461010090046001600160a01b03166103c0565b3480156107bc57600080fd5b506104686107cb366004612bae565b610ec9565b3480156107dc57600080fd5b5061035a610ef3565b3480156107f157600080fd5b506103e960235481565b34801561080757600080fd5b50601354601454601554601654601754610822949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610367565b34801561085657600080fd5b50610390610865366004612b28565b610f02565b34801561087657600080fd5b506019546103c0906001600160a01b031681565b34801561089657600080fd5b50600f546103909060ff1681565b3480156108b057600080fd5b506103906108bf366004612b28565b610f7d565b3480156108d057600080fd5b506018546103c0906001600160a01b031681565b3480156108f057600080fd5b506103e960245481565b34801561090657600080fd5b50610468610915366004612be0565b610f8b565b34801561092657600080fd5b50610468610935366004612b95565b610feb565b34801561094657600080fd5b50610468610955366004612bae565b610ff8565b34801561096657600080fd5b50610390610975366004612bae565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561099f57600080fd5b506103e9601d5481565b3480156109b557600080fd5b506104686109c4366004612bfb565b611022565b3480156109d557600080fd5b506103e96109e4366004612c30565b6110b3565b3480156109f557600080fd5b50610468610a04366004612bae565b6110de565b348015610a1557600080fd5b50610468610a24366004612b95565b611107565b348015610a3557600080fd5b50610468610a44366004612bae565b611114565b348015610a5557600080fd5b50601c54600160b01b900460ff16610390565b348015610a7457600080fd5b50610468610a83366004612bae565b6112a8565b348015610a9457600080fd5b506012546105b89060ff808216916101008104821691620100008204811691630100000081048216916401000000009091041685565b606060038054610ad990612c69565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612c69565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b600033610b6a81858561131e565b60019150505b92915050565b600033610b84858285611443565b610b8f8585856114bd565b506001949350505050565b6000600e54821115610c065760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610c10611aa5565b9050610c1c8184612cb9565b9392505050565b610c2b611ac8565b601c805460ff60b01b198116600160b01b9182900460ff1615909102179055565b600033610b6a818585610c5f83836110b3565b610c699190612cdb565b61131e565b610c76611ac8565b600f805460ff19811660ff90911615179055565b610c943382611b28565b50565b610c9f611ac8565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b610ccb611ac8565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b610cf7611ac8565b6001600160a01b03166000908152602260205260409020805460ff19169055565b610d20611ac8565b602055565b6001600160a01b0381166000908152600a602052604081205460ff1615610d6257506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b7090610b9a565b610d8c611ac8565b610d966000611c45565b565b610da0611ac8565b6001600160a01b0381166000908152600a602052604090205460ff1615610e095760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bfd565b6001600160a01b03811660009081526006602052604090205415610e63576001600160a01b038116600090815260066020526040902054610e4990610b9a565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b610ed1611ac8565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610ad990612c69565b60003381610f1082866110b3565b905083811015610f705760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bfd565b610b8f828686840361131e565b600033610b6a8185856114bd565b610f93611ac8565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fe090831515815260200190565b60405180910390a150565b610ff3611ac8565b601f55565b611000611ac8565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b61102a611ac8565b601c546001600160a01b03908116908316036110885760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420736574207061697220616464726573730000000000000000006044820152606401610bfd565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6110e6611ac8565b6001600160a01b03166000908152600960205260409020805460ff19169055565b61110f611ac8565b602155565b61111c611ac8565b6001600160a01b0381166000908152600a602052604090205460ff166111845760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bfd565b60005b600b548110156112a457816001600160a01b0316600b82815481106111ae576111ae612cee565b6000918252602090912001546001600160a01b03160361129257600b80546111d890600190612d04565b815481106111e8576111e8612cee565b600091825260209091200154600b80546001600160a01b03909216918390811061121457611214612cee565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548061126c5761126c612d17565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061129c81612d2d565b915050611187565b5050565b6112b0611ac8565b6001600160a01b0381166113155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bfd565b610c9481611c45565b6001600160a01b0383166113805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bfd565b6001600160a01b0382166113e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bfd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061144f84846110b3565b905060001981146114b757818110156114aa5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bfd565b6114b7848484840361131e565b50505050565b3360009081526022602052604090205460ff161561152b5760405162461bcd60e51b815260206004820152602560248201527f426c61636b6c69737465643a2043616e6e6f742065786563757465206f70657260448201526430ba34b7b760d91b6064820152608401610bfd565b828282601c60169054906101000a900460ff16801561156357506001600160a01b0382166000908152600c602052604090205460ff16155b156115e857601d548161157584610d25565b61157f9190612cdb565b11156115e85760405162461bcd60e51b815260206004820152603260248201527f5472616e7366657220616d6f756e7420776f756c6420657863656564207468656044820152711036b0bc2bb0b63632ba2130b630b731b29760711b6064820152608401610bfd565b6001600160a01b03861660009081526022602052604090205460ff161561165c5760405162461bcd60e51b815260206004820152602260248201527f426c61636b6c69737465643a2053656e64657220697320626c61636b6c697374604482015261195960f21b6064820152608401610bfd565b6001600160a01b03851660009081526022602052604090205460ff16156116d35760405162461bcd60e51b815260206004820152602560248201527f426c61636b6c69737465643a20526563697069656e7420697320626c61636b6c6044820152641a5cdd195960da1b6064820152608401610bfd565b6001600160a01b0386166117375760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bfd565b6001600160a01b0385166117995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bfd565b600084116117fb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bfd565b6005546001600160a01b03878116610100909204161480159061183157506005546001600160a01b038681166101009092041614155b1561189957601e548411156118995760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bfd565b6118a286611c9f565b6040805160a08101825260105460ff8082168352610100820481166020840152620100008204811693830193909352630100000081048316606083015264010000000090049091166080820152601c54600291906000906001600160a01b039081169089160361197f5750506040805160a08101825260125460ff8082168352610100820481166020808501919091526201000083048216848601526301000000830482166060850152640100000000909204811660808401526001600160a01b038b166000908152600990925292812054909350909116611a05565b601c546001600160a01b03908116908a1603611a055750506040805160a08101825260115460ff8082168352610100820481166020808501919091526201000083048216848601526301000000830482166060850152640100000000909204811660808401526001600160a01b038a166000908152600990925292902054600193509091165b600f5460ff161580611a2857506002836002811115611a2657611a26612d46565b145b80611a305750805b80611a79575060408201516080830151602084015184516060860151611a569190612d5c565b611a609190612d5c565b611a6a9190612d5c565b611a749190612d5c565b60ff16155b15611a8e57611a89898989611e3f565b611a9a565b611a9a89898985611ea2565b505050505050505050565b6000806000611ab261222d565b9092509050611ac18183612cb9565b9250505090565b6005546001600160a01b03610100909104163314610d965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bfd565b6001600160a01b038216611b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bfd565b6001600160a01b03821660009081526020819052604090205481811015611bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bfd565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020612e498339815191529101611436565b505050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602454602354611cb19190612cdb565b611cba30610d25565b611cc49190612d04565b9050601e548110611cd45750601e545b601f5481108015908190611cf25750601c54600160a01b900460ff16155b8015611d0c5750601c546001600160a01b03848116911614155b8015611d215750601c54600160a81b900460ff165b15611d4c57601f54600f805460ff191690559150611d3e826123b0565b600f805460ff191660011790555b60245460215481108015908190611d6d5750601c54600160a01b900460ff16155b8015611d875750601c546001600160a01b03868116911614155b8015611d9c5750601c54600160a81b900460ff165b15611dc157600f805460ff19169055611db3612457565b600f805460ff191660011790555b60235460205481108015908190611de25750601c54600160a01b900460ff16155b8015611dfc5750601c546001600160a01b03888116911614155b8015611e115750601c54600160a81b900460ff165b15611e3657600f805460ff19169055611e286125f8565b600f805460ff191660011790555b50505050505050565b6000611e49611aa5565b9050611e5684838361278d565b611e6183838361281d565b826001600160a01b0316846001600160a01b0316600080516020612e4983398151915284604051611e9491815260200190565b60405180910390a350505050565b816000611ead611aa5565b9050826080015160ff16600014611f4a5760006064846080015160ff1686611ed59190612d75565b611edf9190612cb9565b90508015611f4857611ef18184612d04565b92508060136004016000828254611f089190612cdb565b90915550611f19905030828461281d565b60405181815230906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b604083015160ff1615611fe75760006064846040015160ff1686611f6e9190612d75565b611f789190612cb9565b90508015611fe557611f8a8184612d04565b92508060136002016000828254611fa19190612cdb565b90915550611fb4905061dead828461281d565b60405181815261dead906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b825160ff16156120945782516000906064906120069060ff1687612d75565b6120109190612cb9565b90508015612092576120228184612d04565b925080601360000160008282546120399190612cdb565b9250508190555080602360008282546120529190612cdb565b90915550612063905030828461281d565b60405181815230906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b602083015160ff16156121465760006064846020015160ff16866120b89190612d75565b6120c29190612cb9565b90508015612144576120d48184612d04565b925080601360010160008282546120eb9190612cdb565b9250508190555080602460008282546121049190612cdb565b90915550612115905030828461281d565b60405181815230906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b606083015160ff16156121cd5760006064846060015160ff168661216a9190612d75565b6121749190612cb9565b905080156121cb576121868184612d04565b9250612190611aa5565b61219a9082612d75565b600e60008282546121ab9190612d04565b9091555050601680548291906000906121c5908490612cdb565b90915550505b505b6121d886858361278d565b8115612225576121e985838361281d565b846001600160a01b0316866001600160a01b0316600080516020612e498339815191528460405161221c91815260200190565b60405180910390a35b505050505050565b600e54600d546000918291825b600b5481101561237f578260066000600b848154811061225c5761225c612cee565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122c757508160076000600b84815481106122a0576122a0612cee565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122dd57600e54600d54945094505050509091565b60066000600b83815481106122f4576122f4612cee565b60009182526020808320909101546001600160a01b031683528201929092526040019020546123239084612d04565b925060076000600b838154811061233c5761233c612cee565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461236b9083612d04565b91508061237781612d2d565b91505061223a565b50600d54600e546123909190612cb9565b8210156123a757600e54600d549350935050509091565b90939092509050565b601c805460ff60a01b1916600160a01b17905560006123d0600283612cb9565b905060006123de8284612d04565b9050476123ea83612898565b60006123f68247612d04565b905061240283826129ea565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b19169055505050565b602454601b546124729030906001600160a01b03168361131e565b60006024819055604080516002808252606082018352909160208301908036833701905050905030816000815181106124ad576124ad612cee565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252a9190612d8c565b8160018151811061253d5761253d612cee565b6001600160a01b039283166020918202929092010152601b54601a54604051635c11d79560e01b815291831692635c11d795926125899287926000928892909116904290600401612da9565b600060405180830381600087803b1580156125a357600080fd5b505af11580156125b7573d6000803e3d6000fd5b505050507fd83f4ec8353d318f880ff286bf1730d7a5ac5f5d0fe4f4e985e84003f362329e826040516125ec91815260200190565b60405180910390a15050565b602354601b546126139030906001600160a01b03168361131e565b600060238190556040805160028082526060820183529091602083019080368337019050509050308160008151811061264e5761264e612cee565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cb9190612d8c565b816001815181106126de576126de612cee565b6001600160a01b039283166020918202929092010152601b54601954604051635c11d79560e01b815291831692635c11d7959261272a9287926000928892909116904290600401612da9565b600060405180830381600087803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b505050507f046db3278eb8c35d23cd1d79b03800f26835ed1f9b3b67b6152305bdc1a5da5e826040516125ec91815260200190565b6001600160a01b0383166000908152600a602052604090205460ff16156127e1576001600160a01b038316600090815260076020526040812080548492906127d6908490612d04565b90915550611c409050565b6127eb8183612d75565b6001600160a01b03841660009081526006602052604081208054909190612813908490612d04565b9091555050505050565b6001600160a01b0383166000908152600a602052604090205460ff1615612866576001600160a01b038316600090815260076020526040812080548492906127d6908490612cdb565b6128708183612d75565b6001600160a01b03841660009081526006602052604081208054909190612813908490612cdb565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128cd576128cd612cee565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294a9190612d8c565b8160018151811061295d5761295d612cee565b6001600160a01b039283166020918202929092010152601b54612983913091168461131e565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906129bc908590600090869030904290600401612da9565b600060405180830381600087803b1580156129d657600080fd5b505af1158015612225573d6000803e3d6000fd5b601b54612a029030906001600160a01b03168461131e565b601b546001600160a01b031663f305d719823085600080612a316005546001600160a01b036101009091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a99573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612abe9190612e1a565b5050505050565b600060208083528351808285015260005b81811015612af257858101830151858201604001528201612ad6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c9457600080fd5b60008060408385031215612b3b57600080fd5b8235612b4681612b13565b946020939093013593505050565b600080600060608486031215612b6957600080fd5b8335612b7481612b13565b92506020840135612b8481612b13565b929592945050506040919091013590565b600060208284031215612ba757600080fd5b5035919050565b600060208284031215612bc057600080fd5b8135610c1c81612b13565b80358015158114612bdb57600080fd5b919050565b600060208284031215612bf257600080fd5b610c1c82612bcb565b60008060408385031215612c0e57600080fd5b8235612c1981612b13565b9150612c2760208401612bcb565b90509250929050565b60008060408385031215612c4357600080fd5b8235612c4e81612b13565b91506020830135612c5e81612b13565b809150509250929050565b600181811c90821680612c7d57607f821691505b602082108103612c9d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082612cd657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b7057610b70612ca3565b634e487b7160e01b600052603260045260246000fd5b81810381811115610b7057610b70612ca3565b634e487b7160e01b600052603160045260246000fd5b600060018201612d3f57612d3f612ca3565b5060010190565b634e487b7160e01b600052602160045260246000fd5b60ff8181168382160190811115610b7057610b70612ca3565b8082028115828204841417610b7057610b70612ca3565b600060208284031215612d9e57600080fd5b8151610c1c81612b13565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612df95784516001600160a01b031683529383019391830191600101612dd4565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e2f57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d10a4a801efc4148691fe20c310b0269d83b0cd3121d7922d28f1ac7341ab30e64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106103395760003560e01c8063864701a5116101ab578063bc67776d116100f7578063dd62ed3e11610095578063ecabe9961161006f578063ecabe99614610a29578063edb16b5c14610a49578063f2fde38b14610a68578063f66895a314610a8857600080fd5b8063dd62ed3e146109c9578063ea2f0b37146109e9578063ebf4d35214610a0957600080fd5b8063d0d41fe1116100d1578063d0d41fe11461093a578063d29b71031461095a578063d4a5af8414610993578063d6ba1ba8146109a957600080fd5b8063bc67776d146108e4578063c49b9a80146108fa578063c9ed74431461091a57600080fd5b80639aa2fcdc11610164578063a5ece9411161013e578063a5ece9411461086a578063a68984a11461088a578063a9059cbb146108a4578063ad5c4648146108c457600080fd5b80639aa2fcdc146107e55780639ba5e4d5146107fb578063a457c2d71461084a57600080fd5b8063864701a5146106f257806388f82020146107345780638b266da21461076d5780638da5cb5b1461078d578063906e9dd0146107b057806395d89b41146107d057600080fd5b806344337ea11161028557806357871a2711610223578063715018a6116101fd578063715018a61461069d578063720959e0146106b257806376098f33146106c75780637d1db4a5146106dc57600080fd5b806357871a27146106455780635c975abb1461066557806370a082311461067d57600080fd5b80634e6fd6c41161025f5780634e6fd6c4146105605780635331803c146105765780635342acb4146105ec578063537df3b61461062557600080fd5b806344337ea1146104ff57806349bd5a5e1461051f5780634a74bb021461053f57600080fd5b8063313ce567116102f25780633ad10ef6116102cc5780633ad10ef61461048a5780634099d76a146104aa57806342966c68146104bf578063437823ec146104df57600080fd5b8063313ce56714610437578063368b5ccd14610453578063395093511461046a57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103d857806323b872dd146103f75780632d8381191461041757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610aca565b6040516103679190612ac5565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612b28565b610b5c565b6040519015158152602001610367565b3480156103ac57600080fd5b50601b546103c0906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b3480156103e457600080fd5b50600d545b604051908152602001610367565b34801561040357600080fd5b50610390610412366004612b54565b610b76565b34801561042357600080fd5b506103e9610432366004612b95565b610b9a565b34801561044357600080fd5b5060405160128152602001610367565b34801561045f57600080fd5b50610468610c23565b005b34801561047657600080fd5b50610390610485366004612b28565b610c4c565b34801561049657600080fd5b50601a546103c0906001600160a01b031681565b3480156104b657600080fd5b50610468610c6e565b3480156104cb57600080fd5b506104686104da366004612b95565b610c8a565b3480156104eb57600080fd5b506104686104fa366004612bae565b610c97565b34801561050b57600080fd5b5061046861051a366004612bae565b610cc3565b34801561052b57600080fd5b50601c546103c0906001600160a01b031681565b34801561054b57600080fd5b50601c5461039090600160a81b900460ff1681565b34801561056c57600080fd5b506103c061dead81565b34801561058257600080fd5b506010546105b89060ff808216916101008104821691620100008204811691630100000081048216916401000000009091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610367565b3480156105f857600080fd5b50610390610607366004612bae565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561063157600080fd5b50610468610640366004612bae565b610cef565b34801561065157600080fd5b50610468610660366004612b95565b610d18565b34801561067157600080fd5b5060055460ff16610390565b34801561068957600080fd5b506103e9610698366004612bae565b610d25565b3480156106a957600080fd5b50610468610d84565b3480156106be57600080fd5b506021546103e9565b3480156106d357600080fd5b506020546103e9565b3480156106e857600080fd5b506103e9601e5481565b3480156106fe57600080fd5b506011546105b89060ff808216916101008104821691620100008204811691630100000081048216916401000000009091041685565b34801561074057600080fd5b5061039061074f366004612bae565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561077957600080fd5b50610468610788366004612bae565b610d98565b34801561079957600080fd5b5060055461010090046001600160a01b03166103c0565b3480156107bc57600080fd5b506104686107cb366004612bae565b610ec9565b3480156107dc57600080fd5b5061035a610ef3565b3480156107f157600080fd5b506103e960235481565b34801561080757600080fd5b50601354601454601554601654601754610822949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610367565b34801561085657600080fd5b50610390610865366004612b28565b610f02565b34801561087657600080fd5b506019546103c0906001600160a01b031681565b34801561089657600080fd5b50600f546103909060ff1681565b3480156108b057600080fd5b506103906108bf366004612b28565b610f7d565b3480156108d057600080fd5b506018546103c0906001600160a01b031681565b3480156108f057600080fd5b506103e960245481565b34801561090657600080fd5b50610468610915366004612be0565b610f8b565b34801561092657600080fd5b50610468610935366004612b95565b610feb565b34801561094657600080fd5b50610468610955366004612bae565b610ff8565b34801561096657600080fd5b50610390610975366004612bae565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561099f57600080fd5b506103e9601d5481565b3480156109b557600080fd5b506104686109c4366004612bfb565b611022565b3480156109d557600080fd5b506103e96109e4366004612c30565b6110b3565b3480156109f557600080fd5b50610468610a04366004612bae565b6110de565b348015610a1557600080fd5b50610468610a24366004612b95565b611107565b348015610a3557600080fd5b50610468610a44366004612bae565b611114565b348015610a5557600080fd5b50601c54600160b01b900460ff16610390565b348015610a7457600080fd5b50610468610a83366004612bae565b6112a8565b348015610a9457600080fd5b506012546105b89060ff808216916101008104821691620100008204811691630100000081048216916401000000009091041685565b606060038054610ad990612c69565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612c69565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b600033610b6a81858561131e565b60019150505b92915050565b600033610b84858285611443565b610b8f8585856114bd565b506001949350505050565b6000600e54821115610c065760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610c10611aa5565b9050610c1c8184612cb9565b9392505050565b610c2b611ac8565b601c805460ff60b01b198116600160b01b9182900460ff1615909102179055565b600033610b6a818585610c5f83836110b3565b610c699190612cdb565b61131e565b610c76611ac8565b600f805460ff19811660ff90911615179055565b610c943382611b28565b50565b610c9f611ac8565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b610ccb611ac8565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b610cf7611ac8565b6001600160a01b03166000908152602260205260409020805460ff19169055565b610d20611ac8565b602055565b6001600160a01b0381166000908152600a602052604081205460ff1615610d6257506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b7090610b9a565b610d8c611ac8565b610d966000611c45565b565b610da0611ac8565b6001600160a01b0381166000908152600a602052604090205460ff1615610e095760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bfd565b6001600160a01b03811660009081526006602052604090205415610e63576001600160a01b038116600090815260066020526040902054610e4990610b9a565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b610ed1611ac8565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610ad990612c69565b60003381610f1082866110b3565b905083811015610f705760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bfd565b610b8f828686840361131e565b600033610b6a8185856114bd565b610f93611ac8565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fe090831515815260200190565b60405180910390a150565b610ff3611ac8565b601f55565b611000611ac8565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b61102a611ac8565b601c546001600160a01b03908116908316036110885760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420736574207061697220616464726573730000000000000000006044820152606401610bfd565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6110e6611ac8565b6001600160a01b03166000908152600960205260409020805460ff19169055565b61110f611ac8565b602155565b61111c611ac8565b6001600160a01b0381166000908152600a602052604090205460ff166111845760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bfd565b60005b600b548110156112a457816001600160a01b0316600b82815481106111ae576111ae612cee565b6000918252602090912001546001600160a01b03160361129257600b80546111d890600190612d04565b815481106111e8576111e8612cee565b600091825260209091200154600b80546001600160a01b03909216918390811061121457611214612cee565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548061126c5761126c612d17565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061129c81612d2d565b915050611187565b5050565b6112b0611ac8565b6001600160a01b0381166113155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bfd565b610c9481611c45565b6001600160a01b0383166113805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bfd565b6001600160a01b0382166113e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bfd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061144f84846110b3565b905060001981146114b757818110156114aa5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bfd565b6114b7848484840361131e565b50505050565b3360009081526022602052604090205460ff161561152b5760405162461bcd60e51b815260206004820152602560248201527f426c61636b6c69737465643a2043616e6e6f742065786563757465206f70657260448201526430ba34b7b760d91b6064820152608401610bfd565b828282601c60169054906101000a900460ff16801561156357506001600160a01b0382166000908152600c602052604090205460ff16155b156115e857601d548161157584610d25565b61157f9190612cdb565b11156115e85760405162461bcd60e51b815260206004820152603260248201527f5472616e7366657220616d6f756e7420776f756c6420657863656564207468656044820152711036b0bc2bb0b63632ba2130b630b731b29760711b6064820152608401610bfd565b6001600160a01b03861660009081526022602052604090205460ff161561165c5760405162461bcd60e51b815260206004820152602260248201527f426c61636b6c69737465643a2053656e64657220697320626c61636b6c697374604482015261195960f21b6064820152608401610bfd565b6001600160a01b03851660009081526022602052604090205460ff16156116d35760405162461bcd60e51b815260206004820152602560248201527f426c61636b6c69737465643a20526563697069656e7420697320626c61636b6c6044820152641a5cdd195960da1b6064820152608401610bfd565b6001600160a01b0386166117375760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bfd565b6001600160a01b0385166117995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bfd565b600084116117fb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bfd565b6005546001600160a01b03878116610100909204161480159061183157506005546001600160a01b038681166101009092041614155b1561189957601e548411156118995760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bfd565b6118a286611c9f565b6040805160a08101825260105460ff8082168352610100820481166020840152620100008204811693830193909352630100000081048316606083015264010000000090049091166080820152601c54600291906000906001600160a01b039081169089160361197f5750506040805160a08101825260125460ff8082168352610100820481166020808501919091526201000083048216848601526301000000830482166060850152640100000000909204811660808401526001600160a01b038b166000908152600990925292812054909350909116611a05565b601c546001600160a01b03908116908a1603611a055750506040805160a08101825260115460ff8082168352610100820481166020808501919091526201000083048216848601526301000000830482166060850152640100000000909204811660808401526001600160a01b038a166000908152600990925292902054600193509091165b600f5460ff161580611a2857506002836002811115611a2657611a26612d46565b145b80611a305750805b80611a79575060408201516080830151602084015184516060860151611a569190612d5c565b611a609190612d5c565b611a6a9190612d5c565b611a749190612d5c565b60ff16155b15611a8e57611a89898989611e3f565b611a9a565b611a9a89898985611ea2565b505050505050505050565b6000806000611ab261222d565b9092509050611ac18183612cb9565b9250505090565b6005546001600160a01b03610100909104163314610d965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bfd565b6001600160a01b038216611b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bfd565b6001600160a01b03821660009081526020819052604090205481811015611bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bfd565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020612e498339815191529101611436565b505050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602454602354611cb19190612cdb565b611cba30610d25565b611cc49190612d04565b9050601e548110611cd45750601e545b601f5481108015908190611cf25750601c54600160a01b900460ff16155b8015611d0c5750601c546001600160a01b03848116911614155b8015611d215750601c54600160a81b900460ff165b15611d4c57601f54600f805460ff191690559150611d3e826123b0565b600f805460ff191660011790555b60245460215481108015908190611d6d5750601c54600160a01b900460ff16155b8015611d875750601c546001600160a01b03868116911614155b8015611d9c5750601c54600160a81b900460ff165b15611dc157600f805460ff19169055611db3612457565b600f805460ff191660011790555b60235460205481108015908190611de25750601c54600160a01b900460ff16155b8015611dfc5750601c546001600160a01b03888116911614155b8015611e115750601c54600160a81b900460ff165b15611e3657600f805460ff19169055611e286125f8565b600f805460ff191660011790555b50505050505050565b6000611e49611aa5565b9050611e5684838361278d565b611e6183838361281d565b826001600160a01b0316846001600160a01b0316600080516020612e4983398151915284604051611e9491815260200190565b60405180910390a350505050565b816000611ead611aa5565b9050826080015160ff16600014611f4a5760006064846080015160ff1686611ed59190612d75565b611edf9190612cb9565b90508015611f4857611ef18184612d04565b92508060136004016000828254611f089190612cdb565b90915550611f19905030828461281d565b60405181815230906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b604083015160ff1615611fe75760006064846040015160ff1686611f6e9190612d75565b611f789190612cb9565b90508015611fe557611f8a8184612d04565b92508060136002016000828254611fa19190612cdb565b90915550611fb4905061dead828461281d565b60405181815261dead906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b825160ff16156120945782516000906064906120069060ff1687612d75565b6120109190612cb9565b90508015612092576120228184612d04565b925080601360000160008282546120399190612cdb565b9250508190555080602360008282546120529190612cdb565b90915550612063905030828461281d565b60405181815230906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b602083015160ff16156121465760006064846020015160ff16866120b89190612d75565b6120c29190612cb9565b90508015612144576120d48184612d04565b925080601360010160008282546120eb9190612cdb565b9250508190555080602460008282546121049190612cdb565b90915550612115905030828461281d565b60405181815230906001600160a01b03891690600080516020612e498339815191529060200160405180910390a35b505b606083015160ff16156121cd5760006064846060015160ff168661216a9190612d75565b6121749190612cb9565b905080156121cb576121868184612d04565b9250612190611aa5565b61219a9082612d75565b600e60008282546121ab9190612d04565b9091555050601680548291906000906121c5908490612cdb565b90915550505b505b6121d886858361278d565b8115612225576121e985838361281d565b846001600160a01b0316866001600160a01b0316600080516020612e498339815191528460405161221c91815260200190565b60405180910390a35b505050505050565b600e54600d546000918291825b600b5481101561237f578260066000600b848154811061225c5761225c612cee565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122c757508160076000600b84815481106122a0576122a0612cee565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122dd57600e54600d54945094505050509091565b60066000600b83815481106122f4576122f4612cee565b60009182526020808320909101546001600160a01b031683528201929092526040019020546123239084612d04565b925060076000600b838154811061233c5761233c612cee565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461236b9083612d04565b91508061237781612d2d565b91505061223a565b50600d54600e546123909190612cb9565b8210156123a757600e54600d549350935050509091565b90939092509050565b601c805460ff60a01b1916600160a01b17905560006123d0600283612cb9565b905060006123de8284612d04565b9050476123ea83612898565b60006123f68247612d04565b905061240283826129ea565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b19169055505050565b602454601b546124729030906001600160a01b03168361131e565b60006024819055604080516002808252606082018352909160208301908036833701905050905030816000815181106124ad576124ad612cee565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252a9190612d8c565b8160018151811061253d5761253d612cee565b6001600160a01b039283166020918202929092010152601b54601a54604051635c11d79560e01b815291831692635c11d795926125899287926000928892909116904290600401612da9565b600060405180830381600087803b1580156125a357600080fd5b505af11580156125b7573d6000803e3d6000fd5b505050507fd83f4ec8353d318f880ff286bf1730d7a5ac5f5d0fe4f4e985e84003f362329e826040516125ec91815260200190565b60405180910390a15050565b602354601b546126139030906001600160a01b03168361131e565b600060238190556040805160028082526060820183529091602083019080368337019050509050308160008151811061264e5761264e612cee565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cb9190612d8c565b816001815181106126de576126de612cee565b6001600160a01b039283166020918202929092010152601b54601954604051635c11d79560e01b815291831692635c11d7959261272a9287926000928892909116904290600401612da9565b600060405180830381600087803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b505050507f046db3278eb8c35d23cd1d79b03800f26835ed1f9b3b67b6152305bdc1a5da5e826040516125ec91815260200190565b6001600160a01b0383166000908152600a602052604090205460ff16156127e1576001600160a01b038316600090815260076020526040812080548492906127d6908490612d04565b90915550611c409050565b6127eb8183612d75565b6001600160a01b03841660009081526006602052604081208054909190612813908490612d04565b9091555050505050565b6001600160a01b0383166000908152600a602052604090205460ff1615612866576001600160a01b038316600090815260076020526040812080548492906127d6908490612cdb565b6128708183612d75565b6001600160a01b03841660009081526006602052604081208054909190612813908490612cdb565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128cd576128cd612cee565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294a9190612d8c565b8160018151811061295d5761295d612cee565b6001600160a01b039283166020918202929092010152601b54612983913091168461131e565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906129bc908590600090869030904290600401612da9565b600060405180830381600087803b1580156129d657600080fd5b505af1158015612225573d6000803e3d6000fd5b601b54612a029030906001600160a01b03168461131e565b601b546001600160a01b031663f305d719823085600080612a316005546001600160a01b036101009091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a99573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612abe9190612e1a565b5050505050565b600060208083528351808285015260005b81811015612af257858101830151858201604001528201612ad6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c9457600080fd5b60008060408385031215612b3b57600080fd5b8235612b4681612b13565b946020939093013593505050565b600080600060608486031215612b6957600080fd5b8335612b7481612b13565b92506020840135612b8481612b13565b929592945050506040919091013590565b600060208284031215612ba757600080fd5b5035919050565b600060208284031215612bc057600080fd5b8135610c1c81612b13565b80358015158114612bdb57600080fd5b919050565b600060208284031215612bf257600080fd5b610c1c82612bcb565b60008060408385031215612c0e57600080fd5b8235612c1981612b13565b9150612c2760208401612bcb565b90509250929050565b60008060408385031215612c4357600080fd5b8235612c4e81612b13565b91506020830135612c5e81612b13565b809150509250929050565b600181811c90821680612c7d57607f821691505b602082108103612c9d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082612cd657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b7057610b70612ca3565b634e487b7160e01b600052603260045260246000fd5b81810381811115610b7057610b70612ca3565b634e487b7160e01b600052603160045260246000fd5b600060018201612d3f57612d3f612ca3565b5060010190565b634e487b7160e01b600052602160045260246000fd5b60ff8181168382160190811115610b7057610b70612ca3565b8082028115828204841417610b7057610b70612ca3565b600060208284031215612d9e57600080fd5b8151610c1c81612b13565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612df95784516001600160a01b031683529383019391830191600101612dd4565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e2f57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d10a4a801efc4148691fe20c310b0269d83b0cd3121d7922d28f1ac7341ab30e64736f6c63430008130033
Deployed Bytecode Sourcemap
30901:20874:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11205:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13622:226;;;;;;;;;;-1:-1:-1;13622:226:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13622:226:0;1023:187:1;32511:41:0;;;;;;;;;;-1:-1:-1;32511:41:0;;;;-1:-1:-1;;;;;32511:41:0;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;32511:41:0;1215:230:1;35375:95:0;;;;;;;;;;-1:-1:-1;35455:7:0;;35375:95;;;1596:25:1;;;1584:2;1569:18;35375:95:0;1450:177:1;14428:295:0;;;;;;;;;;-1:-1:-1;14428:295:0;;;;;:::i;:::-;;:::i;35812:303::-;;;;;;;;;;-1:-1:-1;35812:303:0;;;;;:::i;:::-;;:::i;12167:93::-;;;;;;;;;;-1:-1:-1;12167:93:0;;12250:2;2420:36:1;;2408:2;2393:18;12167:93:0;2278:184:1;49835:120:0;;;;;;;;;;;;;:::i;:::-;;15132:263;;;;;;;;;;-1:-1:-1;15132:263:0;;;;;:::i;:::-;;:::i;32409:79::-;;;;;;;;;;-1:-1:-1;32409:79:0;;;;-1:-1:-1;;;;;32409:79:0;;;36123:135;;;;;;;;;;;;;:::i;23036:91::-;;;;;;;;;;-1:-1:-1;23036:91:0;;;;;:::i;:::-;;:::i;37906:111::-;;;;;;;;;;-1:-1:-1;37906:111:0;;;;;:::i;:::-;;:::i;49010:::-;;;;;;;;;;-1:-1:-1;49010:111:0;;;;;:::i;:::-;;:::i;32559:28::-;;;;;;;;;;-1:-1:-1;32559:28:0;;;;-1:-1:-1;;;;;32559:28:0;;;32631:40;;;;;;;;;;-1:-1:-1;32631:40:0;;;;-1:-1:-1;;;32631:40:0;;;;;;32172:90;;;;;;;;;;;;32220:42;32172:90;;31712:48;;;;;;;;;;-1:-1:-1;31712:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3196:4:1;3184:17;;;3166:36;;3238:17;;;3233:2;3218:18;;3211:45;3292:17;;;3272:18;;;3265:45;;;;3346:17;;3341:2;3326:18;;3319:45;3401:17;;;3395:3;3380:19;;3373:46;3153:3;3138:19;31712:48:0;2927:498:1;39192:124:0;;;;;;;;;;-1:-1:-1;39192:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;39281:27:0;39257:4;39281:27;;;:18;:27;;;;;;;;;39192:124;49129:117;;;;;;;;;;-1:-1:-1;49129:117:0;;;;;:::i;:::-;;:::i;36733:173::-;;;;;;;;;;-1:-1:-1;36733:173:0;;;;;:::i;:::-;;:::i;4927:86::-;;;;;;;;;;-1:-1:-1;4998:7:0;;;;4927:86;;35478:198;;;;;;;;;;-1:-1:-1;35478:198:0;;;;;:::i;:::-;;:::i;2564:103::-;;;;;;;;;;;;;:::i;49592:99::-;;;;;;;;;;-1:-1:-1;49667:16:0;;49592:99;;49473:111;;;;;;;;;;-1:-1:-1;49554:22:0;;49473:111;;32818:52;;;;;;;;;;;;;;;;31767:44;;;;;;;;;;-1:-1:-1;31767:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35684:120;;;;;;;;;;-1:-1:-1;35684:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;35776:20:0;35752:4;35776:20;;;:11;:20;;;;;;;;;35684:120;37069:338;;;;;;;;;;-1:-1:-1;37069:338:0;;;;;:::i;:::-;;:::i;1916:87::-;;;;;;;;;;-1:-1:-1;1989:6:0;;;;;-1:-1:-1;;;;;1989:6:0;1916:87;;36273:130;;;;;;;;;;-1:-1:-1;36273:130:0;;;;;:::i;:::-;;:::i;11424:104::-;;;;;;;;;;;;;:::i;33646:30::-;;;;;;;;;;;;;;;;32045:36;;;;;;;;;;-1:-1:-1;32045:36:0;;;;;;;;;;;;;;;;;;;;;;3689:25:1;;;3745:2;3730:18;;3723:34;;;;3773:18;;;3766:34;;;;3831:2;3816:18;;3809:34;3874:3;3859:19;;3852:35;3676:3;3661:19;32045:36:0;3430:463:1;15898:498:0;;;;;;;;;;-1:-1:-1;15898:498:0;;;;;:::i;:::-;;:::i;32295:85::-;;;;;;;;;;-1:-1:-1;32295:85:0;;;;-1:-1:-1;;;;;32295:85:0;;;31526:27;;;;;;;;;;-1:-1:-1;31526:27:0;;;;;;;;12845:218;;;;;;;;;;-1:-1:-1;12845:218:0;;;;;:::i;:::-;;:::i;32269:19::-;;;;;;;;;;-1:-1:-1;32269:19:0;;;;-1:-1:-1;;;;;32269:19:0;;;33683:24;;;;;;;;;;;;;;;;38143:171;;;;;;;;;;-1:-1:-1;38143:171:0;;;;;:::i;:::-;;:::i;36528:201::-;;;;;;;;;;-1:-1:-1;36528:201:0;;;;;:::i;:::-;;:::i;36410:106::-;;;;;;;;;;-1:-1:-1;36410:106:0;;;;;:::i;:::-;;:::i;49699:128::-;;;;;;;;;;-1:-1:-1;49699:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;49788:31:0;49768:4;49788:31;;;:22;:31;;;;;;;;;49699:128;32754:56;;;;;;;;;;;;;;;;49258:207;;;;;;;;;;-1:-1:-1;49258:207:0;;;;;:::i;:::-;;:::i;13126:176::-;;;;;;;;;;-1:-1:-1;13126:176:0;;;;;:::i;:::-;;:::i;38025:110::-;;;;;;;;;;-1:-1:-1;38025:110:0;;;;;:::i;:::-;;:::i;36910:149::-;;;;;;;;;;-1:-1:-1;36910:149:0;;;;;:::i;:::-;;:::i;37415:483::-;;;;;;;;;;-1:-1:-1;37415:483:0;;;;;:::i;:::-;;:::i;49959:109::-;;;;;;;;;;-1:-1:-1;50040:24:0;;-1:-1:-1;;;50040:24:0;;;;49959:109;;2822:238;;;;;;;;;;-1:-1:-1;2822:238:0;;;;;:::i;:::-;;:::i;31818:44::-;;;;;;;;;;-1:-1:-1;31818:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11205:100;11259:13;11292:5;11285:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11205:100;:::o;13622:226::-;13730:4;680:10;13786:32;680:10;13802:7;13811:6;13786:8;:32::i;:::-;13836:4;13829:11;;;13622:226;;;;;:::o;14428:295::-;14559:4;680:10;14617:38;14633:4;680:10;14648:6;14617:15;:38::i;:::-;14666:27;14676:4;14682:2;14686:6;14666:9;:27::i;:::-;-1:-1:-1;14711:4:0;;14428:295;-1:-1:-1;;;;14428:295:0:o;35812:303::-;35895:7;35948;;35937;:18;;35915:110;;;;-1:-1:-1;;;35915:110:0;;5548:2:1;35915:110:0;;;5530:21:1;5587:2;5567:18;;;5560:30;5626:34;5606:18;;;5599:62;-1:-1:-1;;;5677:18:1;;;5670:40;5727:19;;35915:110:0;;;;;;;;;36036:19;36058:10;:8;:10::i;:::-;36036:32;-1:-1:-1;36086:21:0;36036:32;36086:7;:21;:::i;:::-;36079:28;35812:303;-1:-1:-1;;;35812:303:0:o;49835:120::-;1802:13;:11;:13::i;:::-;49927:24:::1;::::0;;-1:-1:-1;;;;49899:52:0;::::1;-1:-1:-1::0;;;49927:24:0;;;::::1;;;49926:25;49899:52:::0;;::::1;;::::0;;49835:120::o;15132:263::-;15245:4;680:10;15301:64;680:10;15317:7;15354:10;15326:25;680:10;15317:7;15326:9;:25::i;:::-;:38;;;;:::i;:::-;15301:8;:64::i;36123:135::-;1802:13;:11;:13::i;:::-;36235:15:::1;::::0;;-1:-1:-1;;36216:34:0;::::1;36235:15;::::0;;::::1;36234:16;36216:34;::::0;;36123:135::o;23036:91::-;23092:27;680:10;23112:6;23092:5;:27::i;:::-;23036:91;:::o;37906:111::-;1802:13;:11;:13::i;:::-;-1:-1:-1;;;;;37975:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37975:34:0::1;38005:4;37975:34;::::0;;37906:111::o;49010:::-;1802:13;:11;:13::i;:::-;-1:-1:-1;;;;;49082:24:0::1;;::::0;;;:14:::1;:24;::::0;;;;:31;;-1:-1:-1;;49082:31:0::1;49109:4;49082:31;::::0;;49010:111::o;49129:117::-;1802:13;:11;:13::i;:::-;-1:-1:-1;;;;;49206:24:0::1;49233:5;49206:24:::0;;;:14:::1;:24;::::0;;;;:32;;-1:-1:-1;;49206:32:0::1;::::0;;49129:117::o;36733:173::-;1802:13;:11;:13::i;:::-;36850:22:::1;:48:::0;36733:173::o;35478:198::-;-1:-1:-1;;;;;35568:20:0;;35544:7;35568:20;;;:11;:20;;;;;;;;35564:49;;;-1:-1:-1;;;;;;35597:16:0;;;;;:7;:16;;;;;;;35478:198::o;35564:49::-;-1:-1:-1;;;;;35651:16:0;;;;;;:7;:16;;;;;;35631:37;;:19;:37::i;2564:103::-;1802:13;:11;:13::i;:::-;2629:30:::1;2656:1;2629:18;:30::i;:::-;2564:103::o:0;37069:338::-;1802:13;:11;:13::i;:::-;-1:-1:-1;;;;;37156:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37155:21;37147:61;;;::::0;-1:-1:-1;;;37147:61:0;;6443:2:1;37147:61:0::1;::::0;::::1;6425:21:1::0;6482:2;6462:18;;;6455:30;6521:29;6501:18;;;6494:57;6568:18;;37147:61:0::1;6241:351:1::0;37147:61:0::1;-1:-1:-1::0;;;;;37223:16:0;::::1;37242:1;37223:16:::0;;;:7:::1;:16;::::0;;;;;:20;37219:109:::1;;-1:-1:-1::0;;;;;37299:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37279:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37260:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37219:109:::1;-1:-1:-1::0;;;;;37338:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37338:27:0::1;37361:4;37338:27:::0;;::::1;::::0;;;37376:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37376:23:0::1;::::0;;::::1;::::0;;37069:338::o;36273:130::-;1802:13;:11;:13::i;:::-;36359:16:::1;:36:::0;;-1:-1:-1;;;;;;36359:36:0::1;-1:-1:-1::0;;;;;36359:36:0;;;::::1;::::0;;;::::1;::::0;;36273:130::o;11424:104::-;11480:13;11513:7;11506:14;;;;;:::i;15898:498::-;16016:4;680:10;16016:4;16099:25;680:10;16116:7;16099:9;:25::i;:::-;16072:52;;16177:15;16157:16;:35;;16135:122;;;;-1:-1:-1;;;16135:122:0;;6799:2:1;16135:122:0;;;6781:21:1;6838:2;6818:18;;;6811:30;6877:34;6857:18;;;6850:62;-1:-1:-1;;;6928:18:1;;;6921:35;6973:19;;16135:122:0;6597:401:1;16135:122:0;16293:60;16302:5;16309:7;16337:15;16318:16;:34;16293:8;:60::i;12845:218::-;12949:4;680:10;13005:28;680:10;13022:2;13026:6;13005:9;:28::i;38143:171::-;1802:13;:11;:13::i;:::-;38220:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38220:32:0::1;-1:-1:-1::0;;;;38220:32:0;;::::1;;::::0;;38268:38:::1;::::0;::::1;::::0;::::1;::::0;38244:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;38268:38:0::1;;;;;;;;38143:171:::0;:::o;36528:201::-;1802:13;:11;:13::i;:::-;36659:29:::1;:62:::0;36528:201::o;36410:106::-;1802:13;:11;:13::i;:::-;36484:10:::1;:24:::0;;-1:-1:-1;;;;;;36484:24:0::1;-1:-1:-1::0;;;;;36484:24:0;;;::::1;::::0;;;::::1;::::0;;36410:106::o;49258:207::-;1802:13;:11;:13::i;:::-;49371::::1;::::0;-1:-1:-1;;;;;49371:13:0;;::::1;49359:25:::0;;::::1;::::0;49351:61:::1;;;::::0;-1:-1:-1;;;49351:61:0;;7205:2:1;49351:61:0::1;::::0;::::1;7187:21:1::0;7244:2;7224:18;;;7217:30;7283:25;7263:18;;;7256:53;7326:18;;49351:61:0::1;7003:347:1::0;49351:61:0::1;-1:-1:-1::0;;;;;49419:32:0;;;::::1;;::::0;;;:22:::1;:32;::::0;;;;:42;;-1:-1:-1;;49419:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49258:207::o;13126:176::-;-1:-1:-1;;;;;13267:18:0;;;13240:7;13267:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13126:176::o;38025:110::-;1802:13;:11;:13::i;:::-;-1:-1:-1;;;;;38092:27:0::1;38122:5;38092:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;38092:35:0::1;::::0;;38025:110::o;36910:149::-;1802:13;:11;:13::i;:::-;37015:16:::1;:36:::0;36910:149::o;37415:483::-;1802:13;:11;:13::i;:::-;-1:-1:-1;;;;;37501:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37493:60;;;::::0;-1:-1:-1;;;37493:60:0;;6443:2:1;37493:60:0::1;::::0;::::1;6425:21:1::0;6482:2;6462:18;;;6455:30;6521:29;6501:18;;;6494:57;6568:18;;37493:60:0::1;6241:351:1::0;37493:60:0::1;37569:9;37564:327;37588:9;:16:::0;37584:20;::::1;37564:327;;;37646:7;-1:-1:-1::0;;;;;37630:23:0::1;:9;37640:1;37630:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37630:12:0::1;:23:::0;37626:254:::1;;37689:9;37699:16:::0;;:20:::1;::::0;37718:1:::1;::::0;37699:20:::1;:::i;:::-;37689:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37674:9:::1;:12:::0;;-1:-1:-1;;;;;37689:31:0;;::::1;::::0;37684:1;;37674:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;37674:46:0::1;-1:-1:-1::0;;;;;37674:46:0;;::::1;;::::0;;37739:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;37778:11:::1;:20:::0;;;;:28;;-1:-1:-1;;37778:28:0::1;::::0;;37825:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37825:15:0;;;;;-1:-1:-1;;;;;;37825:15:0::1;::::0;;;;;37564:327:::1;37415:483:::0;:::o;37626:254::-:1;37606:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37564:327;;;;37415:483:::0;:::o;2822:238::-;1802:13;:11;:13::i;:::-;-1:-1:-1;;;;;2925:22:0;::::1;2903:110;;;::::0;-1:-1:-1;;;2903:110:0;;8094:2:1;2903:110:0::1;::::0;::::1;8076:21:1::0;8133:2;8113:18;;;8106:30;8172:34;8152:18;;;8145:62;-1:-1:-1;;;8223:18:1;;;8216:36;8269:19;;2903:110:0::1;7892:402:1::0;2903:110:0::1;3024:28;3043:8;3024:18;:28::i;20024:380::-:0;-1:-1:-1;;;;;20160:19:0;;20152:68;;;;-1:-1:-1;;;20152:68:0;;8501:2:1;20152:68:0;;;8483:21:1;8540:2;8520:18;;;8513:30;8579:34;8559:18;;;8552:62;-1:-1:-1;;;8630:18:1;;;8623:34;8674:19;;20152:68:0;8299:400:1;20152:68:0;-1:-1:-1;;;;;20239:21:0;;20231:68;;;;-1:-1:-1;;;20231:68:0;;8906:2:1;20231:68:0;;;8888:21:1;8945:2;8925:18;;;8918:30;8984:34;8964:18;;;8957:62;-1:-1:-1;;;9035:18:1;;;9028:32;9077:19;;20231:68:0;8704:398:1;20231:68:0;-1:-1:-1;;;;;20312:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20364:32;;1596:25:1;;;20364:32:0;;1569:18:1;20364:32:0;;;;;;;;20024:380;;;:::o;20695:502::-;20830:24;20857:25;20867:5;20874:7;20857:9;:25::i;:::-;20830:52;;-1:-1:-1;;20897:16:0;:37;20893:297;;20997:6;20977:16;:26;;20951:117;;;;-1:-1:-1;;;20951:117:0;;9309:2:1;20951:117:0;;;9291:21:1;9348:2;9328:18;;;9321:30;9387:31;9367:18;;;9360:59;9436:18;;20951:117:0;9107:353:1;20951:117:0;21112:51;21121:5;21128:7;21156:6;21137:16;:25;21112:8;:51::i;:::-;20819:378;20695:502;;;:::o;39324:2270::-;33247:10;33232:26;;;;:14;:26;;;;;;;;33231:27;33223:77;;;;-1:-1:-1;;;33223:77:0;;9667:2:1;33223:77:0;;;9649:21:1;9706:2;9686:18;;;9679:30;9745:34;9725:18;;;9718:62;-1:-1:-1;;;9796:18:1;;;9789:35;9841:19;;33223:77:0;9465:401:1;33223:77:0;39481:4:::1;39487:2;39491:6;33408:24;;;;;;;;;;;:55;;;;-1:-1:-1::0;;;;;;33437:26:0;::::1;;::::0;;;:22:::1;:26;::::0;;;;;::::1;;33436:27;33408:55;33404:223;;;33524:17;;33514:6;33498:13;33508:2;33498:9;:13::i;:::-;:22;;;;:::i;:::-;:43;;33476:143;;;::::0;-1:-1:-1;;;33476:143:0;;10073:2:1;33476:143:0::1;::::0;::::1;10055:21:1::0;10112:2;10092:18;;;10085:30;10151:34;10131:18;;;10124:62;-1:-1:-1;;;10202:18:1;;;10195:48;10260:19;;33476:143:0::1;9871:414:1::0;33476:143:0::1;-1:-1:-1::0;;;;;39517:20:0;::::2;;::::0;;;:14:::2;:20;::::0;;;;;::::2;;39516:21;39508:68;;;::::0;-1:-1:-1;;;39508:68:0;;10492:2:1;39508:68:0::2;::::0;::::2;10474:21:1::0;10531:2;10511:18;;;10504:30;10570:34;10550:18;;;10543:62;-1:-1:-1;;;10621:18:1;;;10614:32;10663:19;;39508:68:0::2;10290:398:1::0;39508:68:0::2;-1:-1:-1::0;;;;;39594:18:0;::::2;;::::0;;;:14:::2;:18;::::0;;;;;::::2;;39593:19;39585:69;;;::::0;-1:-1:-1;;;39585:69:0;;10895:2:1;39585:69:0::2;::::0;::::2;10877:21:1::0;10934:2;10914:18;;;10907:30;10973:34;10953:18;;;10946:62;-1:-1:-1;;;11024:18:1;;;11017:35;11069:19;;39585:69:0::2;10693:401:1::0;39585:69:0::2;-1:-1:-1::0;;;;;39673:18:0;::::2;39665:68;;;::::0;-1:-1:-1;;;39665:68:0;;11301:2:1;39665:68:0::2;::::0;::::2;11283:21:1::0;11340:2;11320:18;;;11313:30;11379:34;11359:18;;;11352:62;-1:-1:-1;;;11430:18:1;;;11423:35;11475:19;;39665:68:0::2;11099:401:1::0;39665:68:0::2;-1:-1:-1::0;;;;;39752:16:0;::::2;39744:64;;;::::0;-1:-1:-1;;;39744:64:0;;11707:2:1;39744:64:0::2;::::0;::::2;11689:21:1::0;11746:2;11726:18;;;11719:30;11785:34;11765:18;;;11758:62;-1:-1:-1;;;11836:18:1;;;11829:33;11879:19;;39744:64:0::2;11505:399:1::0;39744:64:0::2;39836:1;39827:6;:10;39819:64;;;::::0;-1:-1:-1;;;39819:64:0;;12111:2:1;39819:64:0::2;::::0;::::2;12093:21:1::0;12150:2;12130:18;;;12123:30;12189:34;12169:18;;;12162:62;-1:-1:-1;;;12240:18:1;;;12233:39;12289:19;;39819:64:0::2;11909:405:1::0;39819:64:0::2;1989:6:::0;;-1:-1:-1;;;;;39897:15:0;;::::2;1989:6:::0;;;;;39897:15:::2;::::0;::::2;::::0;:32:::2;;-1:-1:-1::0;1989:6:0;;-1:-1:-1;;;;;39916:13:0;;::::2;1989:6:::0;;;;;39916:13:::2;;39897:32;39893:148;;;39969:12;;39959:6;:22;;39941:100;;;::::0;-1:-1:-1;;;39941:100:0;;12521:2:1;39941:100:0::2;::::0;::::2;12503:21:1::0;12560:2;12540:18;;;12533:30;12599:34;12579:18;;;12572:62;-1:-1:-1;;;12650:18:1;;;12643:38;12698:19;;39941:100:0::2;12319:404:1::0;39941:100:0::2;40340:29;40364:4;40340:23;:29::i;:::-;40559:38;::::0;;::::2;::::0;::::2;::::0;;40584:13:::2;40559:38:::0;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;;::::2;::::0;;;;40663:13:::2;::::0;40526:22:::2;::::0;40559:38;40497:26:::2;::::0;-1:-1:-1;;;;;40663:13:0;;::::2;40657:19:::0;;::::2;::::0;40653:372:::2;;-1:-1:-1::0;;40741:21:0::2;::::0;;::::2;::::0;::::2;::::0;;40753:9:::2;40741:21:::0;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;;;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;40801:24:0;::::2;40708:18;40801:24:::0;;;:18:::2;:24:::0;;;;;;;40708:18;;-1:-1:-1;40741:21:0;;40801:24:::2;40653:372;;;40855:13;::::0;-1:-1:-1;;;;;40855:13:0;;::::2;40847:21:::0;;::::2;::::0;40843:182:::2;;-1:-1:-1::0;;40932:20:0::2;::::0;;::::2;::::0;::::2;::::0;;40944:8:::2;40932:20:::0;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;;;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;40991:22:0;::::2;-1:-1:-1::0;40991:22:0;;;:18:::2;:22:::0;;;;;;;40900:17:::2;::::0;-1:-1:-1;40932:20:0;;40991:22:::2;40843:182;41056:15;::::0;::::2;;41055:16;::::0;:71:::2;;-1:-1:-1::0;41104:22:0::2;41088:12;:38;;;;;;;;:::i;:::-;;41055:71;:109;;;;41143:21;41055:109;:314;;;-1:-1:-1::0;41333:18:0::2;::::0;::::2;::::0;41294:19:::2;::::0;::::2;::::0;41261:13:::2;::::0;::::2;::::0;41222:19;;41181:21:::2;::::0;::::2;::::0;:60:::2;::::0;41222:19;41181:60:::2;:::i;:::-;:93;;;;:::i;:::-;:132;;;;:::i;:::-;:170;;;;:::i;:::-;:188;;::::0;41055:314:::2;41037:550;;;41396:33;41412:4;41418:2;41422:6;41396:15;:33::i;:::-;41037:550;;;41532:43;41547:4;41553:2;41557:6;41565:9;41532:14;:43::i;:::-;39499:2095;;;33311:1:::1;;;39324:2270:::0;;;:::o;38417:161::-;38459:7;38480:15;38497;38516:19;:17;:19::i;:::-;38479:56;;-1:-1:-1;38479:56:0;-1:-1:-1;38553:17:0;38479:56;;38553:17;:::i;:::-;38546:24;;;;38417:161;:::o;2081:132::-;1989:6;;-1:-1:-1;;;;;1989:6:0;;;;;680:10;2145:23;2137:68;;;;-1:-1:-1;;;2137:68:0;;13215:2:1;2137:68:0;;;13197:21:1;;;13234:18;;;13227:30;13293:34;13273:18;;;13266:62;13345:18;;2137:68:0;13013:356:1;18911:675:0;-1:-1:-1;;;;;18995:21:0;;18987:67;;;;-1:-1:-1;;;18987:67:0;;13576:2:1;18987:67:0;;;13558:21:1;13615:2;13595:18;;;13588:30;13654:34;13634:18;;;13627:62;-1:-1:-1;;;13705:18:1;;;13698:31;13746:19;;18987:67:0;13374:397:1;18987:67:0;-1:-1:-1;;;;;19154:18:0;;19129:22;19154:18;;;;;;;;;;;19191:24;;;;19183:71;;;;-1:-1:-1;;;19183:71:0;;13978:2:1;19183:71:0;;;13960:21:1;14017:2;13997:18;;;13990:30;14056:34;14036:18;;;14029:62;-1:-1:-1;;;14107:18:1;;;14100:32;14149:19;;19183:71:0;13776:398:1;19183:71:0;-1:-1:-1;;;;;19290:18:0;;:9;:18;;;;;;;;;;;19311:23;;;19290:44;;19429:12;:22;;;;;;;19480:37;1596:25:1;;;19290:9:0;;:18;-1:-1:-1;;;;;;;;;;;19480:37:0;1569:18:1;19480:37:0;1450:177:1;19530:48:0;18976:610;18911:675;;:::o;3220:191::-;3313:6;;;-1:-1:-1;;;;;3330:17:0;;;3313:6;3330:17;;;-1:-1:-1;;;;;;3330:17:0;;;;;;3363:40;;3313:6;;;;;;;;3363:40;;3294:16;;3363:40;3283:128;3220:191;:::o;50078:1690::-;50141:28;50218:9;;50200:15;;:27;;;;:::i;:::-;50172:24;50190:4;50172:9;:24::i;:::-;:56;;;;:::i;:::-;50141:87;;50269:12;;50245:20;:36;50241:104;;-1:-1:-1;50321:12:0;;50241:104;50421:29;;50384:66;;;;;;;50479:53;;-1:-1:-1;50516:16:0;;-1:-1:-1;;;50516:16:0;;;;50515:17;50479:53;:91;;;;-1:-1:-1;50557:13:0;;-1:-1:-1;;;;;50549:21:0;;;50557:13;;50549:21;;50479:91;:129;;;;-1:-1:-1;50587:21:0;;-1:-1:-1;;;50587:21:0;;;;50479:129;50461:393;;;50658:29;;50702:15;:23;;-1:-1:-1;;50702:23:0;;;50658:29;-1:-1:-1;50769:36:0;50658:29;50769:14;:36::i;:::-;50820:15;:22;;-1:-1:-1;;50820:22:0;50838:4;50820:22;;;50461:393;50909:9;;51003:16;;50961:58;;;;;;;51048;;-1:-1:-1;51090:16:0;;-1:-1:-1;;;51090:16:0;;;;51089:17;51048:58;:96;;;;-1:-1:-1;51131:13:0;;-1:-1:-1;;;;;51123:21:0;;;51131:13;;51123:21;;51048:96;:134;;;;-1:-1:-1;51161:21:0;;-1:-1:-1;;;51161:21:0;;;;51048:134;51030:281;;;51208:15;:23;;-1:-1:-1;;51208:23:0;;;51246:18;:16;:18::i;:::-;51279:15;:22;;-1:-1:-1;;51279:22:0;51297:4;51279:22;;;51030:281;51355:15;;51453:22;;51412:63;;;;;;;51504:57;;-1:-1:-1;51545:16:0;;-1:-1:-1;;;51545:16:0;;;;51544:17;51504:57;:95;;;;-1:-1:-1;51586:13:0;;-1:-1:-1;;;;;51578:21:0;;;51586:13;;51578:21;;51504:95;:133;;;;-1:-1:-1;51616:21:0;;-1:-1:-1;;;51616:21:0;;;;51504:133;51486:279;;;51663:15;:23;;-1:-1:-1;;51663:23:0;;;51701:17;:15;:17::i;:::-;51733:15;:22;;-1:-1:-1;;51733:22:0;51751:4;51733:22;;;51486:279;50134:1634;;;;;;50078:1690;:::o;43774:314::-;43905:12;43920:10;:8;:10::i;:::-;43905:25;;43941:37;43956:6;43964:7;43973:4;43941:14;:37::i;:::-;43989;44001:9;44012:7;44021:4;43989:11;:37::i;:::-;44061:9;-1:-1:-1;;;;;44044:36:0;44053:6;-1:-1:-1;;;;;44044:36:0;-1:-1:-1;;;;;;;;;;;44072:7:0;44044:36;;;;1596:25:1;;1584:2;1569:18;;1450:177;44044:36:0;;;;;;;;43894:194;43774:314;;;:::o;44169:2430::-;44357:7;44331:23;44390:10;:8;:10::i;:::-;44375:25;;44417:9;:19;;;:24;;44440:1;44417:24;44413:398;;44458:18;44513:3;44490:9;:19;;;44480:29;;:7;:29;;;;:::i;:::-;44479:37;;;;:::i;:::-;44458:58;-1:-1:-1;44535:15:0;;44531:269;;44571:29;44590:10;44571:29;;:::i;:::-;;;44644:10;44619:11;:21;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;44673:44:0;;-1:-1:-1;44693:4:0;44700:10;44712:4;44673:11;:44::i;:::-;44741:43;;1596:25:1;;;44766:4:0;;-1:-1:-1;;;;;44741:43:0;;;-1:-1:-1;;;;;;;;;;;44741:43:0;1584:2:1;1569:18;44741:43:0;;;;;;;44531:269;44443:368;44413:398;44837:18;;;;:23;;;44833:363;;44877:13;44926:3;44904:9;:18;;;44894:28;;:7;:28;;;;:::i;:::-;44893:36;;;;:::i;:::-;44877:52;-1:-1:-1;44948:10:0;;44944:241;;44979:24;44998:5;44979:24;;:::i;:::-;;;45046:5;45022:11;:20;;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;45070:38:0;;-1:-1:-1;32220:42:0;45096:5;45103:4;45070:11;:38::i;:::-;45132:37;;1596:25:1;;;32220:42:0;;-1:-1:-1;;;;;45132:37:0;;;-1:-1:-1;;;;;;;;;;;45132:37:0;1584:2:1;1569:18;45132:37:0;;;;;;;44944:241;44862:334;44833:363;45212:19;;:24;;;45208:453;;45286:19;;45253;;45309:3;;45276:29;;;;:7;:29;:::i;:::-;45275:37;;;;:::i;:::-;45253:59;-1:-1:-1;45331:16:0;;45327:323;;45368:30;45387:11;45368:30;;:::i;:::-;;;45442:11;45417;:21;;;:36;;;;;;;:::i;:::-;;;;;;;;45491:11;45472:15;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;45521:45:0;;-1:-1:-1;45541:4:0;45548:11;45561:4;45521:11;:45::i;:::-;45590:44;;1596:25:1;;;45615:4:0;;-1:-1:-1;;;;;45590:44:0;;;-1:-1:-1;;;;;;;;;;;45590:44:0;1584:2:1;1569:18;45590:44:0;;;;;;;45327:323;45238:423;45208:453;45678:13;;;;:18;;;45674:387;;45713:13;45757:3;45740:9;:13;;;45730:23;;:7;:23;;;;:::i;:::-;45729:31;;;;:::i;:::-;45713:47;-1:-1:-1;45779:10:0;;45775:275;;45810:24;45829:5;45810:24;;:::i;:::-;;;45872:5;45853:11;:15;;;:24;;;;;;;:::i;:::-;;;;;;;;45909:5;45896:9;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;45933:39:0;;-1:-1:-1;45953:4:0;45960:5;45967:4;45933:11;:39::i;:::-;45996:38;;1596:25:1;;;46021:4:0;;-1:-1:-1;;;;;45996:38:0;;;-1:-1:-1;;;;;;;;;;;45996:38:0;1584:2:1;1569:18;45996:38:0;;;;;;;45775:275;45698:363;45674:387;46077:21;;;;:26;;;46073:297;;46120:12;46171:3;46146:9;:21;;;46136:31;;:7;:31;;;;:::i;:::-;46135:39;;;;:::i;:::-;46120:54;-1:-1:-1;46193:9:0;;46189:170;;46223:23;46242:4;46223:23;;:::i;:::-;;;46283:10;:8;:10::i;:::-;46276:17;;:4;:17;:::i;:::-;46265:7;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;46312:23:0;:31;;46339:4;;46312:23;;;:31;;46339:4;;46312:31;:::i;:::-;;;;-1:-1:-1;;46189:170:0;46105:265;46073:297;46382:37;46397:6;46405:7;46414:4;46382:14;:37::i;:::-;46434:20;;46430:162;;46471:45;46483:9;46494:15;46511:4;46471:11;:45::i;:::-;46553:9;-1:-1:-1;;;;;46536:44:0;46545:6;-1:-1:-1;;;;;46536:44:0;-1:-1:-1;;;;;;;;;;;46564:15:0;46536:44;;;;1596:25:1;;1584:2;1569:18;;1450:177;46536:44:0;;;;;;;;46430:162;44320:2279;;44169:2430;;;;:::o;38586:598::-;38684:7;;38720;;38637;;;;;38738:332;38762:9;:16;38758:20;;38738:332;;;38846:7;38822;:21;38830:9;38840:1;38830:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38830:12:0;38822:21;;;;;;;;;;;;;:31;;:83;;;38898:7;38874;:21;38882:9;38892:1;38882:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38882:12:0;38874:21;;;;;;;;;;;;;:31;38822:83;38800:146;;;38929:7;;38938;;38921:25;;;;;;;38586:598;;:::o;38800:146::-;38981:7;:21;38989:9;38999:1;38989:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38989:12:0;38981:21;;;;;;;;;;;;;38971:31;;:7;:31;:::i;:::-;38961:41;;39037:7;:21;39045:9;39055:1;39045:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39045:12:0;39037:21;;;;;;;;;;;;;39027:31;;:7;:31;:::i;:::-;39017:41;-1:-1:-1;38780:3:0;;;;:::i;:::-;;;;38738:332;;;;39105:7;;39095;;:17;;;;:::i;:::-;39084:7;:29;39080:60;;;39123:7;;39132;;39115:25;;;;;;38586:598;;:::o;39080:60::-;39159:7;;39168;;-1:-1:-1;38586:598:0;-1:-1:-1;38586:598:0:o;41602:966::-;34044:16;:23;;-1:-1:-1;;;;34044:23:0;-1:-1:-1;;;34044:23:0;;;;41753:24:::1;41776:1;41753:20:::0;:24:::1;:::i;:::-;41738:39:::0;-1:-1:-1;41788:17:0::1;41808:27;41738:39:::0;41808:20;:27:::1;:::i;:::-;41788:47:::0;-1:-1:-1;42136:21:0::1;42202:22;42219:4:::0;42202:16:::1;:22::i;:::-;42355:18;42376:38;42400:14:::0;42376:21:::1;:38;:::i;:::-;42355:59;;42464:35;42477:9;42488:10;42464:12;:35::i;:::-;42517:43;::::0;;14554:25:1;;;14610:2;14595:18;;14588:34;;;14638:18;;;14631:34;;;42517:43:0::1;::::0;14542:2:1;14527:18;42517:43:0::1;;;;;;;-1:-1:-1::0;;34090:16:0;:24;;-1:-1:-1;;;;34090:24:0;;;-1:-1:-1;;;41602:966:0:o;47531:891::-;47621:9;;47749:15;;47698:119;;47725:4;;-1:-1:-1;;;;;47749:15:0;47621:9;47698:8;:119::i;:::-;47838:1;47826:9;:13;;;47916:16;;;47930:1;47916:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47916:16:0;47892:40;;47957:4;47939;47944:1;47939:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47939:23:0;;;:7;;;;;;;;;;:23;;;;48013:15;;:22;;;-1:-1:-1;;;48013:22:0;;;;:15;;;;;:20;;:22;;;;;47939:7;;48013:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48003:4;48008:1;48003:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48003:32:0;;;:7;;;;;;;;;:32;48124:15;;48303:10;;48105:249;;-1:-1:-1;;;48105:249:0;;48124:15;;;;48105:99;;:249;;48219:34;;48124:15;;48284:4;;48303:10;;;;48328:15;;48105:249;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48368:50;48383:34;48368:50;;;;1596:25:1;;1584:2;1569:18;;1450:177;48368:50:0;;;;;;;;47569:853;;47531:891::o;46614:911::-;46703:15;;46837;;46786:118;;46813:4;;-1:-1:-1;;;;;46837:15:0;46703;46786:8;:118::i;:::-;46931:1;46913:15;:19;;;47009:16;;;47023:1;47009:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47009:16:0;46985:40;;47050:4;47032;47037:1;47032:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47032:23:0;;;:7;;;;;;;;;;:23;;;;47106:15;;:22;;;-1:-1:-1;;;47106:22:0;;;;:15;;;;;:20;;:22;;;;;47032:7;;47106:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47096:4;47101:1;47096:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47096:32:0;;;:7;;;;;;;;;:32;47217:15;;47395:16;;47198:254;;-1:-1:-1;;;47198:254:0;;47217:15;;;;47198:99;;:254;;47312:33;;47217:15;;47376:4;;47395:16;;;;47426:15;;47198:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47466:55;47487:33;47466:55;;;;1596:25:1;;1584:2;1569:18;;1450:177;48718:279:0;-1:-1:-1;;;;;48847:20:0;;;;;;:11;:20;;;;;;;;48843:147;;;-1:-1:-1;;;;;48884:16:0;;;;;;:7;:16;;;;;:27;;48904:7;;48884:16;:27;;48904:7;;48884:27;:::i;:::-;;;;-1:-1:-1;48843:147:0;;-1:-1:-1;48843:147:0;;48964:14;48974:4;48964:7;:14;:::i;:::-;-1:-1:-1;;;;;48944:16:0;;;;;;:7;:16;;;;;:34;;:16;;;:34;;;;;:::i;:::-;;;;-1:-1:-1;;48718:279:0;;;:::o;48432:278::-;-1:-1:-1;;;;;48558:20:0;;;;;;:11;:20;;;;;;;;48554:149;;;-1:-1:-1;;;;;48595:16:0;;;;;;:7;:16;;;;;:27;;48615:7;;48595:16;:27;;48615:7;;48595:27;:::i;48554:149::-;48677:14;48687:4;48677:7;:14;:::i;:::-;-1:-1:-1;;;;;48657:16:0;;;;;;:7;:16;;;;;:34;;:16;;;:34;;;;;:::i;42576:589::-;42726:16;;;42740:1;42726:16;;;;;;;;42702:21;;42726:16;;;;;;;;;;-1:-1:-1;42726:16:0;42702:40;;42771:4;42753;42758:1;42753:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42753:23:0;;;:7;;;;;;;;;;:23;;;;42797:15;;:22;;;-1:-1:-1;;;42797:22:0;;;;:15;;;;;:20;;:22;;;;;42753:7;;42797:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42787:4;42792:1;42787:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42787:32:0;;;:7;;;;;;;;;:32;42864:15;;42832:62;;42849:4;;42864:15;42882:11;42832:8;:62::i;:::-;42933:15;;:224;;-1:-1:-1;;;42933:224:0;;-1:-1:-1;;;;;42933:15:0;;;;:66;;:224;;43014:11;;42933:15;;43084:4;;43111;;43131:15;;42933:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43173:513;43353:15;;43321:62;;43338:4;;-1:-1:-1;;;;;43353:15:0;43371:11;43321:8;:62::i;:::-;43426:15;;-1:-1:-1;;;;;43426:15:0;:31;43465:9;43498:4;43518:11;43426:15;;43630:7;1989:6;;-1:-1:-1;;;;;1989:6:0;;;;;;1916:87;43630:7;43426:252;;;;;;-1:-1:-1;;;;;;43426:252:0;;;-1:-1:-1;;;;;16408:15:1;;;43426:252:0;;;16390:34:1;16440:18;;;16433:34;;;;16483:18;;;16476:34;;;;16526:18;;;16519:34;16590:15;;;16569:19;;;16562:44;43652:15:0;16622:19:1;;;16615:35;16324:19;;43426:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43173:513;;:::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;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2093:180::-;2152:6;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;-1:-1:-1;2244:23:1;;2093:180;-1:-1:-1;2093:180:1:o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;3898:160::-;3963:20;;4019:13;;4012:21;4002:32;;3992:60;;4048:1;4045;4038:12;3992:60;3898:160;;;:::o;4063:180::-;4119:6;4172:2;4160:9;4151:7;4147:23;4143:32;4140:52;;;4188:1;4185;4178:12;4140:52;4211:26;4227:9;4211:26;:::i;4248:315::-;4313:6;4321;4374:2;4362:9;4353:7;4349:23;4345:32;4342:52;;;4390:1;4387;4380:12;4342:52;4429:9;4416:23;4448:31;4473:5;4448:31;:::i;:::-;4498:5;-1:-1:-1;4522:35:1;4553:2;4538:18;;4522:35;:::i;:::-;4512:45;;4248:315;;;;;:::o;4568:388::-;4636:6;4644;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4752:9;4739:23;4771:31;4796:5;4771:31;:::i;:::-;4821:5;-1:-1:-1;4878:2:1;4863:18;;4850:32;4891:33;4850:32;4891:33;:::i;:::-;4943:7;4933:17;;;4568:388;;;;;:::o;4961:380::-;5040:1;5036:12;;;;5083;;;5104:61;;5158:4;5150:6;5146:17;5136:27;;5104:61;5211:2;5203:6;5200:14;5180:18;5177:38;5174:161;;5257:10;5252:3;5248:20;5245:1;5238:31;5292:4;5289:1;5282:15;5320:4;5317:1;5310:15;5174:161;;4961:380;;;:::o;5757:127::-;5818:10;5813:3;5809:20;5806:1;5799:31;5849:4;5846:1;5839:15;5873:4;5870:1;5863:15;5889:217;5929:1;5955;5945:132;;5999:10;5994:3;5990:20;5987:1;5980:31;6034:4;6031:1;6024:15;6062:4;6059:1;6052:15;5945:132;-1:-1:-1;6091:9:1;;5889:217::o;6111:125::-;6176:9;;;6197:10;;;6194:36;;;6210:18;;:::i;7355:127::-;7416:10;7411:3;7407:20;7404:1;7397:31;7447:4;7444:1;7437:15;7471:4;7468:1;7461:15;7487:128;7554:9;;;7575:11;;;7572:37;;;7589:18;;:::i;7620:127::-;7681:10;7676:3;7672:20;7669:1;7662:31;7712:4;7709:1;7702:15;7736:4;7733:1;7726:15;7752:135;7791:3;7812:17;;;7809:43;;7832:18;;:::i;:::-;-1:-1:-1;7879:1:1;7868:13;;7752:135::o;12728:127::-;12789:10;12784:3;12780:20;12777:1;12770:31;12820:4;12817:1;12810:15;12844:4;12841:1;12834:15;12860:148;12948:4;12927:12;;;12941;;;12923:31;;12966:13;;12963:39;;;12982:18;;:::i;14179:168::-;14252:9;;;14283;;14300:15;;;14294:22;;14280:37;14270:71;;14321:18;;:::i;14808:251::-;14878:6;14931:2;14919:9;14910:7;14906:23;14902:32;14899:52;;;14947:1;14944;14937:12;14899:52;14979:9;14973:16;14998:31;15023:5;14998:31;:::i;15064:980::-;15326:4;15374:3;15363:9;15359:19;15405:6;15394:9;15387:25;15431:2;15469:6;15464:2;15453:9;15449:18;15442:34;15512:3;15507:2;15496:9;15492:18;15485:31;15536:6;15571;15565:13;15602:6;15594;15587:22;15640:3;15629:9;15625:19;15618:26;;15679:2;15671:6;15667:15;15653:29;;15700:1;15710:195;15724:6;15721:1;15718:13;15710:195;;;15789:13;;-1:-1:-1;;;;;15785:39:1;15773:52;;15880:15;;;;15845:12;;;;15821:1;15739:9;15710:195;;;-1:-1:-1;;;;;;;15961:32:1;;;;15956:2;15941:18;;15934:60;-1:-1:-1;;;16025:3:1;16010:19;16003:35;15922:3;15064:980;-1:-1:-1;;;15064:980:1:o;16661:306::-;16749:6;16757;16765;16818:2;16806:9;16797:7;16793:23;16789:32;16786:52;;;16834:1;16831;16824:12;16786:52;16863:9;16857:16;16847:26;;16913:2;16902:9;16898:18;16892:25;16882:35;;16957:2;16946:9;16942:18;16936:25;16926:35;;16661:306;;;;;:::o
Swarm Source
ipfs://d10a4a801efc4148691fe20c310b0269d83b0cd3121d7922d28f1ac7341ab30e
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.