HospoWise token contract has migrated to a new address.
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Hospo
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-03-25
*/
// SPDX-License-Identifier: MIT
// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol
/* solhint-disable */
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);
}
// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol
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;
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol
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;
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol
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;
}
// File: contracts/math/IterableMapping.sol
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
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 no longer needed starting with Solidity 0.8. 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 substraction 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;
}
}
}
// File: @openzeppelin/contracts/utils/Context.sol
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;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
/**
* @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() {
_setOwner(_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 {
_setOwner(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"
);
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount)
external
returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
pragma solidity ^0.8.0;
/**
* @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);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
pragma solidity ^0.8.0;
/**
* @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:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount)
public
virtual
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - 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)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][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)
{
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
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:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
if (amount > 0) {
emit Transfer(sender, recipient, amount);
}
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += 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 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.12;
contract Hospo is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
bool private swapping;
bool public isTradingEnabled;
bool public isAntiBotEnabled;
uint256 public tradingStartBlock;
uint256 private lastBlock;
uint8 public constant BLOCKCOUNT = 100;
struct BuyFee {
uint16 devFee;
uint16 liquidityFee;
}
struct SellFee {
uint16 devFee;
uint16 liquidityFee;
}
BuyFee public buyFee;
SellFee public sellFee;
uint16 private totalBuyFee;
uint16 private totalSellFee;
address private constant deadWallet = address(0xdead);
uint256 public swapTokensAtAmount = 2 * 10**8 * (10**18);
uint256 public maxTxAmount = 22 * 10**9 * 10**18;
uint256 public maxWalletAmount = 22 * 10**10 * 10**18;
uint256 public dailyCap = 20 ether;
mapping(address => uint256) private lastSoldTime;
mapping(address => uint256) public soldTokenin24Hrs;
address payable public _devWallet = payable(address(0xb4eCfD43b81d13F9E511Ee0FfD2D8a6BDFe76EEf));
mapping(address => bool) public _isBlackListed;
// exlcude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping(address => bool) public automatedMarketMakerPairs;
event UpdateDividendTracker(
address indexed newAddress,
address indexed oldAddress
);
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event ExcludeFromFees(address indexed account, bool isExcluded);
event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
constructor() ERC20("HospoWise", "HOSPO") {
sellFee.devFee = 35;
sellFee.liquidityFee = 10;
totalSellFee = 45;
buyFee.devFee = 35;
buyFee.liquidityFee = 10;
totalBuyFee = 45;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
// Create a uniswap pair for this new token
address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = _uniswapV2Pair;
_setAutomatedMarketMakerPair(_uniswapV2Pair, true);
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(_devWallet, true);
excludeFromFees(address(this), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(owner(), 22_000_000_000_001 * (10**18)); //22,000,000,000,001 tokens
}
receive() external payable {}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function setAntibot(bool value) external onlyOwner {
isAntiBotEnabled = value;
}
function burn(address account, uint256 amount) public {
_burn(account, amount);
}
function updateRouter(address newAddress) external onlyOwner {
require(
newAddress != address(uniswapV2Router),
"Hospo: The router already has that address"
);
uniswapV2Router = IUniswapV2Router02(newAddress);
address get_pair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(
address(this),
uniswapV2Router.WETH()
);
if (get_pair == address(0)) {
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
.createPair(address(this), uniswapV2Router.WETH());
} else {
uniswapV2Pair = get_pair;
}
}
function claimStuckTokens(address _token) external onlyOwner {
if (_token == address(0x0)) {
payable(owner()).transfer(address(this).balance);
return;
}
IERC20 erc20token = IERC20(_token);
uint256 balance = erc20token.balanceOf(address(this));
erc20token.transfer(owner(), balance);
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
require(
_isExcludedFromFees[account] != excluded,
"Hospo: Account is already excluded"
);
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function excludeMultipleAccountsFromFees(
address[] calldata accounts,
bool excluded
) public onlyOwner {
for (uint256 i = 0; i < accounts.length; i++) {
_isExcludedFromFees[accounts[i]] = excluded;
}
emit ExcludeMultipleAccountsFromFees(accounts, excluded);
}
function setDevWallet(address payable wallet) external onlyOwner {
require(wallet != address(0), "dev wallet address can't be zero");
_devWallet = wallet;
}
function setSwapAtAmount(uint256 value) external onlyOwner {
require(value > 2000000, "should be greator than 2 million tokens");
swapTokensAtAmount = value * 10**18;
}
function setMaxWallet(uint256 value) external onlyOwner {
require(
value > 2200000001,
" amount should be greator than 0.01% of the supply"
);
maxWalletAmount = value * 10**18;
}
function setMaxTx(uint256 value) external onlyOwner {
require(
value > 2200000001,
" amount should be greator than 0.01% of the supply"
);
maxTxAmount = value * 10**18;
}
function setBlackList(address addr, bool value) external onlyOwner {
_isBlackListed[addr] = value;
}
function setDailyCap(uint256 value) external onlyOwner {
require (value > 10, "cap should more than 10 ether");
dailyCap = value * 10**18;
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
require(
pair != uniswapV2Pair,
"Hospo: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"
);
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
require(
automatedMarketMakerPairs[pair] != value,
"Hospo: Automated market maker pair is already set to that value"
);
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
// call this function before starting presale
function prepareForPresale(address presaleAddress) external onlyOwner {
buyFee.devFee = 0;
buyFee.liquidityFee = 0;
sellFee.devFee = 0;
sellFee.liquidityFee = 0;
_isExcludedFromFees[presaleAddress] = true;
}
// call this function once liquiidity is added
function startTrading() external onlyOwner {
buyFee.devFee = 35;
buyFee.liquidityFee = 10;
sellFee.devFee = 35;
sellFee.liquidityFee = 10;
isTradingEnabled = true;
tradingStartBlock = block.number;
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(
!_isBlackListed[from] && !_isBlackListed[to],
"Account is blacklisted"
);
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
!swapping &&
!automatedMarketMakerPairs[from] &&
from != owner() &&
to != owner()
) {
swapping = true;
contractTokenBalance = swapTokensAtAmount;
uint256 swapTokens = contractTokenBalance
.mul(sellFee.liquidityFee)
.div(totalBuyFee + totalSellFee);
if (swapTokens > 0) {
swapAndLiquify(swapTokens);
}
uint256 feeTokens = contractTokenBalance - swapTokens;
if (feeTokens > 0) {
super._transfer(address(this), _devWallet, feeTokens);
}
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
if (takeFee) {
require(amount <= maxTxAmount, "Amount exceeds limit");
if (isAntiBotEnabled) {
require(block.number > lastBlock, "One transfer per block");
lastBlock = block.number;
}
if (!automatedMarketMakerPairs[to]) {
require(
balanceOf(to) + amount <= maxWalletAmount,
"Balance exceeds limit"
);
}
uint256 fees;
if (automatedMarketMakerPairs[to]) {
require(isTradingEnabled, "Trading not enabled yet");
fees = totalSellFee;
if (block.timestamp - lastSoldTime[from] > 1 days) {
lastSoldTime[from] = block.timestamp;
soldTokenin24Hrs[from] = 0;
}
uint256 ethAmount = getPriceOfToken(amount);
require(
soldTokenin24Hrs[from] + ethAmount < dailyCap,
"Token amount exceeds daily sell limit"
);
soldTokenin24Hrs[from] = soldTokenin24Hrs[from].add(ethAmount);
} else if (automatedMarketMakerPairs[from]) {
if (block.number < tradingStartBlock + BLOCKCOUNT) {
_isBlackListed[to] = true;
}
fees = totalBuyFee;
}
uint256 feeAmount = amount.mul(fees).div(1000);
amount = amount.sub(feeAmount);
super._transfer(from, address(this), feeAmount);
}
super._transfer(from, to, amount);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(0xdead),
block.timestamp
);
}
function swapAndLiquify(uint256 tokens) private {
// split the contract balance into halves
uint256 half = tokens.div(2);
uint256 otherHalf = tokens.sub(half);
uint256 initialBalance = address(this).balance;
// swap tokens for ETH
swapTokensForETH(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
// how much ETH did we just swap into?
uint256 newBalance = address(this).balance.sub(initialBalance);
// add liquidity to uniswap
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
}
function swapTokensForETH(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function getPriceOfToken(uint256 amount)
public
view
returns (uint256 price)
{
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
price = (uniswapV2Router.getAmountsOut(amount, path))[path.length - 1];
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"BLOCKCOUNT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPriceOfToken","outputs":[{"internalType":"uint256","name":"price","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":[],"name":"isAntiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"prepareForPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAntibot","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":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDailyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"soldTokenin24Hrs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526aa56fa5b99019a5c8000000600d556b4715f935bbeb053bf0000000600e556c02c6dbbc19572e345760000000600f556801158e460913d00000601055601380546001600160a01b03191673b4ecfd43b81d13f9e511ee0ffd2d8a6bdfe76eef1790553480156200007457600080fd5b506040805180820182526009815268486f73706f5769736560b81b602080830191825283518085019094526005845264484f53504f60d81b908401528151919291620000c391600391620006a3565b508051620000d9906004906020840190620006a3565b505050620000f6620000f06200034260201b60201c565b62000346565b600b805463ffffffff19908116620a0023908117909255600c8054600a805484169094179093559116622d002d1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa1580156200017c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a2919062000749565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000216919062000749565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028a919062000749565b600680546001600160a01b038086166001600160a01b03199283161790925560078054928416929091169190911790559050620002c981600162000398565b620002e8620002e06005546001600160a01b031690565b600162000487565b60135462000301906001600160a01b0316600162000487565b6200030e30600162000487565b6200033a620003256005546001600160a01b031690565b6d0115add579e61bed28d527640000620005be565b5050620007df565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526016602052604090205460ff1615158115151415620004335760405162461bcd60e51b815260206004820152603f60248201527f486f73706f3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084015b60405180910390fd5b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620004e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200042a565b6001600160a01b03821660009081526015602052604090205460ff16151581151514156200055f5760405162461bcd60e51b815260206004820152602260248201527f486f73706f3a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016200042a565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006165760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200042a565b80600260008282546200062a91906200077b565b90915550506001600160a01b03821660009081526020819052604081208054839290620006599084906200077b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006b190620007a2565b90600052602060002090601f016020900481019282620006d5576000855562000720565b82601f10620006f057805160ff191683800117855562000720565b8280016001018555821562000720579182015b828111156200072057825182559160200191906001019062000703565b506200072e92915062000732565b5090565b5b808211156200072e576000815560010162000733565b6000602082840312156200075c57600080fd5b81516001600160a01b03811681146200077457600080fd5b9392505050565b600082198211156200079d57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620007b757607f821691505b60208210811415620007d957634e487b7160e01b600052602260045260246000fd5b50919050565b612e1680620007ef6000396000f3fe60806040526004361061028c5760003560e01c8063715018a61161015a578063c492f046116100c1578063e2f456051161007a578063e2f456051461083a578063e71804cd14610850578063eb33939114610870578063eb935a5314610886578063f2fde38b146108b3578063f9d0831a146108d357600080fd5b8063c492f0461461075e578063c520ac281461077e578063c851cc321461079e578063d798cbd2146107be578063dcd6a95d146107d4578063dd62ed3e146107f457600080fd5b8063a457c2d711610113578063a457c2d714610698578063a9059cbb146106b8578063aa4bde28146106d8578063b62496f5146106ee578063bc3371821461071e578063c02466681461073e57600080fd5b8063715018a6146105fa5780638c0b5e221461060f5780638da5cb5b1461062557806395d89b41146106435780639a7a23d6146106585780639dc29fac1461067857600080fd5b8063313ce567116101fe5780635d0044ca116101b75780635d0044ca1461051357806361d371dd146105335780636402511e1461055457806368092bd9146105745780636c9bb93b1461059457806370a08231146105c457600080fd5b8063313ce5671461043e5780633950935114610460578063470624021461048057806349bd5a5e146104a55780634dce97f1146104c55780634fbee193146104da57600080fd5b80631694505e116102505780631694505e1461036a57806318160ddd1461038a5780631f53ac02146103a957806323b872dd146103c9578063293230b8146103e95780632b14ca56146103fe57600080fd5b8063064a59d01461029857806306fdde03146102ce5780630840a44a146102f0578063095ea7b31461031257806311a63e171461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506007546102b990600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108f3565b6040516102c59190612788565b3480156102fc57600080fd5b5061031061030b3660046127dd565b610985565b005b34801561031e57600080fd5b506102b961032d36600461280b565b610a20565b34801561033e57600080fd5b50601354610352906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b34801561037657600080fd5b50600654610352906001600160a01b031681565b34801561039657600080fd5b506002545b6040519081526020016102c5565b3480156103b557600080fd5b506103106103c4366004612837565b610a36565b3480156103d557600080fd5b506102b96103e4366004612854565b610ad8565b3480156103f557600080fd5b50610310610b82565b34801561040a57600080fd5b50600b546104239061ffff808216916201000090041682565b6040805161ffff9384168152929091166020830152016102c5565b34801561044a57600080fd5b5060125b60405160ff90911681526020016102c5565b34801561046c57600080fd5b506102b961047b36600461280b565b610be7565b34801561048c57600080fd5b50600a546104239061ffff808216916201000090041682565b3480156104b157600080fd5b50600754610352906001600160a01b031681565b3480156104d157600080fd5b5061044e606481565b3480156104e657600080fd5b506102b96104f5366004612837565b6001600160a01b031660009081526015602052604090205460ff1690565b34801561051f57600080fd5b5061031061052e3660046127dd565b610c23565b34801561053f57600080fd5b506007546102b990600160b01b900460ff1681565b34801561056057600080fd5b5061031061056f3660046127dd565b610c88565b34801561058057600080fd5b5061031061058f3660046128a3565b610d2c565b3480156105a057600080fd5b506102b96105af366004612837565b60146020526000908152604090205460ff1681565b3480156105d057600080fd5b5061039b6105df366004612837565b6001600160a01b031660009081526020819052604090205490565b34801561060657600080fd5b50610310610d81565b34801561061b57600080fd5b5061039b600e5481565b34801561063157600080fd5b506005546001600160a01b0316610352565b34801561064f57600080fd5b506102e3610db7565b34801561066457600080fd5b506103106106733660046128a3565b610dc6565b34801561068457600080fd5b5061031061069336600461280b565b610e97565b3480156106a457600080fd5b506102b96106b336600461280b565b610ea1565b3480156106c457600080fd5b506102b96106d336600461280b565b610f3a565b3480156106e457600080fd5b5061039b600f5481565b3480156106fa57600080fd5b506102b9610709366004612837565b60166020526000908152604090205460ff1681565b34801561072a57600080fd5b506103106107393660046127dd565b610f47565b34801561074a57600080fd5b506103106107593660046128a3565b610fac565b34801561076a57600080fd5b506103106107793660046128dc565b6110af565b34801561078a57600080fd5b50610310610799366004612837565b61118b565b3480156107aa57600080fd5b506103106107b9366004612837565b6111f2565b3480156107ca57600080fd5b5061039b60085481565b3480156107e057600080fd5b5061039b6107ef3660046127dd565b6115c5565b34801561080057600080fd5b5061039b61080f366004612962565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561084657600080fd5b5061039b600d5481565b34801561085c57600080fd5b5061031061086b366004612990565b611740565b34801561087c57600080fd5b5061039b60105481565b34801561089257600080fd5b5061039b6108a1366004612837565b60126020526000908152604090205481565b3480156108bf57600080fd5b506103106108ce366004612837565b611788565b3480156108df57600080fd5b506103106108ee366004612837565b611823565b606060038054610902906129ad565b80601f016020809104026020016040519081016040528092919081815260200182805461092e906129ad565b801561097b5780601f106109505761010080835404028352916020019161097b565b820191906000526020600020905b81548152906001019060200180831161095e57829003601f168201915b5050505050905090565b6005546001600160a01b031633146109b85760405162461bcd60e51b81526004016109af906129e8565b60405180910390fd5b600a8111610a085760405162461bcd60e51b815260206004820152601d60248201527f6361702073686f756c64206d6f7265207468616e20313020657468657200000060448201526064016109af565b610a1a81670de0b6b3a7640000612a33565b60105550565b6000610a2d33848461199b565b50600192915050565b6005546001600160a01b03163314610a605760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b038116610ab65760405162461bcd60e51b815260206004820181905260248201527f6465762077616c6c657420616464726573732063616e2774206265207a65726f60448201526064016109af565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ae5848484611abf565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b6a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109af565b610b77853385840361199b565b506001949350505050565b6005546001600160a01b03163314610bac5760405162461bcd60e51b81526004016109af906129e8565b600a8054620a002363ffffffff199182168117909255600b805490911690911790556007805460ff60a81b1916600160a81b17905543600855565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2d918590610c1e908690612a52565b61199b565b6005546001600160a01b03163314610c4d5760405162461bcd60e51b81526004016109af906129e8565b63832156018111610c705760405162461bcd60e51b81526004016109af90612a6a565b610c8281670de0b6b3a7640000612a33565b600f5550565b6005546001600160a01b03163314610cb25760405162461bcd60e51b81526004016109af906129e8565b621e84808111610d145760405162461bcd60e51b815260206004820152602760248201527f73686f756c642062652067726561746f72207468616e2032206d696c6c696f6e60448201526620746f6b656e7360c81b60648201526084016109af565b610d2681670de0b6b3a7640000612a33565b600d5550565b6005546001600160a01b03163314610d565760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dab5760405162461bcd60e51b81526004016109af906129e8565b610db560006120a8565b565b606060048054610902906129ad565b6005546001600160a01b03163314610df05760405162461bcd60e51b81526004016109af906129e8565b6007546001600160a01b0383811691161415610e895760405162461bcd60e51b815260206004820152604c60248201527f486f73706f3a205468652050616e63616b655377617020706169722063616e6e60448201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60648201526b65744d616b6572506169727360a01b608482015260a4016109af565b610e9382826120fa565b5050565b610e9382826121e3565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109af565b610f30338585840361199b565b5060019392505050565b6000610a2d338484611abf565b6005546001600160a01b03163314610f715760405162461bcd60e51b81526004016109af906129e8565b63832156018111610f945760405162461bcd60e51b81526004016109af90612a6a565b610fa681670de0b6b3a7640000612a33565b600e5550565b6005546001600160a01b03163314610fd65760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b03821660009081526015602052604090205460ff16151581151514156110505760405162461bcd60e51b815260206004820152602260248201527f486f73706f3a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016109af565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110d95760405162461bcd60e51b81526004016109af906129e8565b60005b8281101561114a5781601560008686858181106110fb576110fb612abc565b90506020020160208101906111109190612837565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061114281612ad2565b9150506110dc565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161117e93929190612aed565b60405180910390a1505050565b6005546001600160a01b031633146111b55760405162461bcd60e51b81526004016109af906129e8565b600a805463ffffffff19908116909155600b805490911690556001600160a01b03166000908152601560205260409020805460ff19166001179055565b6005546001600160a01b0316331461121c5760405162461bcd60e51b81526004016109af906129e8565b6006546001600160a01b038281169116141561128d5760405162461bcd60e51b815260206004820152602a60248201527f486f73706f3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b60648201526084016109af565b600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d9190612b46565b6001600160a01b031663e6a4390530600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190612b46565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156113de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114029190612b46565b90506001600160a01b0381166115a457600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114899190612b46565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190612b46565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190612b46565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b600780546001600160a01b0383166001600160a01b03199091161790555050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106115fe576115fe612abc565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b9190612b46565b8160018151811061168e5761168e612abc565b6001600160a01b03928316602091820292909201015260065460405163d06ca61f60e01b815291169063d06ca61f906116cd9086908590600401612bbd565b600060405180830381865afa1580156116ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117129190810190612bde565b600182516117209190612c9c565b8151811061173057611730612abc565b6020026020010151915050919050565b6005546001600160a01b0316331461176a5760405162461bcd60e51b81526004016109af906129e8565b60078054911515600160b01b0260ff60b01b19909216919091179055565b6005546001600160a01b031633146117b25760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b0381166118175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109af565b611820816120a8565b50565b6005546001600160a01b0316331461184d5760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b038116611894576005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e93573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119019190612cb3565b9050816001600160a01b031663a9059cbb6119246005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190612ccc565b50505050565b6001600160a01b0383166119fd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109af565b6001600160a01b038216611a5e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109af565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ae55760405162461bcd60e51b81526004016109af90612ce9565b6001600160a01b03831660009081526014602052604090205460ff16158015611b2757506001600160a01b03821660009081526014602052604090205460ff16155b611b6c5760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d081a5cc8189b1858dadb1a5cdd195960521b60448201526064016109af565b80611b8257611b7d83836000612331565b505050565b30600090815260208190526040902054600d5481108015908190611bb05750600754600160a01b900460ff16155b8015611bd557506001600160a01b03851660009081526016602052604090205460ff16155b8015611bef57506005546001600160a01b03868116911614155b8015611c0957506005546001600160a01b03858116911614155b15611cb7576007805460ff60a01b1916600160a01b179055600d54600c54909250600090611c6a90611c479061ffff62010000820481169116612d2e565b600b5461ffff91821691611c6491879162010000909104166124c6565b906124d9565b90508015611c7b57611c7b816124e5565b6000611c878285612c9c565b90508015611ca757601354611ca79030906001600160a01b031683612331565b50506007805460ff60a01b191690555b6007546001600160a01b03861660009081526015602052604090205460ff600160a01b909204821615911680611d0557506001600160a01b03851660009081526015602052604090205460ff165b15611d0e575060005b801561209557600e54841115611d5d5760405162461bcd60e51b8152602060048201526014602482015273105b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b60448201526064016109af565b600754600160b01b900460ff1615611dbe576009544311611db95760405162461bcd60e51b81526020600482015260166024820152754f6e65207472616e736665722070657220626c6f636b60501b60448201526064016109af565b436009555b6001600160a01b03851660009081526016602052604090205460ff16611e5157600f5484611e01876001600160a01b031660009081526020819052604090205490565b611e0b9190612a52565b1115611e515760405162461bcd60e51b815260206004820152601560248201527410985b185b98d948195e18d959591cc81b1a5b5a5d605a1b60448201526064016109af565b6001600160a01b03851660009081526016602052604081205460ff161561200357600754600160a81b900460ff16611ecb5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c65642079657400000000000000000060448201526064016109af565b50600c546001600160a01b0387166000908152601160205260409020546201000090910461ffff16906201518090611f039042612c9c565b1115611f30576001600160a01b038716600090815260116020908152604080832042905560129091528120555b6000611f3b866115c5565b6010546001600160a01b038a1660009081526012602052604090205491925090611f66908390612a52565b10611fc15760405162461bcd60e51b815260206004820152602560248201527f546f6b656e20616d6f756e742065786365656473206461696c792073656c6c206044820152641b1a5b5a5d60da1b60648201526084016109af565b6001600160a01b038816600090815260126020526040902054611fe4908261256c565b6001600160a01b03891660009081526012602052604090205550612067565b6001600160a01b03871660009081526016602052604090205460ff16156120675760085461203390606490612a52565b43101561205e576001600160a01b0386166000908152601460205260409020805460ff191660011790555b50600c5461ffff165b60006120796103e8611c6488856124c6565b90506120858682612578565b9550612092883083612331565b50505b6120a0868686612331565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526016602052604090205460ff161515811515141561218f5760405162461bcd60e51b815260206004820152603f60248201527f486f73706f3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084016109af565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166122435760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109af565b6001600160a01b038216600090815260208190526040902054818110156122b75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109af565b6001600160a01b03831660009081526020819052604081208383039055600280548492906122e6908490612c9c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b0383166123575760405162461bcd60e51b81526004016109af90612ce9565b6001600160a01b0382166123b95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109af565b6001600160a01b038316600090815260208190526040902054818110156124315760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109af565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612468908490612a52565b909155505081156124c157826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124b891815260200190565b60405180910390a35b611995565b60006124d28284612a33565b9392505050565b60006124d28284612d54565b60006124f28260026124d9565b905060006125008383612578565b90504761250c83612584565b60006125184783612578565b905061252483826126d6565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b60006124d28284612a52565b60006124d28284612c9c565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125b9576125b9612abc565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126369190612b46565b8160018151811061264957612649612abc565b6001600160a01b03928316602091820292909201015260065461266f913091168461199b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126a8908590600090869030904290600401612d76565b600060405180830381600087803b1580156126c257600080fd5b505af11580156120a0573d6000803e3d6000fd5b6006546126ee9030906001600160a01b03168461199b565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561275c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127819190612db2565b5050505050565b600060208083528351808285015260005b818110156127b557858101830151858201604001528201612799565b818111156127c7576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156127ef57600080fd5b5035919050565b6001600160a01b038116811461182057600080fd5b6000806040838503121561281e57600080fd5b8235612829816127f6565b946020939093013593505050565b60006020828403121561284957600080fd5b81356124d2816127f6565b60008060006060848603121561286957600080fd5b8335612874816127f6565b92506020840135612884816127f6565b929592945050506040919091013590565b801515811461182057600080fd5b600080604083850312156128b657600080fd5b82356128c1816127f6565b915060208301356128d181612895565b809150509250929050565b6000806000604084860312156128f157600080fd5b833567ffffffffffffffff8082111561290957600080fd5b818601915086601f83011261291d57600080fd5b81358181111561292c57600080fd5b8760208260051b850101111561294157600080fd5b6020928301955093505084013561295781612895565b809150509250925092565b6000806040838503121561297557600080fd5b8235612980816127f6565b915060208301356128d1816127f6565b6000602082840312156129a257600080fd5b81356124d281612895565b600181811c908216806129c157607f821691505b602082108114156129e257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612a4d57612a4d612a1d565b500290565b60008219821115612a6557612a65612a1d565b500190565b60208082526032908201527f20616d6f756e742073686f756c642062652067726561746f72207468616e20306040820152712e303125206f662074686520737570706c7960701b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ae657612ae6612a1d565b5060010190565b6040808252810183905260008460608301825b86811015612b30578235612b13816127f6565b6001600160a01b0316825260209283019290910190600101612b00565b5080925050508215156020830152949350505050565b600060208284031215612b5857600080fd5b81516124d2816127f6565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b83811015612bb25781516001600160a01b031687529582019590820190600101612b8d565b509495945050505050565b828152604060208201526000612bd66040830184612b79565b949350505050565b60006020808385031215612bf157600080fd5b825167ffffffffffffffff80821115612c0957600080fd5b818501915085601f830112612c1d57600080fd5b815181811115612c2f57612c2f612b63565b8060051b604051601f19603f83011681018181108582111715612c5457612c54612b63565b604052918252848201925083810185019188831115612c7257600080fd5b938501935b82851015612c9057845184529385019392850192612c77565b98975050505050505050565b600082821015612cae57612cae612a1d565b500390565b600060208284031215612cc557600080fd5b5051919050565b600060208284031215612cde57600080fd5b81516124d281612895565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600061ffff808316818516808303821115612d4b57612d4b612a1d565b01949350505050565b600082612d7157634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000612d9560a0830186612b79565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612dc757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212207ad5b06dfa1aad72d9bb97c6e8b43211b4e92355854da0fa38e86d639f3f8f0564736f6c634300080c0033
Deployed Bytecode
0x60806040526004361061028c5760003560e01c8063715018a61161015a578063c492f046116100c1578063e2f456051161007a578063e2f456051461083a578063e71804cd14610850578063eb33939114610870578063eb935a5314610886578063f2fde38b146108b3578063f9d0831a146108d357600080fd5b8063c492f0461461075e578063c520ac281461077e578063c851cc321461079e578063d798cbd2146107be578063dcd6a95d146107d4578063dd62ed3e146107f457600080fd5b8063a457c2d711610113578063a457c2d714610698578063a9059cbb146106b8578063aa4bde28146106d8578063b62496f5146106ee578063bc3371821461071e578063c02466681461073e57600080fd5b8063715018a6146105fa5780638c0b5e221461060f5780638da5cb5b1461062557806395d89b41146106435780639a7a23d6146106585780639dc29fac1461067857600080fd5b8063313ce567116101fe5780635d0044ca116101b75780635d0044ca1461051357806361d371dd146105335780636402511e1461055457806368092bd9146105745780636c9bb93b1461059457806370a08231146105c457600080fd5b8063313ce5671461043e5780633950935114610460578063470624021461048057806349bd5a5e146104a55780634dce97f1146104c55780634fbee193146104da57600080fd5b80631694505e116102505780631694505e1461036a57806318160ddd1461038a5780631f53ac02146103a957806323b872dd146103c9578063293230b8146103e95780632b14ca56146103fe57600080fd5b8063064a59d01461029857806306fdde03146102ce5780630840a44a146102f0578063095ea7b31461031257806311a63e171461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506007546102b990600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108f3565b6040516102c59190612788565b3480156102fc57600080fd5b5061031061030b3660046127dd565b610985565b005b34801561031e57600080fd5b506102b961032d36600461280b565b610a20565b34801561033e57600080fd5b50601354610352906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b34801561037657600080fd5b50600654610352906001600160a01b031681565b34801561039657600080fd5b506002545b6040519081526020016102c5565b3480156103b557600080fd5b506103106103c4366004612837565b610a36565b3480156103d557600080fd5b506102b96103e4366004612854565b610ad8565b3480156103f557600080fd5b50610310610b82565b34801561040a57600080fd5b50600b546104239061ffff808216916201000090041682565b6040805161ffff9384168152929091166020830152016102c5565b34801561044a57600080fd5b5060125b60405160ff90911681526020016102c5565b34801561046c57600080fd5b506102b961047b36600461280b565b610be7565b34801561048c57600080fd5b50600a546104239061ffff808216916201000090041682565b3480156104b157600080fd5b50600754610352906001600160a01b031681565b3480156104d157600080fd5b5061044e606481565b3480156104e657600080fd5b506102b96104f5366004612837565b6001600160a01b031660009081526015602052604090205460ff1690565b34801561051f57600080fd5b5061031061052e3660046127dd565b610c23565b34801561053f57600080fd5b506007546102b990600160b01b900460ff1681565b34801561056057600080fd5b5061031061056f3660046127dd565b610c88565b34801561058057600080fd5b5061031061058f3660046128a3565b610d2c565b3480156105a057600080fd5b506102b96105af366004612837565b60146020526000908152604090205460ff1681565b3480156105d057600080fd5b5061039b6105df366004612837565b6001600160a01b031660009081526020819052604090205490565b34801561060657600080fd5b50610310610d81565b34801561061b57600080fd5b5061039b600e5481565b34801561063157600080fd5b506005546001600160a01b0316610352565b34801561064f57600080fd5b506102e3610db7565b34801561066457600080fd5b506103106106733660046128a3565b610dc6565b34801561068457600080fd5b5061031061069336600461280b565b610e97565b3480156106a457600080fd5b506102b96106b336600461280b565b610ea1565b3480156106c457600080fd5b506102b96106d336600461280b565b610f3a565b3480156106e457600080fd5b5061039b600f5481565b3480156106fa57600080fd5b506102b9610709366004612837565b60166020526000908152604090205460ff1681565b34801561072a57600080fd5b506103106107393660046127dd565b610f47565b34801561074a57600080fd5b506103106107593660046128a3565b610fac565b34801561076a57600080fd5b506103106107793660046128dc565b6110af565b34801561078a57600080fd5b50610310610799366004612837565b61118b565b3480156107aa57600080fd5b506103106107b9366004612837565b6111f2565b3480156107ca57600080fd5b5061039b60085481565b3480156107e057600080fd5b5061039b6107ef3660046127dd565b6115c5565b34801561080057600080fd5b5061039b61080f366004612962565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561084657600080fd5b5061039b600d5481565b34801561085c57600080fd5b5061031061086b366004612990565b611740565b34801561087c57600080fd5b5061039b60105481565b34801561089257600080fd5b5061039b6108a1366004612837565b60126020526000908152604090205481565b3480156108bf57600080fd5b506103106108ce366004612837565b611788565b3480156108df57600080fd5b506103106108ee366004612837565b611823565b606060038054610902906129ad565b80601f016020809104026020016040519081016040528092919081815260200182805461092e906129ad565b801561097b5780601f106109505761010080835404028352916020019161097b565b820191906000526020600020905b81548152906001019060200180831161095e57829003601f168201915b5050505050905090565b6005546001600160a01b031633146109b85760405162461bcd60e51b81526004016109af906129e8565b60405180910390fd5b600a8111610a085760405162461bcd60e51b815260206004820152601d60248201527f6361702073686f756c64206d6f7265207468616e20313020657468657200000060448201526064016109af565b610a1a81670de0b6b3a7640000612a33565b60105550565b6000610a2d33848461199b565b50600192915050565b6005546001600160a01b03163314610a605760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b038116610ab65760405162461bcd60e51b815260206004820181905260248201527f6465762077616c6c657420616464726573732063616e2774206265207a65726f60448201526064016109af565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ae5848484611abf565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b6a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109af565b610b77853385840361199b565b506001949350505050565b6005546001600160a01b03163314610bac5760405162461bcd60e51b81526004016109af906129e8565b600a8054620a002363ffffffff199182168117909255600b805490911690911790556007805460ff60a81b1916600160a81b17905543600855565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2d918590610c1e908690612a52565b61199b565b6005546001600160a01b03163314610c4d5760405162461bcd60e51b81526004016109af906129e8565b63832156018111610c705760405162461bcd60e51b81526004016109af90612a6a565b610c8281670de0b6b3a7640000612a33565b600f5550565b6005546001600160a01b03163314610cb25760405162461bcd60e51b81526004016109af906129e8565b621e84808111610d145760405162461bcd60e51b815260206004820152602760248201527f73686f756c642062652067726561746f72207468616e2032206d696c6c696f6e60448201526620746f6b656e7360c81b60648201526084016109af565b610d2681670de0b6b3a7640000612a33565b600d5550565b6005546001600160a01b03163314610d565760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dab5760405162461bcd60e51b81526004016109af906129e8565b610db560006120a8565b565b606060048054610902906129ad565b6005546001600160a01b03163314610df05760405162461bcd60e51b81526004016109af906129e8565b6007546001600160a01b0383811691161415610e895760405162461bcd60e51b815260206004820152604c60248201527f486f73706f3a205468652050616e63616b655377617020706169722063616e6e60448201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60648201526b65744d616b6572506169727360a01b608482015260a4016109af565b610e9382826120fa565b5050565b610e9382826121e3565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109af565b610f30338585840361199b565b5060019392505050565b6000610a2d338484611abf565b6005546001600160a01b03163314610f715760405162461bcd60e51b81526004016109af906129e8565b63832156018111610f945760405162461bcd60e51b81526004016109af90612a6a565b610fa681670de0b6b3a7640000612a33565b600e5550565b6005546001600160a01b03163314610fd65760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b03821660009081526015602052604090205460ff16151581151514156110505760405162461bcd60e51b815260206004820152602260248201527f486f73706f3a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016109af565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110d95760405162461bcd60e51b81526004016109af906129e8565b60005b8281101561114a5781601560008686858181106110fb576110fb612abc565b90506020020160208101906111109190612837565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061114281612ad2565b9150506110dc565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161117e93929190612aed565b60405180910390a1505050565b6005546001600160a01b031633146111b55760405162461bcd60e51b81526004016109af906129e8565b600a805463ffffffff19908116909155600b805490911690556001600160a01b03166000908152601560205260409020805460ff19166001179055565b6005546001600160a01b0316331461121c5760405162461bcd60e51b81526004016109af906129e8565b6006546001600160a01b038281169116141561128d5760405162461bcd60e51b815260206004820152602a60248201527f486f73706f3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b60648201526084016109af565b600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d9190612b46565b6001600160a01b031663e6a4390530600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190612b46565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156113de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114029190612b46565b90506001600160a01b0381166115a457600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114899190612b46565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190612b46565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190612b46565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b600780546001600160a01b0383166001600160a01b03199091161790555050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106115fe576115fe612abc565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b9190612b46565b8160018151811061168e5761168e612abc565b6001600160a01b03928316602091820292909201015260065460405163d06ca61f60e01b815291169063d06ca61f906116cd9086908590600401612bbd565b600060405180830381865afa1580156116ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117129190810190612bde565b600182516117209190612c9c565b8151811061173057611730612abc565b6020026020010151915050919050565b6005546001600160a01b0316331461176a5760405162461bcd60e51b81526004016109af906129e8565b60078054911515600160b01b0260ff60b01b19909216919091179055565b6005546001600160a01b031633146117b25760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b0381166118175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109af565b611820816120a8565b50565b6005546001600160a01b0316331461184d5760405162461bcd60e51b81526004016109af906129e8565b6001600160a01b038116611894576005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e93573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119019190612cb3565b9050816001600160a01b031663a9059cbb6119246005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190612ccc565b50505050565b6001600160a01b0383166119fd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109af565b6001600160a01b038216611a5e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109af565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ae55760405162461bcd60e51b81526004016109af90612ce9565b6001600160a01b03831660009081526014602052604090205460ff16158015611b2757506001600160a01b03821660009081526014602052604090205460ff16155b611b6c5760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d081a5cc8189b1858dadb1a5cdd195960521b60448201526064016109af565b80611b8257611b7d83836000612331565b505050565b30600090815260208190526040902054600d5481108015908190611bb05750600754600160a01b900460ff16155b8015611bd557506001600160a01b03851660009081526016602052604090205460ff16155b8015611bef57506005546001600160a01b03868116911614155b8015611c0957506005546001600160a01b03858116911614155b15611cb7576007805460ff60a01b1916600160a01b179055600d54600c54909250600090611c6a90611c479061ffff62010000820481169116612d2e565b600b5461ffff91821691611c6491879162010000909104166124c6565b906124d9565b90508015611c7b57611c7b816124e5565b6000611c878285612c9c565b90508015611ca757601354611ca79030906001600160a01b031683612331565b50506007805460ff60a01b191690555b6007546001600160a01b03861660009081526015602052604090205460ff600160a01b909204821615911680611d0557506001600160a01b03851660009081526015602052604090205460ff165b15611d0e575060005b801561209557600e54841115611d5d5760405162461bcd60e51b8152602060048201526014602482015273105b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b60448201526064016109af565b600754600160b01b900460ff1615611dbe576009544311611db95760405162461bcd60e51b81526020600482015260166024820152754f6e65207472616e736665722070657220626c6f636b60501b60448201526064016109af565b436009555b6001600160a01b03851660009081526016602052604090205460ff16611e5157600f5484611e01876001600160a01b031660009081526020819052604090205490565b611e0b9190612a52565b1115611e515760405162461bcd60e51b815260206004820152601560248201527410985b185b98d948195e18d959591cc81b1a5b5a5d605a1b60448201526064016109af565b6001600160a01b03851660009081526016602052604081205460ff161561200357600754600160a81b900460ff16611ecb5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c65642079657400000000000000000060448201526064016109af565b50600c546001600160a01b0387166000908152601160205260409020546201000090910461ffff16906201518090611f039042612c9c565b1115611f30576001600160a01b038716600090815260116020908152604080832042905560129091528120555b6000611f3b866115c5565b6010546001600160a01b038a1660009081526012602052604090205491925090611f66908390612a52565b10611fc15760405162461bcd60e51b815260206004820152602560248201527f546f6b656e20616d6f756e742065786365656473206461696c792073656c6c206044820152641b1a5b5a5d60da1b60648201526084016109af565b6001600160a01b038816600090815260126020526040902054611fe4908261256c565b6001600160a01b03891660009081526012602052604090205550612067565b6001600160a01b03871660009081526016602052604090205460ff16156120675760085461203390606490612a52565b43101561205e576001600160a01b0386166000908152601460205260409020805460ff191660011790555b50600c5461ffff165b60006120796103e8611c6488856124c6565b90506120858682612578565b9550612092883083612331565b50505b6120a0868686612331565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526016602052604090205460ff161515811515141561218f5760405162461bcd60e51b815260206004820152603f60248201527f486f73706f3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084016109af565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166122435760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109af565b6001600160a01b038216600090815260208190526040902054818110156122b75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109af565b6001600160a01b03831660009081526020819052604081208383039055600280548492906122e6908490612c9c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b0383166123575760405162461bcd60e51b81526004016109af90612ce9565b6001600160a01b0382166123b95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109af565b6001600160a01b038316600090815260208190526040902054818110156124315760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109af565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612468908490612a52565b909155505081156124c157826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124b891815260200190565b60405180910390a35b611995565b60006124d28284612a33565b9392505050565b60006124d28284612d54565b60006124f28260026124d9565b905060006125008383612578565b90504761250c83612584565b60006125184783612578565b905061252483826126d6565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b60006124d28284612a52565b60006124d28284612c9c565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125b9576125b9612abc565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126369190612b46565b8160018151811061264957612649612abc565b6001600160a01b03928316602091820292909201015260065461266f913091168461199b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126a8908590600090869030904290600401612d76565b600060405180830381600087803b1580156126c257600080fd5b505af11580156120a0573d6000803e3d6000fd5b6006546126ee9030906001600160a01b03168461199b565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561275c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127819190612db2565b5050505050565b600060208083528351808285015260005b818110156127b557858101830151858201604001528201612799565b818111156127c7576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156127ef57600080fd5b5035919050565b6001600160a01b038116811461182057600080fd5b6000806040838503121561281e57600080fd5b8235612829816127f6565b946020939093013593505050565b60006020828403121561284957600080fd5b81356124d2816127f6565b60008060006060848603121561286957600080fd5b8335612874816127f6565b92506020840135612884816127f6565b929592945050506040919091013590565b801515811461182057600080fd5b600080604083850312156128b657600080fd5b82356128c1816127f6565b915060208301356128d181612895565b809150509250929050565b6000806000604084860312156128f157600080fd5b833567ffffffffffffffff8082111561290957600080fd5b818601915086601f83011261291d57600080fd5b81358181111561292c57600080fd5b8760208260051b850101111561294157600080fd5b6020928301955093505084013561295781612895565b809150509250925092565b6000806040838503121561297557600080fd5b8235612980816127f6565b915060208301356128d1816127f6565b6000602082840312156129a257600080fd5b81356124d281612895565b600181811c908216806129c157607f821691505b602082108114156129e257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612a4d57612a4d612a1d565b500290565b60008219821115612a6557612a65612a1d565b500190565b60208082526032908201527f20616d6f756e742073686f756c642062652067726561746f72207468616e20306040820152712e303125206f662074686520737570706c7960701b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ae657612ae6612a1d565b5060010190565b6040808252810183905260008460608301825b86811015612b30578235612b13816127f6565b6001600160a01b0316825260209283019290910190600101612b00565b5080925050508215156020830152949350505050565b600060208284031215612b5857600080fd5b81516124d2816127f6565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b83811015612bb25781516001600160a01b031687529582019590820190600101612b8d565b509495945050505050565b828152604060208201526000612bd66040830184612b79565b949350505050565b60006020808385031215612bf157600080fd5b825167ffffffffffffffff80821115612c0957600080fd5b818501915085601f830112612c1d57600080fd5b815181811115612c2f57612c2f612b63565b8060051b604051601f19603f83011681018181108582111715612c5457612c54612b63565b604052918252848201925083810185019188831115612c7257600080fd5b938501935b82851015612c9057845184529385019392850192612c77565b98975050505050505050565b600082821015612cae57612cae612a1d565b500390565b600060208284031215612cc557600080fd5b5051919050565b600060208284031215612cde57600080fd5b81516124d281612895565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600061ffff808316818516808303821115612d4b57612d4b612a1d565b01949350505050565b600082612d7157634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000612d9560a0830186612b79565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612dc757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212207ad5b06dfa1aad72d9bb97c6e8b43211b4e92355854da0fa38e86d639f3f8f0564736f6c634300080c0033
Deployed Bytecode Sourcemap
36203:13399:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36393:28;;;;;;;;;;-1:-1:-1;36393:28:0;;;;-1:-1:-1;;;36393:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;36393:28:0;;;;;;;;25765:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42595:163::-;;;;;;;;;;-1:-1:-1;42595:163:0;;;;;:::i;:::-;;:::i;:::-;;28073:210;;;;;;;;;;-1:-1:-1;28073:210:0;;;;;:::i;:::-;;:::i;37275:96::-;;;;;;;;;;-1:-1:-1;37275:96:0;;;;-1:-1:-1;;;;;37275:96:0;;;;;;-1:-1:-1;;;;;1629:32:1;;;1611:51;;1599:2;1584:18;37275:96:0;1449:219:1;36278:41:0;;;;;;;;;;-1:-1:-1;36278:41:0;;;;-1:-1:-1;;;;;36278:41:0;;;26885:108;;;;;;;;;;-1:-1:-1;26973:12:0;;26885:108;;;2053:25:1;;;2041:2;2026:18;26885:108:0;1907:177:1;41602:179:0;;;;;;;;;;-1:-1:-1;41602:179:0;;;;;:::i;:::-;;:::i;28765:529::-;;;;;;;;;;-1:-1:-1;28765:529:0;;;;;:::i;:::-;;:::i;43827:258::-;;;;;;;;;;;;;:::i;36779:22::-;;;;;;;;;;-1:-1:-1;36779:22:0;;;;;;;;;;;;;;;;;;;2990:6:1;3023:15;;;3005:34;;3075:15;;;;3070:2;3055:18;;3048:43;2953:18;36779:22:0;2810:287:1;39578:93:0;;;;;;;;;;-1:-1:-1;39661:2:0;39578:93;;;3274:4:1;3262:17;;;3244:36;;3232:2;3217:18;39578:93:0;3102:184:1;29703:297:0;;;;;;;;;;-1:-1:-1;29703:297:0;;;;;:::i;:::-;;:::i;36752:20::-;;;;;;;;;;-1:-1:-1;36752:20:0;;;;;;;;;;;;;;;36326:28;;;;;;;;;;-1:-1:-1;36326:28:0;;;;-1:-1:-1;;;;;36326:28:0;;;36536:38;;;;;;;;;;;;36571:3;36536:38;;44093:126;;;;;;;;;;-1:-1:-1;44093:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44183:28:0;44159:4;44183:28;;;:19;:28;;;;;;;;;44093:126;41988:236;;;;;;;;;;-1:-1:-1;41988:236:0;;;;;:::i;:::-;;:::i;36428:28::-;;;;;;;;;;-1:-1:-1;36428:28:0;;;;-1:-1:-1;;;36428:28:0;;;;;;41789:191;;;;;;;;;;-1:-1:-1;41789:191:0;;;;;:::i;:::-;;:::i;42473:114::-;;;;;;;;;;-1:-1:-1;42473:114:0;;;;;:::i;:::-;;:::i;37380:46::-;;;;;;;;;;-1:-1:-1;37380:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27056:177;;;;;;;;;;-1:-1:-1;27056:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;27207:18:0;27175:7;27207:18;;;;;;;;;;;;27056:177;19473:94;;;;;;;;;;;;;:::i;37002:48::-;;;;;;;;;;;;;;;;18822:87;;;;;;;;;;-1:-1:-1;18895:6:0;;-1:-1:-1;;;;;18895:6:0;18822:87;;25984:104;;;;;;;;;;;;;:::i;42766:323::-;;;;;;;;;;-1:-1:-1;42766:323:0;;;;;:::i;:::-;;:::i;39781:95::-;;;;;;;;;;-1:-1:-1;39781:95:0;;;;;:::i;:::-;;:::i;30503:482::-;;;;;;;;;;-1:-1:-1;30503:482:0;;;;;:::i;:::-;;:::i;27446:216::-;;;;;;;;;;-1:-1:-1;27446:216:0;;;;;:::i;:::-;;:::i;37057:53::-;;;;;;;;;;;;;;;;37696:57;;;;;;;;;;-1:-1:-1;37696:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42232:228;;;;;;;;;;-1:-1:-1;42232:228:0;;;;;:::i;:::-;;:::i;40937:319::-;;;;;;;;;;-1:-1:-1;40937:319:0;;;;;:::i;:::-;;:::i;41264:330::-;;;;;;;;;;-1:-1:-1;41264:330:0;;;;;:::i;:::-;;:::i;43510:257::-;;;;;;;;;;-1:-1:-1;43510:257:0;;;;;:::i;:::-;;:::i;39884:677::-;;;;;;;;;;-1:-1:-1;39884:677:0;;;;;:::i;:::-;;:::i;36463:32::-;;;;;;;;;;;;;;;;49271:328;;;;;;;;;;-1:-1:-1;49271:328:0;;;;;:::i;:::-;;:::i;27725:201::-;;;;;;;;;;-1:-1:-1;27725:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;27891:18:0;;;27859:7;27891:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27725:201;36939:56;;;;;;;;;;;;;;;;39679:94;;;;;;;;;;-1:-1:-1;39679:94:0;;;;;:::i;:::-;;:::i;37119:34::-;;;;;;;;;;;;;;;;37215:51;;;;;;;;;;-1:-1:-1;37215:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;19722:229;;;;;;;;;;-1:-1:-1;19722:229:0;;;;;:::i;:::-;;:::i;40569:360::-;;;;;;;;;;-1:-1:-1;40569:360:0;;;;;:::i;:::-;;:::i;25765:100::-;25819:13;25852:5;25845:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25765:100;:::o;42595:163::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;;;;;;;;;42678:2:::1;42670:5;:10;42661:53;;;::::0;-1:-1:-1;;;42661:53:0;;6603:2:1;42661:53:0::1;::::0;::::1;6585:21:1::0;6642:2;6622:18;;;6615:30;6681:31;6661:18;;;6654:59;6730:18;;42661:53:0::1;6401:353:1::0;42661:53:0::1;42736:14;:5:::0;42744:6:::1;42736:14;:::i;:::-;42725:8;:25:::0;-1:-1:-1;42595:163:0:o;28073:210::-;28192:4;28214:39;17671:10;28237:7;28246:6;28214:8;:39::i;:::-;-1:-1:-1;28271:4:0;28073:210;;;;:::o;41602:179::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41686:20:0;::::1;41678:65;;;::::0;-1:-1:-1;;;41678:65:0;;7266:2:1;41678:65:0::1;::::0;::::1;7248:21:1::0;;;7285:18;;;7278:30;7344:34;7324:18;;;7317:62;7396:18;;41678:65:0::1;7064:356:1::0;41678:65:0::1;41754:10;:19:::0;;-1:-1:-1;;;;;;41754:19:0::1;-1:-1:-1::0;;;;;41754:19:0;;;::::1;::::0;;;::::1;::::0;;41602:179::o;28765:529::-;28905:4;28922:36;28932:6;28940:9;28951:6;28922:9;:36::i;:::-;-1:-1:-1;;;;;28998:19:0;;28971:24;28998:19;;;:11;:19;;;;;;;;17671:10;28998:33;;;;;;;;29064:26;;;;29042:116;;;;-1:-1:-1;;;29042:116:0;;7627:2:1;29042:116:0;;;7609:21:1;7666:2;7646:18;;;7639:30;7705:34;7685:18;;;7678:62;-1:-1:-1;;;7756:18:1;;;7749:38;7804:19;;29042:116:0;7425:404:1;29042:116:0;29194:57;29203:6;17671:10;29244:6;29225:16;:25;29194:8;:57::i;:::-;-1:-1:-1;29282:4:0;;28765:529;-1:-1:-1;;;;28765:529:0:o;43827:258::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;43881:6:::1;:18:::0;;43910:24;-1:-1:-1;;43910:24:0;;;;;;;;43945:7:::1;:19:::0;;43975:25;;;;;;;;44011:16:::1;:23:::0;;-1:-1:-1;;;;44011:23:0::1;-1:-1:-1::0;;;44011:23:0::1;::::0;;44065:12:::1;44045:17;:32:::0;43827:258::o;29703:297::-;17671:10;29818:4;29912:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29912:34:0;;;;;;;;;;29818:4;;29840:130;;29890:7;;29912:47;;29949:10;;29912:47;:::i;:::-;29840:8;:130::i;41988:236::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;42085:10:::1;42077:5;:18;42055:118;;;;-1:-1:-1::0;;;42055:118:0::1;;;;;;;:::i;:::-;42202:14;:5:::0;42210:6:::1;42202:14;:::i;:::-;42184:15;:32:::0;-1:-1:-1;41988:236:0:o;41789:191::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;41875:7:::1;41867:5;:15;41859:67;;;::::0;-1:-1:-1;;;41859:67:0;;8588:2:1;41859:67:0::1;::::0;::::1;8570:21:1::0;8627:2;8607:18;;;8600:30;8666:34;8646:18;;;8639:62;-1:-1:-1;;;8717:18:1;;;8710:37;8764:19;;41859:67:0::1;8386:403:1::0;41859:67:0::1;41958:14;:5:::0;41966:6:::1;41958:14;:::i;:::-;41937:18;:35:::0;-1:-1:-1;41789:191:0:o;42473:114::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42551:20:0;;;::::1;;::::0;;;:14:::1;:20;::::0;;;;:28;;-1:-1:-1;;42551:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42473:114::o;19473:94::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;19538:21:::1;19556:1;19538:9;:21::i;:::-;19473:94::o:0;25984:104::-;26040:13;26073:7;26066:14;;;;;:::i;42766:323::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;42910:13:::1;::::0;-1:-1:-1;;;;;42902:21:0;;::::1;42910:13:::0;::::1;42902:21;;42880:147;;;::::0;-1:-1:-1;;;42880:147:0;;8996:2:1;42880:147:0::1;::::0;::::1;8978:21:1::0;9035:2;9015:18;;;9008:30;9074:34;9054:18;;;9047:62;9145:34;9125:18;;;9118:62;-1:-1:-1;;;9196:19:1;;;9189:43;9249:19;;42880:147:0::1;8794:480:1::0;42880:147:0::1;43040:41;43069:4;43075:5;43040:28;:41::i;:::-;42766:323:::0;;:::o;39781:95::-;39846:22;39852:7;39861:6;39846:5;:22::i;30503:482::-;17671:10;30623:4;30672:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30672:34:0;;;;;;;;;;30739:35;;;;30717:122;;;;-1:-1:-1;;;30717:122:0;;9481:2:1;30717:122:0;;;9463:21:1;9520:2;9500:18;;;9493:30;9559:34;9539:18;;;9532:62;-1:-1:-1;;;9610:18:1;;;9603:35;9655:19;;30717:122:0;9279:401:1;30717:122:0;30875:67;17671:10;30898:7;30926:15;30907:16;:34;30875:8;:67::i;:::-;-1:-1:-1;30973:4:0;;30503:482;-1:-1:-1;;;30503:482:0:o;27446:216::-;27568:4;27590:42;17671:10;27614:9;27625:6;27590:9;:42::i;42232:228::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;42325:10:::1;42317:5;:18;42295:118;;;;-1:-1:-1::0;;;42295:118:0::1;;;;;;;:::i;:::-;42438:14;:5:::0;42446:6:::1;42438:14;:::i;:::-;42424:11;:28:::0;-1:-1:-1;42232:228:0:o;40937:319::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41044:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;41022:124;;;::::0;-1:-1:-1;;;41022:124:0;;9887:2:1;41022:124:0::1;::::0;::::1;9869:21:1::0;9926:2;9906:18;;;9899:30;9965:34;9945:18;;;9938:62;-1:-1:-1;;;10016:18:1;;;10009:32;10058:19;;41022:124:0::1;9685:398:1::0;41022:124:0::1;-1:-1:-1::0;;;;;41157:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;41157:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41214:34;;154:41:1;;;41214:34:0::1;::::0;127:18:1;41214:34:0::1;;;;;;;40937:319:::0;;:::o;41264:330::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;41407:9:::1;41402:116;41422:19:::0;;::::1;41402:116;;;41498:8;41463:19;:32;41483:8;;41492:1;41483:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41463:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41463:32:0;:43;;-1:-1:-1;;41463:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41443:3;::::1;::::0;::::1;:::i;:::-;;;;41402:116;;;;41535:51;41567:8;;41577;41535:51;;;;;;;;:::i;:::-;;;;;;;;41264:330:::0;;;:::o;43510:257::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;43591:6:::1;:17:::0;;-1:-1:-1;;43619:23:0;;;;;;43653:7:::1;:18:::0;;43682:24;;;;;-1:-1:-1;;;;;43717:35:0::1;43607:1;43717:35:::0;;;:19:::1;:35;::::0;;;;:42;;-1:-1:-1;;43717:42:0::1;43591:17:::0;43717:42:::1;::::0;;43510:257::o;39884:677::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;40000:15:::1;::::0;-1:-1:-1;;;;;39978:38:0;;::::1;40000:15:::0;::::1;39978:38;;39956:130;;;::::0;-1:-1:-1;;;39956:130:0;;11361:2:1;39956:130:0::1;::::0;::::1;11343:21:1::0;11400:2;11380:18;;;11373:30;11439:34;11419:18;;;11412:62;-1:-1:-1;;;11490:18:1;;;11483:40;11540:19;;39956:130:0::1;11159:406:1::0;39956:130:0::1;40097:15;:48:::0;;-1:-1:-1;;;;;;40097:48:0::1;-1:-1:-1::0;;;;;40097:48:0;::::1;::::0;;::::1;::::0;;;40193:25:::1;::::0;;-1:-1:-1;;;40193:25:0;;;;-1:-1:-1;;40097:48:0;40193:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;40097:48;40193:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40175:52:0::1;;40250:4;40270:15;;;;;;;;;-1:-1:-1::0;;;;;40270:15:0::1;-1:-1:-1::0;;;;;40270:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40175:128;::::0;-1:-1:-1;;;;;;40175:128:0::1;::::0;;;;;;-1:-1:-1;;;;;12056:15:1;;;40175:128:0::1;::::0;::::1;12038:34:1::0;12108:15;;12088:18;;;12081:43;11973:18;;40175:128:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40156:147:::0;-1:-1:-1;;;;;;40318:22:0;::::1;40314:240;;40391:15;;;;;;;;;-1:-1:-1::0;;;;;40391:15:0::1;-1:-1:-1::0;;;;;40391:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40373:73:0::1;;40455:4;40462:15;;;;;;;;;-1:-1:-1::0;;;;;40462:15:0::1;-1:-1:-1::0;;;;;40462:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40373:112;::::0;-1:-1:-1;;;;;;40373:112:0::1;::::0;;;;;;-1:-1:-1;;;;;12056:15:1;;;40373:112:0::1;::::0;::::1;12038:34:1::0;12108:15;;12088:18;;;12081:43;11973:18;;40373:112:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40357:13;:128:::0;;-1:-1:-1;;;;;;40357:128:0::1;-1:-1:-1::0;;;;;40357:128:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;42766:323:0:o;40314:240::-:1;40518:13;:24:::0;;-1:-1:-1;;;;;40518:24:0;::::1;-1:-1:-1::0;;;;;;40518:24:0;;::::1;;::::0;;39945:616:::1;39884:677:::0;:::o;49271:328::-;49415:16;;;49429:1;49415:16;;;;;;;;49360:13;;;;49415:16;49429:1;49415:16;;;;;;;;;;-1:-1:-1;49415:16:0;49391:40;;49460:4;49442;49447:1;49442:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49442:23:0;;;:7;;;;;;;;;;:23;;;;49486:15;;:22;;;-1:-1:-1;;;49486:22:0;;;;:15;;;;;:20;;:22;;;;;49442:7;;49486:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49476:4;49481:1;49476:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49476:32:0;;;:7;;;;;;;;;:32;49530:15;;:43;;-1:-1:-1;;;49530:43:0;;:15;;;:29;;:43;;49560:6;;49568:4;;49530:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49530:43:0;;;;;;;;;;;;:::i;:::-;49589:1;49575:4;:11;:15;;;;:::i;:::-;49529:62;;;;;;;;:::i;:::-;;;;;;;49521:70;;49380:219;49271:328;;;:::o;39679:94::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;39741:16:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;39741:24:0::1;-1:-1:-1::0;;;;39741:24:0;;::::1;::::0;;;::::1;::::0;;39679:94::o;19722:229::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19825:22:0;::::1;19803:110;;;::::0;-1:-1:-1;;;19803:110:0;;14512:2:1;19803:110:0::1;::::0;::::1;14494:21:1::0;14551:2;14531:18;;;14524:30;14590:34;14570:18;;;14563:62;-1:-1:-1;;;14641:18:1;;;14634:36;14687:19;;19803:110:0::1;14310:402:1::0;19803:110:0::1;19924:19;19934:8;19924:9;:19::i;:::-;19722:229:::0;:::o;40569:360::-;18895:6;;-1:-1:-1;;;;;18895:6:0;17671:10;19042:23;19034:68;;;;-1:-1:-1;;;19034:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40645:22:0;::::1;40641:124;;18895:6:::0;;40684:48:::1;::::0;-1:-1:-1;;;;;18895:6:0;;;;40710:21:::1;40684:48:::0;::::1;;;::::0;::::1;::::0;;;40710:21;18895:6;40684:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;40641:124;40838:35;::::0;-1:-1:-1;;;40838:35:0;;40867:4:::1;40838:35;::::0;::::1;1611:51:1::0;40802:6:0;;40775:17:::1;::::0;-1:-1:-1;;;;;40838:20:0;::::1;::::0;::::1;::::0;1584:18:1;;40838:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40820:53;;40884:10;-1:-1:-1::0;;;;;40884:19:0::1;;40904:7;18895:6:::0;;-1:-1:-1;;;;;18895:6:0;;18822:87;40904:7:::1;40884:37;::::0;-1:-1:-1;;;;;;40884:37:0::1;::::0;;;;;;-1:-1:-1;;;;;15098:32:1;;;40884:37:0::1;::::0;::::1;15080:51:1::0;15147:18;;;15140:34;;;15053:18;;40884:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40630:299;;40569:360:::0;:::o;34335:380::-;-1:-1:-1;;;;;34471:19:0;;34463:68;;;;-1:-1:-1;;;34463:68:0;;15637:2:1;34463:68:0;;;15619:21:1;15676:2;15656:18;;;15649:30;15715:34;15695:18;;;15688:62;-1:-1:-1;;;15766:18:1;;;15759:34;15810:19;;34463:68:0;15435:400:1;34463:68:0;-1:-1:-1;;;;;34550:21:0;;34542:68;;;;-1:-1:-1;;;34542:68:0;;16042:2:1;34542:68:0;;;16024:21:1;16081:2;16061:18;;;16054:30;16120:34;16100:18;;;16093:62;-1:-1:-1;;;16171:18:1;;;16164:32;16213:19;;34542:68:0;15840:398:1;34542:68:0;-1:-1:-1;;;;;34623:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34675:32;;2053:25:1;;;34675:32:0;;2026:18:1;34675:32:0;;;;;;;34335:380;;;:::o;44227:3244::-;-1:-1:-1;;;;;44359:18:0;;44351:68;;;;-1:-1:-1;;;44351:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44455:20:0;;;;;;:14;:20;;;;;;;;44454:21;:44;;;;-1:-1:-1;;;;;;44480:18:0;;;;;;:14;:18;;;;;;;;44479:19;44454:44;44432:116;;;;-1:-1:-1;;;44432:116:0;;16851:2:1;44432:116:0;;;16833:21:1;16890:2;16870:18;;;16863:30;-1:-1:-1;;;16909:18:1;;;16902:52;16971:18;;44432:116:0;16649:346:1;44432:116:0;44565:11;44561:93;;44593:28;44609:4;44615:2;44619:1;44593:15;:28::i;:::-;44227:3244;;;:::o;44561:93::-;44715:4;44666:28;27207:18;;;;;;;;;;;44773;;44749:42;;;;;;;44822:33;;-1:-1:-1;44847:8:0;;-1:-1:-1;;;44847:8:0;;;;44846:9;44822:33;:82;;;;-1:-1:-1;;;;;;44873:31:0;;;;;;:25;:31;;;;;;;;44872:32;44822:82;:114;;;;-1:-1:-1;18895:6:0;;-1:-1:-1;;;;;44921:15:0;;;18895:6;;44921:15;;44822:114;:144;;;;-1:-1:-1;18895:6:0;;-1:-1:-1;;;;;44953:13:0;;;18895:6;;44953:13;;44822:144;44804:745;;;44993:8;:15;;-1:-1:-1;;;;44993:15:0;-1:-1:-1;;;44993:15:0;;;45048:18;;45205:12;;45048:18;;-1:-1:-1;44993:15:0;;45104:114;;45191:26;;45205:12;;;;;;;45191:11;:26;:::i;:::-;45147:7;:20;45104:114;;;;;:64;;:20;;45147;;;;;45104:42;:64::i;:::-;:86;;:114::i;:::-;45083:135;-1:-1:-1;45237:14:0;;45233:81;;45272:26;45287:10;45272:14;:26::i;:::-;45330:17;45350:33;45373:10;45350:20;:33;:::i;:::-;45330:53;-1:-1:-1;45402:13:0;;45398:107;;45467:10;;45436:53;;45460:4;;-1:-1:-1;;;;;45467:10:0;45479:9;45436:15;:53::i;:::-;-1:-1:-1;;45521:8:0;:16;;-1:-1:-1;;;;45521:16:0;;;44804:745;45577:8;;-1:-1:-1;;;;;45687:25:0;;45561:12;45687:25;;;:19;:25;;;;;;45577:8;-1:-1:-1;;;45577:8:0;;;;;45576:9;;45687:25;;:52;;-1:-1:-1;;;;;;45716:23:0;;;;;;:19;:23;;;;;;;;45687:52;45683:100;;;-1:-1:-1;45766:5:0;45683:100;45799:7;45795:1623;;;45841:11;;45831:6;:21;;45823:54;;;;-1:-1:-1;;;45823:54:0;;17431:2:1;45823:54:0;;;17413:21:1;17470:2;17450:18;;;17443:30;-1:-1:-1;;;17489:18:1;;;17482:50;17549:18;;45823:54:0;17229:344:1;45823:54:0;45896:16;;-1:-1:-1;;;45896:16:0;;;;45892:161;;;45956:9;;45941:12;:24;45933:59;;;;-1:-1:-1;;;45933:59:0;;17780:2:1;45933:59:0;;;17762:21:1;17819:2;17799:18;;;17792:30;-1:-1:-1;;;17838:18:1;;;17831:52;17900:18;;45933:59:0;17578:346:1;45933:59:0;46025:12;46013:9;:24;45892:161;-1:-1:-1;;;;;46074:29:0;;;;;;:25;:29;;;;;;;;46069:207;;46180:15;;46170:6;46154:13;46164:2;-1:-1:-1;;;;;27207:18:0;27175:7;27207:18;;;;;;;;;;;;27056:177;46154:13;:22;;;;:::i;:::-;:41;;46124:136;;;;-1:-1:-1;;;46124:136:0;;18131:2:1;46124:136:0;;;18113:21:1;18170:2;18150:18;;;18143:30;-1:-1:-1;;;18189:18:1;;;18182:51;18250:18;;46124:136:0;17929:345:1;46124:136:0;-1:-1:-1;;;;;46325:29:0;;46292:12;46325:29;;;:25;:29;;;;;;;;46321:914;;;46383:16;;-1:-1:-1;;;46383:16:0;;;;46375:52;;;;-1:-1:-1;;;46375:52:0;;18481:2:1;46375:52:0;;;18463:21:1;18520:2;18500:18;;;18493:30;18559:25;18539:18;;;18532:53;18602:18;;46375:52:0;18279:347:1;46375:52:0;-1:-1:-1;46453:12:0;;-1:-1:-1;;;;;46508:18:0;;;;;;:12;:18;;;;;;46453:12;;;;;;;46529:6;;46490:36;;:15;:36;:::i;:::-;:45;46486:179;;;-1:-1:-1;;;;;46560:18:0;;;;;;:12;:18;;;;;;;;46581:15;46560:36;;46619:16;:22;;;;;:26;46486:179;46683:17;46703:23;46719:6;46703:15;:23::i;:::-;46812:8;;-1:-1:-1;;;;;46775:22:0;;;;;;:16;:22;;;;;;46683:43;;-1:-1:-1;46812:8:0;46775:34;;46683:43;;46775:34;:::i;:::-;:45;46745:156;;;;-1:-1:-1;;;46745:156:0;;18833:2:1;46745:156:0;;;18815:21:1;18872:2;18852:18;;;18845:30;18911:34;18891:18;;;18884:62;-1:-1:-1;;;18962:18:1;;;18955:35;19007:19;;46745:156:0;18631:401:1;46745:156:0;-1:-1:-1;;;;;46947:22:0;;;;;;:16;:22;;;;;;:37;;46974:9;46947:26;:37::i;:::-;-1:-1:-1;;;;;46922:22:0;;;;;;:16;:22;;;;;:62;-1:-1:-1;46321:914:0;;;-1:-1:-1;;;;;47012:31:0;;;;;;:25;:31;;;;;;;;47008:227;;;47083:17;;:30;;36571:3;;47083:30;:::i;:::-;47068:12;:45;47064:119;;;-1:-1:-1;;;;;47138:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;47138:25:0;47159:4;47138:25;;;47064:119;-1:-1:-1;47208:11:0;;;;47008:227;47249:17;47269:26;47290:4;47269:16;:6;47280:4;47269:10;:16::i;:26::-;47249:46;-1:-1:-1;47321:21:0;:6;47249:46;47321:10;:21::i;:::-;47312:30;;47359:47;47375:4;47389;47396:9;47359:15;:47::i;:::-;45808:1610;;45795:1623;47430:33;47446:4;47452:2;47456:6;47430:15;:33::i;:::-;44340:3131;;;44227:3244;;;:::o;19959:173::-;20034:6;;;-1:-1:-1;;;;;20051:17:0;;;-1:-1:-1;;;;;;20051:17:0;;;;;;;20084:40;;20034:6;;;20051:17;20034:6;;20084:40;;20015:16;;20084:40;20004:128;19959:173;:::o;43097:352::-;-1:-1:-1;;;;;43202:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;43180:153;;;;-1:-1:-1;;;43180:153:0;;19239:2:1;43180:153:0;;;19221:21:1;19278:2;19258:18;;;19251:30;19317:34;19297:18;;;19290:62;19388:33;19368:18;;;19361:61;19439:19;;43180:153:0;19037:427:1;43180:153:0;-1:-1:-1;;;;;43344:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;43344:39:0;;;;;;;;;;43401:40;;43344:39;;:31;43401:40;;;43097:352;;:::o;33306:591::-;-1:-1:-1;;;;;33390:21:0;;33382:67;;;;-1:-1:-1;;;33382:67:0;;19671:2:1;33382:67:0;;;19653:21:1;19710:2;19690:18;;;19683:30;19749:34;19729:18;;;19722:62;-1:-1:-1;;;19800:18:1;;;19793:31;19841:19;;33382:67:0;19469:397:1;33382:67:0;-1:-1:-1;;;;;33549:18:0;;33524:22;33549:18;;;;;;;;;;;33586:24;;;;33578:71;;;;-1:-1:-1;;;33578:71:0;;20073:2:1;33578:71:0;;;20055:21:1;20112:2;20092:18;;;20085:30;20151:34;20131:18;;;20124:62;-1:-1:-1;;;20202:18:1;;;20195:32;20244:19;;33578:71:0;19871:398:1;33578:71:0;-1:-1:-1;;;;;33685:18:0;;:9;:18;;;;;;;;;;33706:23;;;33685:44;;33751:12;:22;;33723:6;;33685:9;33751:22;;33723:6;;33751:22;:::i;:::-;;;;-1:-1:-1;;33791:37:0;;2053:25:1;;;33817:1:0;;-1:-1:-1;;;;;33791:37:0;;;;;2041:2:1;2026:18;33791:37:0;;;;;;;44227:3244;;;:::o;31475:812::-;-1:-1:-1;;;;;31615:20:0;;31607:70;;;;-1:-1:-1;;;31607:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31696:23:0;;31688:71;;;;-1:-1:-1;;;31688:71:0;;20476:2:1;31688:71:0;;;20458:21:1;20515:2;20495:18;;;20488:30;20554:34;20534:18;;;20527:62;-1:-1:-1;;;20605:18:1;;;20598:33;20648:19;;31688:71:0;20274:399:1;31688:71:0;-1:-1:-1;;;;;31856:17:0;;31832:21;31856:17;;;;;;;;;;;31906:23;;;;31884:111;;;;-1:-1:-1;;;31884:111:0;;20880:2:1;31884:111:0;;;20862:21:1;20919:2;20899:18;;;20892:30;20958:34;20938:18;;;20931:62;-1:-1:-1;;;21009:18:1;;;21002:36;21055:19;;31884:111:0;20678:402:1;31884:111:0;-1:-1:-1;;;;;32031:17:0;;;:9;:17;;;;;;;;;;;32051:22;;;32031:42;;32095:20;;;;;;;;:30;;32067:6;;32031:9;32095:30;;32067:6;;32095:30;:::i;:::-;;;;-1:-1:-1;;32142:10:0;;32138:83;;32191:9;-1:-1:-1;;;;;32174:35:0;32183:6;-1:-1:-1;;;;;32174:35:0;;32202:6;32174:35;;;;2053:25:1;;2041:2;2026:18;;1907:177;32174:35:0;;;;;;;;32138:83;32233:46;44227:3244;13543:98;13601:7;13628:5;13632:1;13628;:5;:::i;:::-;13621:12;13543:98;-1:-1:-1;;;13543:98:0:o;13942:::-;14000:7;14027:5;14031:1;14027;:5;:::i;48008:658::-;48118:12;48133:13;:6;48144:1;48133:10;:13::i;:::-;48118:28;-1:-1:-1;48157:17:0;48177:16;:6;48118:28;48177:10;:16::i;:::-;48157:36;-1:-1:-1;48231:21:0;48297:22;48314:4;48297:16;:22::i;:::-;48450:18;48471:41;:21;48497:14;48471:25;:41::i;:::-;48450:62;;48562:35;48575:9;48586:10;48562:12;:35::i;:::-;48615:43;;;21509:25:1;;;21565:2;21550:18;;21543:34;;;21593:18;;;21586:34;;;48615:43:0;;21497:2:1;21482:18;48615:43:0;;;;;;;48056:610;;;;48008:658;:::o;12805:98::-;12863:7;12890:5;12894:1;12890;:5;:::i;13186:98::-;13244:7;13271:5;13275:1;13271;:5;:::i;48674:589::-;48824:16;;;48838:1;48824:16;;;;;;;;48800:21;;48824:16;;;;;;;;;;-1:-1:-1;48824:16:0;48800:40;;48869:4;48851;48856:1;48851:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48851:23:0;;;:7;;;;;;;;;;:23;;;;48895:15;;:22;;;-1:-1:-1;;;48895:22:0;;;;:15;;;;;:20;;:22;;;;;48851:7;;48895:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48885:4;48890:1;48885:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48885:32:0;;;:7;;;;;;;;;:32;48962:15;;48930:62;;48947:4;;48962:15;48980:11;48930:8;:62::i;:::-;49031:15;;:224;;-1:-1:-1;;;49031:224:0;;-1:-1:-1;;;;;49031:15:0;;;;:66;;:224;;49112:11;;49031:15;;49182:4;;49209;;49229:15;;49031:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47479:521;47659:15;;47627:62;;47644:4;;-1:-1:-1;;;;;47659:15:0;47677:11;47627:8;:62::i;:::-;47732:15;;:260;;-1:-1:-1;;;47732:260:0;;47804:4;47732:260;;;22559:34:1;22609:18;;;22602:34;;;47732:15:0;22652:18:1;;;22645:34;;;22695:18;;;22688:34;47944:6:0;22738:19:1;;;22731:44;47966:15:0;22791:19:1;;;22784:35;-1:-1:-1;;;;;47732:15:0;;;;:31;;47771:9;;22493:19:1;;47732:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47479:521;;:::o;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:180::-;867:6;920:2;908:9;899:7;895:23;891:32;888:52;;;936:1;933;926:12;888:52;-1:-1:-1;959:23:1;;808:180;-1:-1:-1;808:180:1:o;993:131::-;-1:-1:-1;;;;;1068:31:1;;1058:42;;1048:70;;1114:1;1111;1104:12;1129:315;1197:6;1205;1258:2;1246:9;1237:7;1233:23;1229:32;1226:52;;;1274:1;1271;1264:12;1226:52;1313:9;1300:23;1332:31;1357:5;1332:31;:::i;:::-;1382:5;1434:2;1419:18;;;;1406:32;;-1:-1:-1;;;1129:315:1:o;2089:255::-;2156:6;2209:2;2197:9;2188:7;2184:23;2180:32;2177:52;;;2225:1;2222;2215:12;2177:52;2264:9;2251:23;2283:31;2308:5;2283:31;:::i;2349:456::-;2426:6;2434;2442;2495:2;2483:9;2474:7;2470:23;2466:32;2463:52;;;2511:1;2508;2501:12;2463:52;2550:9;2537:23;2569:31;2594:5;2569:31;:::i;:::-;2619:5;-1:-1:-1;2676:2:1;2661:18;;2648:32;2689:33;2648:32;2689:33;:::i;:::-;2349:456;;2741:7;;-1:-1:-1;;;2795:2:1;2780:18;;;;2767:32;;2349:456::o;3751:118::-;3837:5;3830:13;3823:21;3816:5;3813:32;3803:60;;3859:1;3856;3849:12;3874:382;3939:6;3947;4000:2;3988:9;3979:7;3975:23;3971:32;3968:52;;;4016:1;4013;4006:12;3968:52;4055:9;4042:23;4074:31;4099:5;4074:31;:::i;:::-;4124:5;-1:-1:-1;4181:2:1;4166:18;;4153:32;4194:30;4153:32;4194:30;:::i;:::-;4243:7;4233:17;;;3874:382;;;;;:::o;4261:750::-;4353:6;4361;4369;4422:2;4410:9;4401:7;4397:23;4393:32;4390:52;;;4438:1;4435;4428:12;4390:52;4478:9;4465:23;4507:18;4548:2;4540:6;4537:14;4534:34;;;4564:1;4561;4554:12;4534:34;4602:6;4591:9;4587:22;4577:32;;4647:7;4640:4;4636:2;4632:13;4628:27;4618:55;;4669:1;4666;4659:12;4618:55;4709:2;4696:16;4735:2;4727:6;4724:14;4721:34;;;4751:1;4748;4741:12;4721:34;4806:7;4799:4;4789:6;4786:1;4782:14;4778:2;4774:23;4770:34;4767:47;4764:67;;;4827:1;4824;4817:12;4764:67;4858:4;4850:13;;;;-1:-1:-1;4882:6:1;-1:-1:-1;;4923:20:1;;4910:34;4953:28;4910:34;4953:28;:::i;:::-;5000:5;4990:15;;;4261:750;;;;;:::o;5016:388::-;5084:6;5092;5145:2;5133:9;5124:7;5120:23;5116:32;5113:52;;;5161:1;5158;5151:12;5113:52;5200:9;5187:23;5219:31;5244:5;5219:31;:::i;:::-;5269:5;-1:-1:-1;5326:2:1;5311:18;;5298:32;5339:33;5298:32;5339:33;:::i;5409:241::-;5465:6;5518:2;5506:9;5497:7;5493:23;5489:32;5486:52;;;5534:1;5531;5524:12;5486:52;5573:9;5560:23;5592:28;5614:5;5592:28;:::i;5655:380::-;5734:1;5730:12;;;;5777;;;5798:61;;5852:4;5844:6;5840:17;5830:27;;5798:61;5905:2;5897:6;5894:14;5874:18;5871:38;5868:161;;;5951:10;5946:3;5942:20;5939:1;5932:31;5986:4;5983:1;5976:15;6014:4;6011:1;6004:15;5868:161;;5655:380;;;:::o;6040:356::-;6242:2;6224:21;;;6261:18;;;6254:30;6320:34;6315:2;6300:18;;6293:62;6387:2;6372:18;;6040:356::o;6759:127::-;6820:10;6815:3;6811:20;6808:1;6801:31;6851:4;6848:1;6841:15;6875:4;6872:1;6865:15;6891:168;6931:7;6997:1;6993;6989:6;6985:14;6982:1;6979:21;6974:1;6967:9;6960:17;6956:45;6953:71;;;7004:18;;:::i;:::-;-1:-1:-1;7044:9:1;;6891:168::o;7834:128::-;7874:3;7905:1;7901:6;7898:1;7895:13;7892:39;;;7911:18;;:::i;:::-;-1:-1:-1;7947:9:1;;7834:128::o;7967:414::-;8169:2;8151:21;;;8208:2;8188:18;;;8181:30;8247:34;8242:2;8227:18;;8220:62;-1:-1:-1;;;8313:2:1;8298:18;;8291:48;8371:3;8356:19;;7967:414::o;10088:127::-;10149:10;10144:3;10140:20;10137:1;10130:31;10180:4;10177:1;10170:15;10204:4;10201:1;10194:15;10220:135;10259:3;-1:-1:-1;;10280:17:1;;10277:43;;;10300:18;;:::i;:::-;-1:-1:-1;10347:1:1;10336:13;;10220:135::o;10360:794::-;10582:2;10594:21;;;10567:18;;10650:22;;;10534:4;10729:6;10703:2;10688:18;;10534:4;10763:304;10777:6;10774:1;10771:13;10763:304;;;10852:6;10839:20;10872:31;10897:5;10872:31;:::i;:::-;-1:-1:-1;;;;;10928:31:1;10916:44;;10983:4;11042:15;;;;11007:12;;;;10956:1;10792:9;10763:304;;;10767:3;11084;11076:11;;;;11139:6;11132:14;11125:22;11118:4;11107:9;11103:20;11096:52;10360:794;;;;;;:::o;11570:251::-;11640:6;11693:2;11681:9;11672:7;11668:23;11664:32;11661:52;;;11709:1;11706;11699:12;11661:52;11741:9;11735:16;11760:31;11785:5;11760:31;:::i;12135:127::-;12196:10;12191:3;12187:20;12184:1;12177:31;12227:4;12224:1;12217:15;12251:4;12248:1;12241:15;12267:461;12320:3;12358:5;12352:12;12385:6;12380:3;12373:19;12411:4;12440:2;12435:3;12431:12;12424:19;;12477:2;12470:5;12466:14;12498:1;12508:195;12522:6;12519:1;12516:13;12508:195;;;12587:13;;-1:-1:-1;;;;;12583:39:1;12571:52;;12643:12;;;;12678:15;;;;12619:1;12537:9;12508:195;;;-1:-1:-1;12719:3:1;;12267:461;-1:-1:-1;;;;;12267:461:1:o;12733:332::-;12940:6;12929:9;12922:25;12983:2;12978;12967:9;12963:18;12956:30;12903:4;13003:56;13055:2;13044:9;13040:18;13032:6;13003:56;:::i;:::-;12995:64;12733:332;-1:-1:-1;;;;12733:332:1:o;13070:1105::-;13165:6;13196:2;13239;13227:9;13218:7;13214:23;13210:32;13207:52;;;13255:1;13252;13245:12;13207:52;13288:9;13282:16;13317:18;13358:2;13350:6;13347:14;13344:34;;;13374:1;13371;13364:12;13344:34;13412:6;13401:9;13397:22;13387:32;;13457:7;13450:4;13446:2;13442:13;13438:27;13428:55;;13479:1;13476;13469:12;13428:55;13508:2;13502:9;13530:2;13526;13523:10;13520:36;;;13536:18;;:::i;:::-;13582:2;13579:1;13575:10;13614:2;13608:9;13677:2;13673:7;13668:2;13664;13660:11;13656:25;13648:6;13644:38;13732:6;13720:10;13717:22;13712:2;13700:10;13697:18;13694:46;13691:72;;;13743:18;;:::i;:::-;13779:2;13772:22;13829:18;;;13863:15;;;;-1:-1:-1;13905:11:1;;;13901:20;;;13933:19;;;13930:39;;;13965:1;13962;13955:12;13930:39;13989:11;;;;14009:135;14025:6;14020:3;14017:15;14009:135;;;14091:10;;14079:23;;14042:12;;;;14122;;;;14009:135;;;14163:6;13070:1105;-1:-1:-1;;;;;;;;13070:1105:1:o;14180:125::-;14220:4;14248:1;14245;14242:8;14239:34;;;14253:18;;:::i;:::-;-1:-1:-1;14290:9:1;;14180:125::o;14717:184::-;14787:6;14840:2;14828:9;14819:7;14815:23;14811:32;14808:52;;;14856:1;14853;14846:12;14808:52;-1:-1:-1;14879:16:1;;14717:184;-1:-1:-1;14717:184:1:o;15185:245::-;15252:6;15305:2;15293:9;15284:7;15280:23;15276:32;15273:52;;;15321:1;15318;15311:12;15273:52;15353:9;15347:16;15372:28;15394:5;15372:28;:::i;16243:401::-;16445:2;16427:21;;;16484:2;16464:18;;;16457:30;16523:34;16518:2;16503:18;;16496:62;-1:-1:-1;;;16589:2:1;16574:18;;16567:35;16634:3;16619:19;;16243:401::o;17000:224::-;17039:3;17067:6;17100:2;17097:1;17093:10;17130:2;17127:1;17123:10;17161:3;17157:2;17153:12;17148:3;17145:21;17142:47;;;17169:18;;:::i;:::-;17205:13;;17000:224;-1:-1:-1;;;;17000:224:1:o;21085:217::-;21125:1;21151;21141:132;;21195:10;21190:3;21186:20;21183:1;21176:31;21230:4;21227:1;21220:15;21258:4;21255:1;21248:15;21141:132;-1:-1:-1;21287:9:1;;21085:217::o;21631:582::-;21930:6;21919:9;21912:25;21973:6;21968:2;21957:9;21953:18;21946:34;22016:3;22011:2;22000:9;21996:18;21989:31;21893:4;22037:57;22089:3;22078:9;22074:19;22066:6;22037:57;:::i;:::-;-1:-1:-1;;;;;22130:32:1;;;;22125:2;22110:18;;22103:60;-1:-1:-1;22194:3:1;22179:19;22172:35;22029:65;21631:582;-1:-1:-1;;;21631:582:1:o;22830:306::-;22918:6;22926;22934;22987:2;22975:9;22966:7;22962:23;22958:32;22955:52;;;23003:1;23000;22993:12;22955:52;23032:9;23026:16;23016:26;;23082:2;23071:9;23067:18;23061:25;23051:35;;23126:2;23115:9;23111:18;23105:25;23095:35;;22830:306;;;;;:::o
Swarm Source
ipfs://7ad5b06dfa1aad72d9bb97c6e8b43211b4e92355854da0fa38e86d639f3f8f05
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.