Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 432 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 22797563 | 109 days ago | IN | 0 ETH | 0.00012094 | ||||
Approve | 22797558 | 109 days ago | IN | 0 ETH | 0.00012408 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 | ||||
Approve | 22791077 | 110 days ago | IN | 0 ETH | 0.00025922 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-06-26 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // https://usearray.io/ // https://x.com/usearray // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ 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/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC-20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC-721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC-1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; /** * @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}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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 ERC-20 * applications. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * Both 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 default value returned by this function, unless * it's 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Skips emitting an {Approval} event indicating an allowance update. This is not * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * * ```solidity * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner`'s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance < type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol 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, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // 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, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } contract Token is ERC20, Ownable { uint256 public immutable MAX_SUPPLY; address public immutable pair; address public feewallet; IUniswapV2Router02 private constant _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address private immutable _weth; address private immutable _deployer; uint256 public startBlock; uint256 public startBlockTime; uint256 private raiseAmount; mapping(address account => bool) public isExcludedFromFees; mapping(address account => bool) public isExcludedFromMaxWallet; mapping(address origin => mapping(uint256 blockNumber => uint256 txCount)) public maxBuyTxsPerBlockPerOrigin; uint256 private _maxBuyTxsPerBlockPerOrigin = 15; mapping(uint256 blockNumber => uint256 txCount) public maxBuyTxsPerBlock; uint256 private _maxBuyTxsPerBlock = 125; mapping(uint256 blockNumber => uint256 txCount) public maxSellTxsPerBlock; uint256 private _maxSellTxsPerBlock = 5; constructor( string memory name, string memory symbol, uint256 maxSupply, address _feewallet ) ERC20(name, symbol) Ownable(msg.sender) { MAX_SUPPLY = maxSupply; _weth = _router.WETH(); pair = IUniswapV2Factory(_router.factory()).createPair( address(this), _weth ); isExcludedFromFees[msg.sender] = true; isExcludedFromFees[address(this)] = true; isExcludedFromFees[pair] = true; isExcludedFromFees[feewallet] = true; isExcludedFromMaxWallet[msg.sender] = true; isExcludedFromMaxWallet[address(this)] = true; isExcludedFromMaxWallet[pair] = true; isExcludedFromMaxWallet[feewallet] = true; _mint(msg.sender, maxSupply); _approve(msg.sender, address(_router), type(uint256).max); feewallet = _feewallet; _deployer = msg.sender; _approve(address(this), address(_router), type(uint256).max); } function setFeewallet(address newFeewallet) external { require(newFeewallet != address(0), "feewallet-is-0"); require( msg.sender == _deployer || msg.sender == owner(), "only-deployer" ); feewallet = newFeewallet; } function launch() external onlyOwner { require(startBlock == 0, "trading-already-enabled"); startBlock = block.number; startBlockTime = block.timestamp; } function setExcludedFromFees( address account, bool excluded ) external onlyOwner { isExcludedFromFees[account] = excluded; } function setExcludedFromMaxWallet( address account, bool excluded ) external onlyOwner { isExcludedFromMaxWallet[account] = excluded; } function setMaxBuysPerBlock(uint256 _maxBuys) external onlyOwner { _maxBuyTxsPerBlock = _maxBuys; } function setMaxSellsPerBlock(uint256 _maxSells) external onlyOwner { _maxSellTxsPerBlock = _maxSells; } function feesAndMaxWallet() external view returns (uint256 _feeBps, uint256 _maxWallet) { return _feesAndMaxWallet(); } function _feesAndMaxWallet() internal view returns (uint256 _feeBps, uint256 _maxWallet) { if (startBlockTime == 0) { return (0, 0); } uint256 _diffSeconds = block.timestamp - startBlockTime; if (_diffSeconds < 3600) { // 1 min if (_diffSeconds < 60) { _feeBps = 3500; // 35% _maxWallet = MAX_SUPPLY / 400; // 0.25% return (_feeBps, _maxWallet); } // 2-5 min if (_diffSeconds < 300) { _feeBps = 3000; // 30% _maxWallet = MAX_SUPPLY / 333; // 0.3% return (_feeBps, _maxWallet); } // 6-8 min if (_diffSeconds < 480) { _feeBps = 2500; // 25% _maxWallet = MAX_SUPPLY / 166; // 0.6% return (_feeBps, _maxWallet); } if (_diffSeconds < 900) { // 9-15 min _feeBps = 2000; // 20% _maxWallet = MAX_SUPPLY / 100; // 1% return (_feeBps, _maxWallet); } _feeBps = 500; // 5% _maxWallet = MAX_SUPPLY / 88; // 1.2% return (_feeBps, _maxWallet); } if (raiseAmount < 500 ether) { _feeBps = 400; // 4%; } else if (raiseAmount < 700 ether) { _feeBps = 300; // 3%; } else if (raiseAmount < 900 ether) { _feeBps = 200; // 2%; } else { _feeBps = 0; // 0%; } _maxWallet = MAX_SUPPLY; // no limit return (_feeBps, _maxWallet); } function _update( address from, address to, uint256 value ) internal override { (uint256 _feeBps, uint256 _maxWallet) = _feesAndMaxWallet(); bool isBuy = from == pair; if (isBuy || to == pair) { require( startBlock > 0 || isExcludedFromFees[to], "trading-not-enabled" ); if (_feeBps != 0) { if (isBuy && !isExcludedFromFees[to]) { if ( startBlockTime > 0 && block.timestamp - startBlockTime < 180 ) { require( maxBuyTxsPerBlockPerOrigin[tx.origin][ block.number ] < _maxBuyTxsPerBlockPerOrigin, "max-buy-txs-per-block-per-origin-exceeded" ); maxBuyTxsPerBlockPerOrigin[tx.origin][block.number]++; require( maxBuyTxsPerBlock[block.number] < _maxBuyTxsPerBlock, "max-buy-txs-per-block-exceeded" ); maxBuyTxsPerBlock[block.number]++; } uint256 fee = (value * _feeBps) / 10000; value -= fee; super._update(from, address(this), fee); } if (!isBuy && !isExcludedFromFees[from]) { if ( startBlockTime > 0 && block.timestamp - startBlockTime < 180 ) { require( maxSellTxsPerBlock[block.number] < _maxSellTxsPerBlock, "max-sell-txs-per-block-exceeded" ); maxSellTxsPerBlock[block.number]++; } uint256 fee = (value * _feeBps) / 10000; value -= fee; super._update(from, address(this), fee); _swapTokensForEth(); } } else { // sell any remaining tokens after cap is reached if (!isBuy && !isExcludedFromFees[from]) { _swapTokensForEth(); } } } require( isExcludedFromMaxWallet[to] || value + balanceOf(to) <= _maxWallet, "max-wallet-size-exceeded" ); super._update(from, to, value); } function _swapTokensForEth() internal { uint256 startDiff = block.timestamp - startBlockTime; if (startDiff < 300) { return; } uint256 _tokenAmount = balanceOf(address(this)); if (_tokenAmount == 0) { return; } address[] memory _path = new address[](2); _path[0] = _weth; _path[1] = address(this); // sell max 1 eth worth of tokens uint256 _maxTokenAmount = _router.getAmountsOut(1 ether, _path)[1]; if (_tokenAmount > _maxTokenAmount) { _tokenAmount = _maxTokenAmount; } _path[0] = address(this); _path[1] = _weth; uint256 _feewalletBalanceBefore = address(feewallet).balance; _router.swapExactTokensForETHSupportingFeeOnTransferTokens( _tokenAmount, 0, _path, feewallet, block.timestamp ); uint256 _feewalletBalanceAfter = address(feewallet).balance; raiseAmount += _feewalletBalanceAfter - _feewalletBalanceBefore; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"address","name":"_feewallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesAndMaxWallet","outputs":[{"internalType":"uint256","name":"_feeBps","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feewallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlock","outputs":[{"internalType":"uint256","name":"txCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"origin","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlockPerOrigin","outputs":[{"internalType":"uint256","name":"txCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxSellTxsPerBlock","outputs":[{"internalType":"uint256","name":"txCount","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":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeewallet","type":"address"}],"name":"setFeewallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuys","type":"uint256"}],"name":"setMaxBuysPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSells","type":"uint256"}],"name":"setMaxSellsPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlockTime","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"}]
Contract Creation Code
610100604052600f600d55607d600f55600560115534801562000020575f80fd5b50604051620052a6380380620052a6833981810160405281019062000046919062001a2e565b33848481600390816200005a919062001d09565b5080600490816200006c919062001d09565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000e2575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000d9919062001dfe565b60405180910390fd5b620000f381620006f760201b60201c565b508160808181525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000180919062001e19565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000211573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000237919062001e19565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b81526004016200027592919062001e49565b6020604051808303815f875af115801562000292573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b8919062001e19565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005eb3383620007ba60201b60201c565b6200063233737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200084460201b60201c565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1681525050620006ed30737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200084460201b60201c565b5050505062002602565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200082d575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000824919062001dfe565b60405180910390fd5b620008405f83836200085e60201b60201c565b5050565b62000859838383600162000e6560201b60201c565b505050565b5f80620008706200103d60201b60201c565b915091505f60a05173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161490508080620008e2575060a05173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1562000d95575f60075411806200093f5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b62000981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009789062001ed2565b60405180910390fd5b5f831462000d2657808015620009de5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1562000bc7575f60085411801562000a05575060b46008544262000a03919062001f1f565b105b1562000b8257600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f20541062000a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a959062001fcd565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f81548092919062000afc9062001fed565b9190505550600f54600e5f4381526020019081526020015f20541062000b59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b509062002087565b60405180910390fd5b600e5f4381526020019081526020015f205f81548092919062000b7c9062001fed565b91905055505b5f612710848662000b949190620020a7565b62000ba091906200211e565b9050808562000bb0919062001f1f565b945062000bc5873083620011a860201b60201c565b505b8015801562000c1d5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1562000d20575f60085411801562000c44575060b46008544262000c42919062001f1f565b105b1562000ccb5760115460105f4381526020019081526020015f20541062000ca2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c9990620021a3565b60405180910390fd5b60105f4381526020019081526020015f205f81548092919062000cc59062001fed565b91905055505b5f612710848662000cdd9190620020a7565b62000ce991906200211e565b9050808562000cf9919062001f1f565b945062000d0e873083620011a860201b60201c565b62000d1e620013cc60201b60201c565b505b62000d94565b8015801562000d7c5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1562000d935762000d92620013cc60201b60201c565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168062000e0857508162000df886620017cb60201b60201c565b8562000e059190620021c3565b11155b62000e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e41906200224b565b60405180910390fd5b62000e5d868686620011a860201b60201c565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000ed8575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000ecf919062001dfe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000f4b575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000f42919062001dfe565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562001037578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516200102e91906200227c565b60405180910390a35b50505050565b5f805f6008540362001055575f8091509150620011a4565b5f6008544262001066919062001f1f565b9050610e108110156200113b57603c8110156200109d57610dac92506101906080516200109491906200211e565b915050620011a4565b61012c811015620010c857610bb8925061014d608051620010bf91906200211e565b915050620011a4565b6101e0811015620010f2576109c4925060a6608051620010e991906200211e565b915050620011a4565b6103848110156200111c576107d0925060646080516200111391906200211e565b915050620011a4565b6101f4925060586080516200113291906200211e565b915050620011a4565b681b1ae4d6e2ef50000060095410156200115a5761019092506200119d565b6825f273933db57000006009541015620011795761012c92506200119c565b6830ca024f987b9000006009541015620011975760c892506200119b565b5f92505b5b5b6080519150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620011fc578060025f828254620011ef9190620021c3565b92505081905550620012cd565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562001288578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200127f9392919062002297565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001316578060025f828254039250508190555062001360565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620013bf91906200227c565b60405180910390a3505050565b5f60085442620013dd919062001f1f565b905061012c811015620013f15750620017c9565b5f6200140330620017cb60201b60201c565b90505f810362001415575050620017c9565b5f600267ffffffffffffffff81111562001434576200143362001839565b5b604051908082528060200260200182016040528015620014635781602001602082028036833780820191505090505b50905060c051815f815181106200147f576200147e620022d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110620014d157620014d0620022d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b81526004016200156592919062002407565b5f60405180830381865afa15801562001580573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190620015aa919062002510565b600181518110620015c057620015bf620022d2565b5b6020026020010151905080831115620015d7578092505b30825f81518110620015ee57620015ed620022d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060c05182600181518110620016425762001641620022d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040162001730959493929190620025a0565b5f604051808303815f87803b15801562001748575f80fd5b505af11580156200175b573d5f803e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181620017a9919062001f1f565b60095f828254620017bb9190620021c3565b925050819055505050505050505b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620018718262001829565b810181811067ffffffffffffffff8211171562001893576200189262001839565b5b80604052505050565b5f620018a762001810565b9050620018b5828262001866565b919050565b5f67ffffffffffffffff821115620018d757620018d662001839565b5b620018e28262001829565b9050602081019050919050565b5f5b838110156200190e578082015181840152602081019050620018f1565b5f8484015250505050565b5f6200192f6200192984620018ba565b6200189c565b9050828152602081018484840111156200194e576200194d62001825565b5b6200195b848285620018ef565b509392505050565b5f82601f8301126200197a576200197962001821565b5b81516200198c84826020860162001919565b91505092915050565b5f819050919050565b620019a98162001995565b8114620019b4575f80fd5b50565b5f81519050620019c7816200199e565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620019f882620019cd565b9050919050565b62001a0a81620019ec565b811462001a15575f80fd5b50565b5f8151905062001a2881620019ff565b92915050565b5f805f806080858703121562001a495762001a4862001819565b5b5f85015167ffffffffffffffff81111562001a695762001a686200181d565b5b62001a778782880162001963565b945050602085015167ffffffffffffffff81111562001a9b5762001a9a6200181d565b5b62001aa98782880162001963565b935050604062001abc87828801620019b7565b925050606062001acf8782880162001a18565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062001b2a57607f821691505b60208210810362001b405762001b3f62001ae5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262001ba47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001b67565b62001bb0868362001b67565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62001bf162001beb62001be58462001995565b62001bc8565b62001995565b9050919050565b5f819050919050565b62001c0c8362001bd1565b62001c2462001c1b8262001bf8565b84845462001b73565b825550505050565b5f90565b62001c3a62001c2c565b62001c4781848462001c01565b505050565b5b8181101562001c6e5762001c625f8262001c30565b60018101905062001c4d565b5050565b601f82111562001cbd5762001c878162001b46565b62001c928462001b58565b8101602085101562001ca2578190505b62001cba62001cb18562001b58565b83018262001c4c565b50505b505050565b5f82821c905092915050565b5f62001cdf5f198460080262001cc2565b1980831691505092915050565b5f62001cf9838362001cce565b9150826002028217905092915050565b62001d148262001adb565b67ffffffffffffffff81111562001d305762001d2f62001839565b5b62001d3c825462001b12565b62001d4982828562001c72565b5f60209050601f83116001811462001d7f575f841562001d6a578287015190505b62001d76858262001cec565b86555062001de5565b601f19841662001d8f8662001b46565b5f5b8281101562001db85784890151825560018201915060208501945060208101905062001d91565b8683101562001dd8578489015162001dd4601f89168262001cce565b8355505b6001600288020188555050505b505050505050565b62001df881620019ec565b82525050565b5f60208201905062001e135f83018462001ded565b92915050565b5f6020828403121562001e315762001e3062001819565b5b5f62001e408482850162001a18565b91505092915050565b5f60408201905062001e5e5f83018562001ded565b62001e6d602083018462001ded565b9392505050565b5f82825260208201905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f62001eba60138362001e74565b915062001ec78262001e84565b602082019050919050565b5f6020820190508181035f83015262001eeb8162001eac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62001f2b8262001995565b915062001f388362001995565b925082820390508181111562001f535762001f5262001ef2565b5b92915050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f62001fb560298362001e74565b915062001fc28262001f59565b604082019050919050565b5f6020820190508181035f83015262001fe68162001fa7565b9050919050565b5f62001ff98262001995565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200202e576200202d62001ef2565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f6200206f601e8362001e74565b91506200207c8262002039565b602082019050919050565b5f6020820190508181035f830152620020a08162002061565b9050919050565b5f620020b38262001995565b9150620020c08362001995565b9250828202620020d08162001995565b91508282048414831517620020ea57620020e962001ef2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200212a8262001995565b9150620021378362001995565b9250826200214a5762002149620020f1565b5b828204905092915050565b7f6d61782d73656c6c2d7478732d7065722d626c6f636b2d6578636565646564005f82015250565b5f6200218b601f8362001e74565b9150620021988262002155565b602082019050919050565b5f6020820190508181035f830152620021bc816200217d565b9050919050565b5f620021cf8262001995565b9150620021dc8362001995565b9250828201905080821115620021f757620021f662001ef2565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f6200223360188362001e74565b91506200224082620021fd565b602082019050919050565b5f6020820190508181035f830152620022648162002225565b9050919050565b620022768162001995565b82525050565b5f602082019050620022915f8301846200226b565b92915050565b5f606082019050620022ac5f83018662001ded565b620022bb60208301856200226b565b620022ca60408301846200226b565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f62002328620023226200231c84620022ff565b62001bc8565b62001995565b9050919050565b6200233a8162002308565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6200237481620019ec565b82525050565b5f62002387838362002369565b60208301905092915050565b5f602082019050919050565b5f620023ab8262002340565b620023b781856200234a565b9350620023c4836200235a565b805f5b83811015620023fa578151620023de88826200237a565b9750620023eb8362002393565b925050600181019050620023c7565b5085935050505092915050565b5f6040820190506200241c5f8301856200232f565b81810360208301526200243081846200239f565b90509392505050565b5f67ffffffffffffffff82111562002456576200245562001839565b5b602082029050602081019050919050565b5f80fd5b5f620024816200247b8462002439565b6200189c565b90508083825260208201905060208402830185811115620024a757620024a662002467565b5b835b81811015620024d45780620024bf8882620019b7565b845260208401935050602081019050620024a9565b5050509392505050565b5f82601f830112620024f557620024f462001821565b5b8151620025078482602086016200246b565b91505092915050565b5f6020828403121562002528576200252762001819565b5b5f82015167ffffffffffffffff8111156200254857620025476200181d565b5b6200255684828501620024de565b91505092915050565b5f819050919050565b5f62002588620025826200257c846200255f565b62001bc8565b62001995565b9050919050565b6200259a8162002568565b82525050565b5f60a082019050620025b55f8301886200226b565b620025c460208301876200258f565b8181036040830152620025d881866200239f565b9050620025e9606083018562001ded565b620025f860808301846200226b565b9695505050505050565b60805160a05160c05160e051612c31620026755f395f610a6301525f8181611bd90152611da701525f81816109af0152818161137301526113cb01525f818161076901528181610fd60152818161101b0152818161105f015281816110a3015281816110dd015261116c0152612c315ff3fe608060405234801561000f575f80fd5b50600436106101cd575f3560e01c80634fbee19311610102578063a25ba183116100a0578063dd62ed3e1161006f578063dd62ed3e14610532578063de5a39fe14610562578063e4d534cb1461057e578063f2fde38b1461059c576101cd565b8063a25ba183146104a9578063a8aa1b31146104c8578063a9059cbb146104e6578063bccff40614610516576101cd565b806370a08231116100dc57806370a0823114610433578063715018a6146104635780638da5cb5b1461046d57806395d89b411461048b576101cd565b80634fbee193146103b7578063590ffdce146103e75780636dd3d39f14610403576101cd565b806321b024861161016f578063313ce56711610149578063313ce5671461034157806332cb6b0c1461035f578063412201041461037d57806348cd4cb114610399576101cd565b806321b02486146102b157806323b872dd146102e15780632d83846514610311576101cd565b80630c18d4ce116101ab5780630c18d4ce146102295780630fe3fe7d1461024757806315e9fe151461027757806318160ddd14610293576101cd565b806301339c21146101d157806306fdde03146101db578063095ea7b3146101f9575b5f80fd5b6101d96105b8565b005b6101e3610614565b6040516101f09190611fe5565b60405180910390f35b610213600480360381019061020e91906120a3565b6106a4565b60405161022091906120fb565b60405180910390f35b6102316106c6565b60405161023e9190612123565b60405180910390f35b610261600480360381019061025c91906120a3565b6106cc565b60405161026e9190612123565b60405180910390f35b610291600480360381019061028c919061213c565b6106ec565b005b61029b6106fe565b6040516102a89190612123565b60405180910390f35b6102cb60048036038101906102c6919061213c565b610707565b6040516102d89190612123565b60405180910390f35b6102fb60048036038101906102f69190612167565b61071c565b60405161030891906120fb565b60405180910390f35b61032b6004803603810190610326919061213c565b61074a565b6040516103389190612123565b60405180910390f35b61034961075f565b60405161035691906121d2565b60405180910390f35b610367610767565b6040516103749190612123565b60405180910390f35b61039760048036038101906103929190612215565b61078b565b005b6103a16107eb565b6040516103ae9190612123565b60405180910390f35b6103d160048036038101906103cc9190612253565b6107f1565b6040516103de91906120fb565b60405180910390f35b61040160048036038101906103fc9190612215565b61080e565b005b61041d60048036038101906104189190612253565b61086e565b60405161042a91906120fb565b60405180910390f35b61044d60048036038101906104489190612253565b61088b565b60405161045a9190612123565b60405180910390f35b61046b6108d0565b005b6104756108e3565b604051610482919061228d565b60405180910390f35b61049361090b565b6040516104a09190611fe5565b60405180910390f35b6104b161099b565b6040516104bf9291906122a6565b60405180910390f35b6104d06109ad565b6040516104dd919061228d565b60405180910390f35b61050060048036038101906104fb91906120a3565b6109d1565b60405161050d91906120fb565b60405180910390f35b610530600480360381019061052b9190612253565b6109f3565b005b61054c600480360381019061054791906122cd565b610b6f565b6040516105599190612123565b60405180910390f35b61057c6004803603810190610577919061213c565b610bf1565b005b610586610c03565b604051610593919061228d565b60405180910390f35b6105b660048036038101906105b19190612253565b610c28565b005b6105c0610cac565b5f60075414610604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fb90612355565b60405180910390fd5b4360078190555042600881905550565b606060038054610623906123a0565b80601f016020809104026020016040519081016040528092919081815260200182805461064f906123a0565b801561069a5780601f106106715761010080835404028352916020019161069a565b820191905f5260205f20905b81548152906001019060200180831161067d57829003601f168201915b5050505050905090565b5f806106ae610d33565b90506106bb818585610d3a565b600191505092915050565b60085481565b600c602052815f5260405f20602052805f5260405f205f91509150505481565b6106f4610cac565b8060118190555050565b5f600254905090565b600e602052805f5260405f205f915090505481565b5f80610726610d33565b9050610733858285610d4c565b61073e858585610ddf565b60019150509392505050565b6010602052805f5260405f205f915090505481565b5f6012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610793610cac565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075481565b600a602052805f5260405f205f915054906101000a900460ff1681565b610816610cac565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108d8610cac565b6108e15f610ecf565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461091a906123a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610946906123a0565b80156109915780601f1061096857610100808354040283529160200191610991565b820191905f5260205f20905b81548152906001019060200180831161097457829003601f168201915b5050505050905090565b5f806109a5610f92565b915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f806109db610d33565b90506109e8818585610ddf565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a589061241a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610aed5750610abe6108e3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390612482565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610bf9610cac565b80600f8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c30610cac565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ca0575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c97919061228d565b60405180910390fd5b610ca981610ecf565b50565b610cb4610d33565b73ffffffffffffffffffffffffffffffffffffffff16610cd26108e3565b73ffffffffffffffffffffffffffffffffffffffff1614610d3157610cf5610d33565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d28919061228d565b60405180910390fd5b565b5f33905090565b610d478383836001611193565b505050565b5f610d578484610b6f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610dd95781811015610dca578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610dc1939291906124a0565b60405180910390fd5b610dd884848484035f611193565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e4f575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e46919061228d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ebf575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610eb6919061228d565b60405180910390fd5b610eca838383611362565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f60085403610fa8575f809150915061118f565b5f60085442610fb79190612502565b9050610e1081101561110e57603c81101561100757610dac92506101907f0000000000000000000000000000000000000000000000000000000000000000610fff9190612562565b91505061118f565b61012c81101561104c57610bb8925061014d7f00000000000000000000000000000000000000000000000000000000000000006110449190612562565b91505061118f565b6101e0811015611090576109c4925060a67f00000000000000000000000000000000000000000000000000000000000000006110889190612562565b91505061118f565b6103848110156110d4576107d0925060647f00000000000000000000000000000000000000000000000000000000000000006110cc9190612562565b91505061118f565b6101f4925060587f00000000000000000000000000000000000000000000000000000000000000006111069190612562565b91505061118f565b681b1ae4d6e2ef500000600954101561112b57610190925061116a565b6825f273933db570000060095410156111485761012c9250611169565b6830ca024f987b90000060095410156111645760c89250611168565b5f92505b5b5b7f00000000000000000000000000000000000000000000000000000000000000009150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611203575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016111fa919061228d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611273575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161126a919061228d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561135c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113539190612123565b60405180910390a35b50505050565b5f8061136c610f92565b915091505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061141957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561187c575f60075411806114745750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa906125dc565b60405180910390fd5b5f83146118175780801561150e5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116da575f600854118015611531575060b46008544261152f9190612502565b105b156116a357600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f2054106115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061266a565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f81548092919061162290612688565b9190505550600f54600e5f4381526020019081526020015f20541061167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390612719565b60405180910390fd5b600e5f4381526020019081526020015f205f81548092919061169d90612688565b91905055505b5f61271084866116b39190612737565b6116bd9190612562565b905080856116cb9190612502565b94506116d8873083611936565b505b8015801561172f5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611812575f600854118015611752575060b4600854426117509190612502565b105b156117d35760115460105f4381526020019081526020015f2054106117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906127c2565b60405180910390fd5b60105f4381526020019081526020015f205f8154809291906117cd90612688565b91905055505b5f61271084866117e39190612737565b6117ed9190612562565b905080856117fb9190612502565b9450611808873083611936565b611810611b4f565b505b61187b565b8015801561186c5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561187a57611879611b4f565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806118e45750816118d68661088b565b856118e191906127e0565b11155b611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a9061285d565b60405180910390fd5b61192e868686611936565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611986578060025f82825461197a91906127e0565b92505081905550611a54565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a0f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611a06939291906124a0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a9b578060025f8282540392505081905550611ae5565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b429190612123565b60405180910390a3505050565b5f60085442611b5e9190612502565b905061012c811015611b705750611f59565b5f611b7a3061088b565b90505f8103611b8a575050611f59565b5f600267ffffffffffffffff811115611ba657611ba561287b565b5b604051908082528060200260200182016040528015611bd45781602001602082028036833780820191505090505b5090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611c0b57611c0a6128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611c5a57611c596128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611cec9291906129ce565b5f60405180830381865afa158015611d06573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611d2e9190612b23565b600181518110611d4157611d406128a8565b5b6020026020010151905080831115611d57578092505b30825f81518110611d6b57611d6a6128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000082600181518110611dda57611dd96128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ec6959493929190612ba3565b5f604051808303815f87803b158015611edd575f80fd5b505af1158015611eef573d5f803e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611f3b9190612502565b60095f828254611f4b91906127e0565b925050819055505050505050505b565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611f92578082015181840152602081019050611f77565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611fb782611f5b565b611fc18185611f65565b9350611fd1818560208601611f75565b611fda81611f9d565b840191505092915050565b5f6020820190508181035f830152611ffd8184611fad565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61203f82612016565b9050919050565b61204f81612035565b8114612059575f80fd5b50565b5f8135905061206a81612046565b92915050565b5f819050919050565b61208281612070565b811461208c575f80fd5b50565b5f8135905061209d81612079565b92915050565b5f80604083850312156120b9576120b861200e565b5b5f6120c68582860161205c565b92505060206120d78582860161208f565b9150509250929050565b5f8115159050919050565b6120f5816120e1565b82525050565b5f60208201905061210e5f8301846120ec565b92915050565b61211d81612070565b82525050565b5f6020820190506121365f830184612114565b92915050565b5f602082840312156121515761215061200e565b5b5f61215e8482850161208f565b91505092915050565b5f805f6060848603121561217e5761217d61200e565b5b5f61218b8682870161205c565b935050602061219c8682870161205c565b92505060406121ad8682870161208f565b9150509250925092565b5f60ff82169050919050565b6121cc816121b7565b82525050565b5f6020820190506121e55f8301846121c3565b92915050565b6121f4816120e1565b81146121fe575f80fd5b50565b5f8135905061220f816121eb565b92915050565b5f806040838503121561222b5761222a61200e565b5b5f6122388582860161205c565b925050602061224985828601612201565b9150509250929050565b5f602082840312156122685761226761200e565b5b5f6122758482850161205c565b91505092915050565b61228781612035565b82525050565b5f6020820190506122a05f83018461227e565b92915050565b5f6040820190506122b95f830185612114565b6122c66020830184612114565b9392505050565b5f80604083850312156122e3576122e261200e565b5b5f6122f08582860161205c565b92505060206123018582860161205c565b9150509250929050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f61233f601783611f65565b915061234a8261230b565b602082019050919050565b5f6020820190508181035f83015261236c81612333565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806123b757607f821691505b6020821081036123ca576123c9612373565b5b50919050565b7f66656577616c6c65742d69732d300000000000000000000000000000000000005f82015250565b5f612404600e83611f65565b915061240f826123d0565b602082019050919050565b5f6020820190508181035f830152612431816123f8565b9050919050565b7f6f6e6c792d6465706c6f796572000000000000000000000000000000000000005f82015250565b5f61246c600d83611f65565b915061247782612438565b602082019050919050565b5f6020820190508181035f83015261249981612460565b9050919050565b5f6060820190506124b35f83018661227e565b6124c06020830185612114565b6124cd6040830184612114565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61250c82612070565b915061251783612070565b925082820390508181111561252f5761252e6124d5565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61256c82612070565b915061257783612070565b92508261258757612586612535565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f6125c6601383611f65565b91506125d182612592565b602082019050919050565b5f6020820190508181035f8301526125f3816125ba565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f612654602983611f65565b915061265f826125fa565b604082019050919050565b5f6020820190508181035f83015261268181612648565b9050919050565b5f61269282612070565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126c4576126c36124d5565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f612703601e83611f65565b915061270e826126cf565b602082019050919050565b5f6020820190508181035f830152612730816126f7565b9050919050565b5f61274182612070565b915061274c83612070565b925082820261275a81612070565b91508282048414831517612771576127706124d5565b5b5092915050565b7f6d61782d73656c6c2d7478732d7065722d626c6f636b2d6578636565646564005f82015250565b5f6127ac601f83611f65565b91506127b782612778565b602082019050919050565b5f6020820190508181035f8301526127d9816127a0565b9050919050565b5f6127ea82612070565b91506127f583612070565b925082820190508082111561280d5761280c6124d5565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f612847601883611f65565b915061285282612813565b602082019050919050565b5f6020820190508181035f8301526128748161283b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6129016128fc6128f7846128d5565b6128de565b612070565b9050919050565b612911816128e7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61294981612035565b82525050565b5f61295a8383612940565b60208301905092915050565b5f602082019050919050565b5f61297c82612917565b6129868185612921565b935061299183612931565b805f5b838110156129c15781516129a8888261294f565b97506129b383612966565b925050600181019050612994565b5085935050505092915050565b5f6040820190506129e15f830185612908565b81810360208301526129f38184612972565b90509392505050565b5f80fd5b612a0982611f9d565b810181811067ffffffffffffffff82111715612a2857612a2761287b565b5b80604052505050565b5f612a3a612005565b9050612a468282612a00565b919050565b5f67ffffffffffffffff821115612a6557612a6461287b565b5b602082029050602081019050919050565b5f80fd5b5f81519050612a8881612079565b92915050565b5f612aa0612a9b84612a4b565b612a31565b90508083825260208201905060208402830185811115612ac357612ac2612a76565b5b835b81811015612aec5780612ad88882612a7a565b845260208401935050602081019050612ac5565b5050509392505050565b5f82601f830112612b0a57612b096129fc565b5b8151612b1a848260208601612a8e565b91505092915050565b5f60208284031215612b3857612b3761200e565b5b5f82015167ffffffffffffffff811115612b5557612b54612012565b5b612b6184828501612af6565b91505092915050565b5f819050919050565b5f612b8d612b88612b8384612b6a565b6128de565b612070565b9050919050565b612b9d81612b73565b82525050565b5f60a082019050612bb65f830188612114565b612bc36020830187612b94565b8181036040830152612bd58186612972565b9050612be4606083018561227e565b612bf16080830184612114565b969550505050505056fea26469706673582212200f6c2779ba3b2b37c5e58c89c5174a3802dd77d755092378b8bf253428a46d1964736f6c63430008140033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000204fce5e3e250261100000000000000000000000000000008c970feb41174b863160458e879e4bebb0f7b3800000000000000000000000000000000000000000000000000000000000000005417272617900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054152524159000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101cd575f3560e01c80634fbee19311610102578063a25ba183116100a0578063dd62ed3e1161006f578063dd62ed3e14610532578063de5a39fe14610562578063e4d534cb1461057e578063f2fde38b1461059c576101cd565b8063a25ba183146104a9578063a8aa1b31146104c8578063a9059cbb146104e6578063bccff40614610516576101cd565b806370a08231116100dc57806370a0823114610433578063715018a6146104635780638da5cb5b1461046d57806395d89b411461048b576101cd565b80634fbee193146103b7578063590ffdce146103e75780636dd3d39f14610403576101cd565b806321b024861161016f578063313ce56711610149578063313ce5671461034157806332cb6b0c1461035f578063412201041461037d57806348cd4cb114610399576101cd565b806321b02486146102b157806323b872dd146102e15780632d83846514610311576101cd565b80630c18d4ce116101ab5780630c18d4ce146102295780630fe3fe7d1461024757806315e9fe151461027757806318160ddd14610293576101cd565b806301339c21146101d157806306fdde03146101db578063095ea7b3146101f9575b5f80fd5b6101d96105b8565b005b6101e3610614565b6040516101f09190611fe5565b60405180910390f35b610213600480360381019061020e91906120a3565b6106a4565b60405161022091906120fb565b60405180910390f35b6102316106c6565b60405161023e9190612123565b60405180910390f35b610261600480360381019061025c91906120a3565b6106cc565b60405161026e9190612123565b60405180910390f35b610291600480360381019061028c919061213c565b6106ec565b005b61029b6106fe565b6040516102a89190612123565b60405180910390f35b6102cb60048036038101906102c6919061213c565b610707565b6040516102d89190612123565b60405180910390f35b6102fb60048036038101906102f69190612167565b61071c565b60405161030891906120fb565b60405180910390f35b61032b6004803603810190610326919061213c565b61074a565b6040516103389190612123565b60405180910390f35b61034961075f565b60405161035691906121d2565b60405180910390f35b610367610767565b6040516103749190612123565b60405180910390f35b61039760048036038101906103929190612215565b61078b565b005b6103a16107eb565b6040516103ae9190612123565b60405180910390f35b6103d160048036038101906103cc9190612253565b6107f1565b6040516103de91906120fb565b60405180910390f35b61040160048036038101906103fc9190612215565b61080e565b005b61041d60048036038101906104189190612253565b61086e565b60405161042a91906120fb565b60405180910390f35b61044d60048036038101906104489190612253565b61088b565b60405161045a9190612123565b60405180910390f35b61046b6108d0565b005b6104756108e3565b604051610482919061228d565b60405180910390f35b61049361090b565b6040516104a09190611fe5565b60405180910390f35b6104b161099b565b6040516104bf9291906122a6565b60405180910390f35b6104d06109ad565b6040516104dd919061228d565b60405180910390f35b61050060048036038101906104fb91906120a3565b6109d1565b60405161050d91906120fb565b60405180910390f35b610530600480360381019061052b9190612253565b6109f3565b005b61054c600480360381019061054791906122cd565b610b6f565b6040516105599190612123565b60405180910390f35b61057c6004803603810190610577919061213c565b610bf1565b005b610586610c03565b604051610593919061228d565b60405180910390f35b6105b660048036038101906105b19190612253565b610c28565b005b6105c0610cac565b5f60075414610604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fb90612355565b60405180910390fd5b4360078190555042600881905550565b606060038054610623906123a0565b80601f016020809104026020016040519081016040528092919081815260200182805461064f906123a0565b801561069a5780601f106106715761010080835404028352916020019161069a565b820191905f5260205f20905b81548152906001019060200180831161067d57829003601f168201915b5050505050905090565b5f806106ae610d33565b90506106bb818585610d3a565b600191505092915050565b60085481565b600c602052815f5260405f20602052805f5260405f205f91509150505481565b6106f4610cac565b8060118190555050565b5f600254905090565b600e602052805f5260405f205f915090505481565b5f80610726610d33565b9050610733858285610d4c565b61073e858585610ddf565b60019150509392505050565b6010602052805f5260405f205f915090505481565b5f6012905090565b7f0000000000000000000000000000000000000000204fce5e3e2502611000000081565b610793610cac565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075481565b600a602052805f5260405f205f915054906101000a900460ff1681565b610816610cac565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108d8610cac565b6108e15f610ecf565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461091a906123a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610946906123a0565b80156109915780601f1061096857610100808354040283529160200191610991565b820191905f5260205f20905b81548152906001019060200180831161097457829003601f168201915b5050505050905090565b5f806109a5610f92565b915091509091565b7f000000000000000000000000c61eb96c899c8b27007f59ff8ee314867c09fba781565b5f806109db610d33565b90506109e8818585610ddf565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a589061241a565b60405180910390fd5b7f0000000000000000000000000b4cd2414e5075dc7fd120e38083d45b760550e273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610aed5750610abe6108e3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390612482565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610bf9610cac565b80600f8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c30610cac565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ca0575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c97919061228d565b60405180910390fd5b610ca981610ecf565b50565b610cb4610d33565b73ffffffffffffffffffffffffffffffffffffffff16610cd26108e3565b73ffffffffffffffffffffffffffffffffffffffff1614610d3157610cf5610d33565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d28919061228d565b60405180910390fd5b565b5f33905090565b610d478383836001611193565b505050565b5f610d578484610b6f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610dd95781811015610dca578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610dc1939291906124a0565b60405180910390fd5b610dd884848484035f611193565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e4f575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e46919061228d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ebf575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610eb6919061228d565b60405180910390fd5b610eca838383611362565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f60085403610fa8575f809150915061118f565b5f60085442610fb79190612502565b9050610e1081101561110e57603c81101561100757610dac92506101907f0000000000000000000000000000000000000000204fce5e3e25026110000000610fff9190612562565b91505061118f565b61012c81101561104c57610bb8925061014d7f0000000000000000000000000000000000000000204fce5e3e250261100000006110449190612562565b91505061118f565b6101e0811015611090576109c4925060a67f0000000000000000000000000000000000000000204fce5e3e250261100000006110889190612562565b91505061118f565b6103848110156110d4576107d0925060647f0000000000000000000000000000000000000000204fce5e3e250261100000006110cc9190612562565b91505061118f565b6101f4925060587f0000000000000000000000000000000000000000204fce5e3e250261100000006111069190612562565b91505061118f565b681b1ae4d6e2ef500000600954101561112b57610190925061116a565b6825f273933db570000060095410156111485761012c9250611169565b6830ca024f987b90000060095410156111645760c89250611168565b5f92505b5b5b7f0000000000000000000000000000000000000000204fce5e3e250261100000009150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611203575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016111fa919061228d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611273575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161126a919061228d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561135c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113539190612123565b60405180910390a35b50505050565b5f8061136c610f92565b915091505f7f000000000000000000000000c61eb96c899c8b27007f59ff8ee314867c09fba773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061141957507f000000000000000000000000c61eb96c899c8b27007f59ff8ee314867c09fba773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561187c575f60075411806114745750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa906125dc565b60405180910390fd5b5f83146118175780801561150e5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116da575f600854118015611531575060b46008544261152f9190612502565b105b156116a357600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f2054106115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061266a565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f81548092919061162290612688565b9190505550600f54600e5f4381526020019081526020015f20541061167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390612719565b60405180910390fd5b600e5f4381526020019081526020015f205f81548092919061169d90612688565b91905055505b5f61271084866116b39190612737565b6116bd9190612562565b905080856116cb9190612502565b94506116d8873083611936565b505b8015801561172f5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611812575f600854118015611752575060b4600854426117509190612502565b105b156117d35760115460105f4381526020019081526020015f2054106117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906127c2565b60405180910390fd5b60105f4381526020019081526020015f205f8154809291906117cd90612688565b91905055505b5f61271084866117e39190612737565b6117ed9190612562565b905080856117fb9190612502565b9450611808873083611936565b611810611b4f565b505b61187b565b8015801561186c5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561187a57611879611b4f565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806118e45750816118d68661088b565b856118e191906127e0565b11155b611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a9061285d565b60405180910390fd5b61192e868686611936565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611986578060025f82825461197a91906127e0565b92505081905550611a54565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a0f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611a06939291906124a0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a9b578060025f8282540392505081905550611ae5565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b429190612123565b60405180910390a3505050565b5f60085442611b5e9190612502565b905061012c811015611b705750611f59565b5f611b7a3061088b565b90505f8103611b8a575050611f59565b5f600267ffffffffffffffff811115611ba657611ba561287b565b5b604051908082528060200260200182016040528015611bd45781602001602082028036833780820191505090505b5090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2815f81518110611c0b57611c0a6128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611c5a57611c596128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611cec9291906129ce565b5f60405180830381865afa158015611d06573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611d2e9190612b23565b600181518110611d4157611d406128a8565b5b6020026020010151905080831115611d57578092505b30825f81518110611d6b57611d6a6128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282600181518110611dda57611dd96128a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ec6959493929190612ba3565b5f604051808303815f87803b158015611edd575f80fd5b505af1158015611eef573d5f803e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611f3b9190612502565b60095f828254611f4b91906127e0565b925050819055505050505050505b565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611f92578082015181840152602081019050611f77565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611fb782611f5b565b611fc18185611f65565b9350611fd1818560208601611f75565b611fda81611f9d565b840191505092915050565b5f6020820190508181035f830152611ffd8184611fad565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61203f82612016565b9050919050565b61204f81612035565b8114612059575f80fd5b50565b5f8135905061206a81612046565b92915050565b5f819050919050565b61208281612070565b811461208c575f80fd5b50565b5f8135905061209d81612079565b92915050565b5f80604083850312156120b9576120b861200e565b5b5f6120c68582860161205c565b92505060206120d78582860161208f565b9150509250929050565b5f8115159050919050565b6120f5816120e1565b82525050565b5f60208201905061210e5f8301846120ec565b92915050565b61211d81612070565b82525050565b5f6020820190506121365f830184612114565b92915050565b5f602082840312156121515761215061200e565b5b5f61215e8482850161208f565b91505092915050565b5f805f6060848603121561217e5761217d61200e565b5b5f61218b8682870161205c565b935050602061219c8682870161205c565b92505060406121ad8682870161208f565b9150509250925092565b5f60ff82169050919050565b6121cc816121b7565b82525050565b5f6020820190506121e55f8301846121c3565b92915050565b6121f4816120e1565b81146121fe575f80fd5b50565b5f8135905061220f816121eb565b92915050565b5f806040838503121561222b5761222a61200e565b5b5f6122388582860161205c565b925050602061224985828601612201565b9150509250929050565b5f602082840312156122685761226761200e565b5b5f6122758482850161205c565b91505092915050565b61228781612035565b82525050565b5f6020820190506122a05f83018461227e565b92915050565b5f6040820190506122b95f830185612114565b6122c66020830184612114565b9392505050565b5f80604083850312156122e3576122e261200e565b5b5f6122f08582860161205c565b92505060206123018582860161205c565b9150509250929050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f61233f601783611f65565b915061234a8261230b565b602082019050919050565b5f6020820190508181035f83015261236c81612333565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806123b757607f821691505b6020821081036123ca576123c9612373565b5b50919050565b7f66656577616c6c65742d69732d300000000000000000000000000000000000005f82015250565b5f612404600e83611f65565b915061240f826123d0565b602082019050919050565b5f6020820190508181035f830152612431816123f8565b9050919050565b7f6f6e6c792d6465706c6f796572000000000000000000000000000000000000005f82015250565b5f61246c600d83611f65565b915061247782612438565b602082019050919050565b5f6020820190508181035f83015261249981612460565b9050919050565b5f6060820190506124b35f83018661227e565b6124c06020830185612114565b6124cd6040830184612114565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61250c82612070565b915061251783612070565b925082820390508181111561252f5761252e6124d5565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61256c82612070565b915061257783612070565b92508261258757612586612535565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f6125c6601383611f65565b91506125d182612592565b602082019050919050565b5f6020820190508181035f8301526125f3816125ba565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f612654602983611f65565b915061265f826125fa565b604082019050919050565b5f6020820190508181035f83015261268181612648565b9050919050565b5f61269282612070565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126c4576126c36124d5565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f612703601e83611f65565b915061270e826126cf565b602082019050919050565b5f6020820190508181035f830152612730816126f7565b9050919050565b5f61274182612070565b915061274c83612070565b925082820261275a81612070565b91508282048414831517612771576127706124d5565b5b5092915050565b7f6d61782d73656c6c2d7478732d7065722d626c6f636b2d6578636565646564005f82015250565b5f6127ac601f83611f65565b91506127b782612778565b602082019050919050565b5f6020820190508181035f8301526127d9816127a0565b9050919050565b5f6127ea82612070565b91506127f583612070565b925082820190508082111561280d5761280c6124d5565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f612847601883611f65565b915061285282612813565b602082019050919050565b5f6020820190508181035f8301526128748161283b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6129016128fc6128f7846128d5565b6128de565b612070565b9050919050565b612911816128e7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61294981612035565b82525050565b5f61295a8383612940565b60208301905092915050565b5f602082019050919050565b5f61297c82612917565b6129868185612921565b935061299183612931565b805f5b838110156129c15781516129a8888261294f565b97506129b383612966565b925050600181019050612994565b5085935050505092915050565b5f6040820190506129e15f830185612908565b81810360208301526129f38184612972565b90509392505050565b5f80fd5b612a0982611f9d565b810181811067ffffffffffffffff82111715612a2857612a2761287b565b5b80604052505050565b5f612a3a612005565b9050612a468282612a00565b919050565b5f67ffffffffffffffff821115612a6557612a6461287b565b5b602082029050602081019050919050565b5f80fd5b5f81519050612a8881612079565b92915050565b5f612aa0612a9b84612a4b565b612a31565b90508083825260208201905060208402830185811115612ac357612ac2612a76565b5b835b81811015612aec5780612ad88882612a7a565b845260208401935050602081019050612ac5565b5050509392505050565b5f82601f830112612b0a57612b096129fc565b5b8151612b1a848260208601612a8e565b91505092915050565b5f60208284031215612b3857612b3761200e565b5b5f82015167ffffffffffffffff811115612b5557612b54612012565b5b612b6184828501612af6565b91505092915050565b5f819050919050565b5f612b8d612b88612b8384612b6a565b6128de565b612070565b9050919050565b612b9d81612b73565b82525050565b5f60a082019050612bb65f830188612114565b612bc36020830187612b94565b8181036040830152612bd58186612972565b9050612be4606083018561227e565b612bf16080830184612114565b969550505050505056fea26469706673582212200f6c2779ba3b2b37c5e58c89c5174a3802dd77d755092378b8bf253428a46d1964736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000204fce5e3e250261100000000000000000000000000000008c970feb41174b863160458e879e4bebb0f7b3800000000000000000000000000000000000000000000000000000000000000005417272617900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054152524159000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Array
Arg [1] : symbol (string): ARRAY
Arg [2] : maxSupply (uint256): 10000000000000000000000000000
Arg [3] : _feewallet (address): 0x8C970feB41174b863160458E879E4BEBB0f7b380
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000204fce5e3e25026110000000
Arg [3] : 0000000000000000000000008c970feb41174b863160458e879e4bebb0f7b380
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4172726179000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 4152524159000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31461:8930:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33812:186;;;:::i;:::-;;13070:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15363:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31852:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32059:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14172:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32238:72;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16163:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32364:73;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14023:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31501:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34176:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31820:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31924:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34006:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31989:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14334:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24792:103;;;:::i;:::-;;24117:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13280:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34602:165;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;31543:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14657:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33522:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14902:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34356:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31579:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25050:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33812:186;24003:13;:11;:13::i;:::-;33882:1:::1;33868:10;;:15;33860:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33935:12;33922:10;:25;;;;33975:15;33958:14;:32;;;;33812:186::o:0;13070:91::-;13115:13;13148:5;13141:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13070:91;:::o;15363:190::-;15436:4;15453:13;15469:12;:10;:12::i;:::-;15453:28;;15492:31;15501:5;15508:7;15517:5;15492:8;:31::i;:::-;15541:4;15534:11;;;15363:190;;;;:::o;31852:29::-;;;;:::o;32059:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34477:::-;24003:13;:11;:13::i;:::-;34577:9:::1;34555:19;:31;;;;34477:117:::0;:::o;14172:99::-;14224:7;14251:12;;14244:19;;14172:99;:::o;32238:72::-;;;;;;;;;;;;;;;;;:::o;16163:249::-;16250:4;16267:15;16285:12;:10;:12::i;:::-;16267:30;;16308:37;16324:4;16330:7;16339:5;16308:15;:37::i;:::-;16356:26;16366:4;16372:2;16376:5;16356:9;:26::i;:::-;16400:4;16393:11;;;16163:249;;;;;:::o;32364:73::-;;;;;;;;;;;;;;;;;:::o;14023:84::-;14072:5;14097:2;14090:9;;14023:84;:::o;31501:35::-;;;:::o;34176:172::-;24003:13;:11;:13::i;:::-;34332:8:::1;34297:23;:32;34321:7;34297:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;34176:172:::0;;:::o;31820:25::-;;;;:::o;31924:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34006:162::-;24003:13;:11;:13::i;:::-;34152:8:::1;34122:18;:27;34141:7;34122:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;34006:162:::0;;:::o;31989:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;14334:118::-;14399:7;14426:9;:18;14436:7;14426:18;;;;;;;;;;;;;;;;14419:25;;14334:118;;;:::o;24792:103::-;24003:13;:11;:13::i;:::-;24857:30:::1;24884:1;24857:18;:30::i;:::-;24792:103::o:0;24117:87::-;24163:7;24190:6;;;;;;;;;;;24183:13;;24117:87;:::o;13280:95::-;13327:13;13360:7;13353:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13280:95;:::o;34602:165::-;34680:15;34697:18;34740:19;:17;:19::i;:::-;34733:26;;;;34602:165;;:::o;31543:29::-;;;:::o;14657:182::-;14726:4;14743:13;14759:12;:10;:12::i;:::-;14743:28;;14782:27;14792:5;14799:2;14803:5;14782:9;:27::i;:::-;14827:4;14820:11;;;14657:182;;;;:::o;33522:282::-;33618:1;33594:26;;:12;:26;;;33586:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;33686:9;33672:23;;:10;:23;;;:48;;;;33713:7;:5;:7::i;:::-;33699:21;;:10;:21;;;33672:48;33650:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33784:12;33772:9;;:24;;;;;;;;;;;;;;;;;;33522:282;:::o;14902:142::-;14982:7;15009:11;:18;15021:5;15009:18;;;;;;;;;;;;;;;:27;15028:7;15009:27;;;;;;;;;;;;;;;;15002:34;;14902:142;;;;:::o;34356:113::-;24003:13;:11;:13::i;:::-;34453:8:::1;34432:18;:29;;;;34356:113:::0;:::o;31579:24::-;;;;;;;;;;;;;:::o;25050:220::-;24003:13;:11;:13::i;:::-;25155:1:::1;25135:22;;:8;:22;;::::0;25131:93:::1;;25209:1;25181:31;;;;;;;;;;;:::i;:::-;;;;;;;;25131:93;25234:28;25253:8;25234:18;:28::i;:::-;25050:220:::0;:::o;24282:166::-;24353:12;:10;:12::i;:::-;24342:23;;:7;:5;:7::i;:::-;:23;;;24338:103;;24416:12;:10;:12::i;:::-;24389:40;;;;;;;;;;;:::i;:::-;;;;;;;;24338:103;24282:166::o;4389:98::-;4442:7;4469:10;4462:17;;4389:98;:::o;20222:130::-;20307:37;20316:5;20323:7;20332:5;20339:4;20307:8;:37::i;:::-;20222:130;;;:::o;21954:486::-;22054:24;22081:25;22091:5;22098:7;22081:9;:25::i;:::-;22054:52;;22140:17;22121:16;:36;22117:316;;;22197:5;22178:16;:24;22174:132;;;22257:7;22266:16;22284:5;22230:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;22174:132;22349:57;22358:5;22365:7;22393:5;22374:16;:24;22400:5;22349:8;:57::i;:::-;22117:316;22043:397;21954:486;;;:::o;16797:308::-;16897:1;16881:18;;:4;:18;;;16877:88;;16950:1;16923:30;;;;;;;;;;;:::i;:::-;;;;;;;;16877:88;16993:1;16979:16;;:2;:16;;;16975:88;;17048:1;17019:32;;;;;;;;;;;:::i;:::-;;;;;;;;16975:88;17073:24;17081:4;17087:2;17091:5;17073:7;:24::i;:::-;16797:308;;;:::o;25430:191::-;25504:16;25523:6;;;;;;;;;;;25504:25;;25549:8;25540:6;;:17;;;;;;;;;;;;;;;;;;25604:8;25573:40;;25594:8;25573:40;;;;;;;;;;;;25493:128;25430:191;:::o;34775:1724::-;34854:15;34871:18;34929:1;34911:14;;:19;34907:65;;34955:1;34958;34947:13;;;;;;34907:65;34982:20;35023:14;;35005:15;:32;;;;:::i;:::-;34982:55;;35069:4;35054:12;:19;35050:1054;;;35131:2;35116:12;:17;35112:183;;;35164:4;35154:14;;35220:3;35207:10;:16;;;;:::i;:::-;35194:29;;35251:28;;;35112:183;35352:3;35337:12;:18;35333:183;;;35386:4;35376:14;;35442:3;35429:10;:16;;;;:::i;:::-;35416:29;;35472:28;;;35333:183;35573:3;35558:12;:18;35554:183;;;35607:4;35597:14;;35663:3;35650:10;:16;;;;:::i;:::-;35637:29;;35693:28;;;35554:183;35772:3;35757:12;:18;35753:210;;;35835:4;35825:14;;35891:3;35878:10;:16;;;;:::i;:::-;35865:29;;35919:28;;;35753:210;35989:3;35979:13;;36039:2;36026:10;:15;;;;:::i;:::-;36013:28;;36064;;;35050:1054;36134:9;36120:11;;:23;36116:291;;;36170:3;36160:13;;36116:291;;;36216:9;36202:11;;:23;36198:209;;;36252:3;36242:13;;36198:209;;;36298:9;36284:11;;:23;36280:127;;;36334:3;36324:13;;36280:127;;;36387:1;36377:11;;36280:127;36198:209;36116:291;36430:10;36417:23;;36463:28;34775:1724;;;:::o;21219:443::-;21349:1;21332:19;;:5;:19;;;21328:91;;21404:1;21375:32;;;;;;;;;;;:::i;:::-;;;;;;;;21328:91;21452:1;21433:21;;:7;:21;;;21429:92;;21506:1;21478:31;;;;;;;;;;;:::i;:::-;;;;;;;;21429:92;21561:5;21531:11;:18;21543:5;21531:18;;;;;;;;;;;;;;;:27;21550:7;21531:27;;;;;;;;;;;;;;;:35;;;;21581:9;21577:78;;;21628:7;21612:31;;21621:5;21612:31;;;21637:5;21612:31;;;;;;:::i;:::-;;;;;;;;21577:78;21219:443;;;;:::o;36507:2751::-;36629:15;36646:18;36668:19;:17;:19::i;:::-;36628:59;;;;36700:10;36721:4;36713:12;;:4;:12;;;36700:25;;36740:5;:19;;;;36755:4;36749:10;;:2;:10;;;36740:19;36736:2321;;;36815:1;36802:10;;:14;:40;;;;36820:18;:22;36839:2;36820:22;;;;;;;;;;;;;;;;;;;;;;;;;36802:40;36776:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;36929:1;36918:7;:12;36914:2132;;36955:5;:32;;;;;36965:18;:22;36984:2;36965:22;;;;;;;;;;;;;;;;;;;;;;;;;36964:23;36955:32;36951:1097;;;37059:1;37042:14;;:18;:85;;;;;37124:3;37107:14;;37089:15;:32;;;;:::i;:::-;:38;37042:85;37012:856;;;37334:27;;37216:26;:37;37243:9;37216:37;;;;;;;;;;;;;;;:115;37288:12;37216:115;;;;;;;;;;;;:145;37178:284;;;;;;;;;;;;:::i;:::-;;;;;;;;;37489:26;:37;37516:9;37489:37;;;;;;;;;;;;;;;:51;37527:12;37489:51;;;;;;;;;;;;:53;;;;;;;;;:::i;:::-;;;;;;37676:18;;37609:17;:31;37627:12;37609:31;;;;;;;;;;;;:85;37571:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;37811:17;:31;37829:12;37811:31;;;;;;;;;;;;:33;;;;;;;;;:::i;:::-;;;;;;37012:856;37892:11;37926:5;37915:7;37907:5;:15;;;;:::i;:::-;37906:25;;;;:::i;:::-;37892:39;;37963:3;37954:12;;;;;:::i;:::-;;;37989:39;38003:4;38017;38024:3;37989:13;:39::i;:::-;36989:1059;36951:1097;38073:5;38072:6;:35;;;;;38083:18;:24;38102:4;38083:24;;;;;;;;;;;;;;;;;;;;;;;;;38082:25;38072:35;38068:753;;;38179:1;38162:14;;:18;:85;;;;;38244:3;38227:14;;38209:15;:32;;;;:::i;:::-;:38;38162:85;38132:467;;;38404:19;;38336:18;:32;38355:12;38336:32;;;;;;;;;;;;:87;38298:216;;;;;;;;;;;;:::i;:::-;;;;;;;;;38541:18;:32;38560:12;38541:32;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;38132:467;38623:11;38657:5;38646:7;38638:5;:15;;;;:::i;:::-;38637:25;;;;:::i;:::-;38623:39;;38694:3;38685:12;;;;;:::i;:::-;;;38720:39;38734:4;38748;38755:3;38720:13;:39::i;:::-;38782:19;:17;:19::i;:::-;38109:712;38068:753;36914:2132;;;38933:5;38932:6;:35;;;;;38943:18;:24;38962:4;38943:24;;;;;;;;;;;;;;;;;;;;;;;;;38942:25;38932:35;38928:103;;;38992:19;:17;:19::i;:::-;38928:103;36914:2132;36736:2321;39091:23;:27;39115:2;39091:27;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;39147:10;39130:13;39140:2;39130:9;:13::i;:::-;39122:5;:21;;;;:::i;:::-;:35;;39091:66;39069:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39220:30;39234:4;39240:2;39244:5;39220:13;:30::i;:::-;36617:2641;;;36507:2751;;;:::o;17429:1135::-;17535:1;17519:18;;:4;:18;;;17515:552;;17673:5;17657:12;;:21;;;;;;;:::i;:::-;;;;;;;;17515:552;;;17711:19;17733:9;:15;17743:4;17733:15;;;;;;;;;;;;;;;;17711:37;;17781:5;17767:11;:19;17763:117;;;17839:4;17845:11;17858:5;17814:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17763:117;18035:5;18021:11;:19;18003:9;:15;18013:4;18003:15;;;;;;;;;;;;;;;:37;;;;17696:371;17515:552;18097:1;18083:16;;:2;:16;;;18079:435;;18265:5;18249:12;;:21;;;;;;;;;;;18079:435;;;18482:5;18465:9;:13;18475:2;18465:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18079:435;18546:2;18531:25;;18540:4;18531:25;;;18550:5;18531:25;;;;;;:::i;:::-;;;;;;;;17429:1135;;;:::o;39266:1122::-;39315:17;39353:14;;39335:15;:32;;;;:::i;:::-;39315:52;;39394:3;39382:9;:15;39378:54;;;39414:7;;;39378:54;39444:20;39467:24;39485:4;39467:9;:24::i;:::-;39444:47;;39524:1;39508:12;:17;39504:56;;39542:7;;;;39504:56;39572:22;39611:1;39597:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39572:41;;39635:5;39624;39630:1;39624:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;39670:4;39651:5;39657:1;39651:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;39731:23;31686:42;39757:21;;;39779:7;39788:5;39757:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39795:1;39757:40;;;;;;;;:::i;:::-;;;;;;;;39731:66;;39829:15;39814:12;:30;39810:93;;;39876:15;39861:30;;39810:93;39934:4;39915:5;39921:1;39915:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;39961:5;39950;39956:1;39950:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;39979:31;40021:9;;;;;;;;;;;40013:26;;;39979:60;;31686:42;40050:58;;;40123:12;40150:1;40166:5;40186:9;;;;;;;;;;;40210:15;40050:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40247:30;40288:9;;;;;;;;;;;40280:26;;;40247:59;;40357:23;40332:22;:48;;;;:::i;:::-;40317:11;;:63;;;;;;;:::i;:::-;;;;;;;;39304:1084;;;;;;39266:1122;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:116::-;5258:21;5273:5;5258:21;:::i;:::-;5251:5;5248:32;5238:60;;5294:1;5291;5284:12;5238:60;5188:116;:::o;5310:133::-;5353:5;5391:6;5378:20;5369:29;;5407:30;5431:5;5407:30;:::i;:::-;5310:133;;;;:::o;5449:468::-;5514:6;5522;5571:2;5559:9;5550:7;5546:23;5542:32;5539:119;;;5577:79;;:::i;:::-;5539:119;5697:1;5722:53;5767:7;5758:6;5747:9;5743:22;5722:53;:::i;:::-;5712:63;;5668:117;5824:2;5850:50;5892:7;5883:6;5872:9;5868:22;5850:50;:::i;:::-;5840:60;;5795:115;5449:468;;;;;:::o;5923:329::-;5982:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:119;;;6037:79;;:::i;:::-;5999:119;6157:1;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6128:117;5923:329;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:332::-;6731:4;6769:2;6758:9;6754:18;6746:26;;6782:71;6850:1;6839:9;6835:17;6826:6;6782:71;:::i;:::-;6863:72;6931:2;6920:9;6916:18;6907:6;6863:72;:::i;:::-;6610:332;;;;;:::o;6948:474::-;7016:6;7024;7073:2;7061:9;7052:7;7048:23;7044:32;7041:119;;;7079:79;;:::i;:::-;7041:119;7199:1;7224:53;7269:7;7260:6;7249:9;7245:22;7224:53;:::i;:::-;7214:63;;7170:117;7326:2;7352:53;7397:7;7388:6;7377:9;7373:22;7352:53;:::i;:::-;7342:63;;7297:118;6948:474;;;;;:::o;7428:173::-;7568:25;7564:1;7556:6;7552:14;7545:49;7428:173;:::o;7607:366::-;7749:3;7770:67;7834:2;7829:3;7770:67;:::i;:::-;7763:74;;7846:93;7935:3;7846:93;:::i;:::-;7964:2;7959:3;7955:12;7948:19;;7607:366;;;:::o;7979:419::-;8145:4;8183:2;8172:9;8168:18;8160:26;;8232:9;8226:4;8222:20;8218:1;8207:9;8203:17;8196:47;8260:131;8386:4;8260:131;:::i;:::-;8252:139;;7979:419;;;:::o;8404:180::-;8452:77;8449:1;8442:88;8549:4;8546:1;8539:15;8573:4;8570:1;8563:15;8590:320;8634:6;8671:1;8665:4;8661:12;8651:22;;8718:1;8712:4;8708:12;8739:18;8729:81;;8795:4;8787:6;8783:17;8773:27;;8729:81;8857:2;8849:6;8846:14;8826:18;8823:38;8820:84;;8876:18;;:::i;:::-;8820:84;8641:269;8590:320;;;:::o;8916:164::-;9056:16;9052:1;9044:6;9040:14;9033:40;8916:164;:::o;9086:366::-;9228:3;9249:67;9313:2;9308:3;9249:67;:::i;:::-;9242:74;;9325:93;9414:3;9325:93;:::i;:::-;9443:2;9438:3;9434:12;9427:19;;9086:366;;;:::o;9458:419::-;9624:4;9662:2;9651:9;9647:18;9639:26;;9711:9;9705:4;9701:20;9697:1;9686:9;9682:17;9675:47;9739:131;9865:4;9739:131;:::i;:::-;9731:139;;9458:419;;;:::o;9883:163::-;10023:15;10019:1;10011:6;10007:14;10000:39;9883:163;:::o;10052:366::-;10194:3;10215:67;10279:2;10274:3;10215:67;:::i;:::-;10208:74;;10291:93;10380:3;10291:93;:::i;:::-;10409:2;10404:3;10400:12;10393:19;;10052:366;;;:::o;10424:419::-;10590:4;10628:2;10617:9;10613:18;10605:26;;10677:9;10671:4;10667:20;10663:1;10652:9;10648:17;10641:47;10705:131;10831:4;10705:131;:::i;:::-;10697:139;;10424:419;;;:::o;10849:442::-;10998:4;11036:2;11025:9;11021:18;11013:26;;11049:71;11117:1;11106:9;11102:17;11093:6;11049:71;:::i;:::-;11130:72;11198:2;11187:9;11183:18;11174:6;11130:72;:::i;:::-;11212;11280:2;11269:9;11265:18;11256:6;11212:72;:::i;:::-;10849:442;;;;;;:::o;11297:180::-;11345:77;11342:1;11335:88;11442:4;11439:1;11432:15;11466:4;11463:1;11456:15;11483:194;11523:4;11543:20;11561:1;11543:20;:::i;:::-;11538:25;;11577:20;11595:1;11577:20;:::i;:::-;11572:25;;11621:1;11618;11614:9;11606:17;;11645:1;11639:4;11636:11;11633:37;;;11650:18;;:::i;:::-;11633:37;11483:194;;;;:::o;11683:180::-;11731:77;11728:1;11721:88;11828:4;11825:1;11818:15;11852:4;11849:1;11842:15;11869:185;11909:1;11926:20;11944:1;11926:20;:::i;:::-;11921:25;;11960:20;11978:1;11960:20;:::i;:::-;11955:25;;11999:1;11989:35;;12004:18;;:::i;:::-;11989:35;12046:1;12043;12039:9;12034:14;;11869:185;;;;:::o;12060:169::-;12200:21;12196:1;12188:6;12184:14;12177:45;12060:169;:::o;12235:366::-;12377:3;12398:67;12462:2;12457:3;12398:67;:::i;:::-;12391:74;;12474:93;12563:3;12474:93;:::i;:::-;12592:2;12587:3;12583:12;12576:19;;12235:366;;;:::o;12607:419::-;12773:4;12811:2;12800:9;12796:18;12788:26;;12860:9;12854:4;12850:20;12846:1;12835:9;12831:17;12824:47;12888:131;13014:4;12888:131;:::i;:::-;12880:139;;12607:419;;;:::o;13032:228::-;13172:34;13168:1;13160:6;13156:14;13149:58;13241:11;13236:2;13228:6;13224:15;13217:36;13032:228;:::o;13266:366::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13266:366;;;:::o;13638:419::-;13804:4;13842:2;13831:9;13827:18;13819:26;;13891:9;13885:4;13881:20;13877:1;13866:9;13862:17;13855:47;13919:131;14045:4;13919:131;:::i;:::-;13911:139;;13638:419;;;:::o;14063:233::-;14102:3;14125:24;14143:5;14125:24;:::i;:::-;14116:33;;14171:66;14164:5;14161:77;14158:103;;14241:18;;:::i;:::-;14158:103;14288:1;14281:5;14277:13;14270:20;;14063:233;;;:::o;14302:180::-;14442:32;14438:1;14430:6;14426:14;14419:56;14302:180;:::o;14488:366::-;14630:3;14651:67;14715:2;14710:3;14651:67;:::i;:::-;14644:74;;14727:93;14816:3;14727:93;:::i;:::-;14845:2;14840:3;14836:12;14829:19;;14488:366;;;:::o;14860:419::-;15026:4;15064:2;15053:9;15049:18;15041:26;;15113:9;15107:4;15103:20;15099:1;15088:9;15084:17;15077:47;15141:131;15267:4;15141:131;:::i;:::-;15133:139;;14860:419;;;:::o;15285:410::-;15325:7;15348:20;15366:1;15348:20;:::i;:::-;15343:25;;15382:20;15400:1;15382:20;:::i;:::-;15377:25;;15437:1;15434;15430:9;15459:30;15477:11;15459:30;:::i;:::-;15448:41;;15638:1;15629:7;15625:15;15622:1;15619:22;15599:1;15592:9;15572:83;15549:139;;15668:18;;:::i;:::-;15549:139;15333:362;15285:410;;;;:::o;15701:181::-;15841:33;15837:1;15829:6;15825:14;15818:57;15701:181;:::o;15888:366::-;16030:3;16051:67;16115:2;16110:3;16051:67;:::i;:::-;16044:74;;16127:93;16216:3;16127:93;:::i;:::-;16245:2;16240:3;16236:12;16229:19;;15888:366;;;:::o;16260:419::-;16426:4;16464:2;16453:9;16449:18;16441:26;;16513:9;16507:4;16503:20;16499:1;16488:9;16484:17;16477:47;16541:131;16667:4;16541:131;:::i;:::-;16533:139;;16260:419;;;:::o;16685:191::-;16725:3;16744:20;16762:1;16744:20;:::i;:::-;16739:25;;16778:20;16796:1;16778:20;:::i;:::-;16773:25;;16821:1;16818;16814:9;16807:16;;16842:3;16839:1;16836:10;16833:36;;;16849:18;;:::i;:::-;16833:36;16685:191;;;;:::o;16882:174::-;17022:26;17018:1;17010:6;17006:14;16999:50;16882:174;:::o;17062:366::-;17204:3;17225:67;17289:2;17284:3;17225:67;:::i;:::-;17218:74;;17301:93;17390:3;17301:93;:::i;:::-;17419:2;17414:3;17410:12;17403:19;;17062:366;;;:::o;17434:419::-;17600:4;17638:2;17627:9;17623:18;17615:26;;17687:9;17681:4;17677:20;17673:1;17662:9;17658:17;17651:47;17715:131;17841:4;17715:131;:::i;:::-;17707:139;;17434:419;;;:::o;17859:180::-;17907:77;17904:1;17897:88;18004:4;18001:1;17994:15;18028:4;18025:1;18018:15;18045:180;18093:77;18090:1;18083:88;18190:4;18187:1;18180:15;18214:4;18211:1;18204:15;18231:103;18294:7;18323:5;18312:16;;18231:103;;;:::o;18340:60::-;18368:3;18389:5;18382:12;;18340:60;;;:::o;18406:194::-;18482:9;18515:79;18533:60;18542:50;18586:5;18542:50;:::i;:::-;18533:60;:::i;:::-;18515:79;:::i;:::-;18502:92;;18406:194;;;:::o;18606:183::-;18719:63;18776:5;18719:63;:::i;:::-;18714:3;18707:76;18606:183;;:::o;18795:114::-;18862:6;18896:5;18890:12;18880:22;;18795:114;;;:::o;18915:184::-;19014:11;19048:6;19043:3;19036:19;19088:4;19083:3;19079:14;19064:29;;18915:184;;;;:::o;19105:132::-;19172:4;19195:3;19187:11;;19225:4;19220:3;19216:14;19208:22;;19105:132;;;:::o;19243:108::-;19320:24;19338:5;19320:24;:::i;:::-;19315:3;19308:37;19243:108;;:::o;19357:179::-;19426:10;19447:46;19489:3;19481:6;19447:46;:::i;:::-;19525:4;19520:3;19516:14;19502:28;;19357:179;;;;:::o;19542:113::-;19612:4;19644;19639:3;19635:14;19627:22;;19542:113;;;:::o;19691:732::-;19810:3;19839:54;19887:5;19839:54;:::i;:::-;19909:86;19988:6;19983:3;19909:86;:::i;:::-;19902:93;;20019:56;20069:5;20019:56;:::i;:::-;20098:7;20129:1;20114:284;20139:6;20136:1;20133:13;20114:284;;;20215:6;20209:13;20242:63;20301:3;20286:13;20242:63;:::i;:::-;20235:70;;20328:60;20381:6;20328:60;:::i;:::-;20318:70;;20174:224;20161:1;20158;20154:9;20149:14;;20114:284;;;20118:14;20414:3;20407:10;;19815:608;;;19691:732;;;;:::o;20429:535::-;20626:4;20664:2;20653:9;20649:18;20641:26;;20677:97;20771:1;20760:9;20756:17;20747:6;20677:97;:::i;:::-;20821:9;20815:4;20811:20;20806:2;20795:9;20791:18;20784:48;20849:108;20952:4;20943:6;20849:108;:::i;:::-;20841:116;;20429:535;;;;;:::o;20970:117::-;21079:1;21076;21069:12;21093:281;21176:27;21198:4;21176:27;:::i;:::-;21168:6;21164:40;21306:6;21294:10;21291:22;21270:18;21258:10;21255:34;21252:62;21249:88;;;21317:18;;:::i;:::-;21249:88;21357:10;21353:2;21346:22;21136:238;21093:281;;:::o;21380:129::-;21414:6;21441:20;;:::i;:::-;21431:30;;21470:33;21498:4;21490:6;21470:33;:::i;:::-;21380:129;;;:::o;21515:311::-;21592:4;21682:18;21674:6;21671:30;21668:56;;;21704:18;;:::i;:::-;21668:56;21754:4;21746:6;21742:17;21734:25;;21814:4;21808;21804:15;21796:23;;21515:311;;;:::o;21832:117::-;21941:1;21938;21931:12;21955:143;22012:5;22043:6;22037:13;22028:22;;22059:33;22086:5;22059:33;:::i;:::-;21955:143;;;;:::o;22121:732::-;22228:5;22253:81;22269:64;22326:6;22269:64;:::i;:::-;22253:81;:::i;:::-;22244:90;;22354:5;22383:6;22376:5;22369:21;22417:4;22410:5;22406:16;22399:23;;22470:4;22462:6;22458:17;22450:6;22446:30;22499:3;22491:6;22488:15;22485:122;;;22518:79;;:::i;:::-;22485:122;22633:6;22616:231;22650:6;22645:3;22642:15;22616:231;;;22725:3;22754:48;22798:3;22786:10;22754:48;:::i;:::-;22749:3;22742:61;22832:4;22827:3;22823:14;22816:21;;22692:155;22676:4;22671:3;22667:14;22660:21;;22616:231;;;22620:21;22234:619;;22121:732;;;;;:::o;22876:385::-;22958:5;23007:3;23000:4;22992:6;22988:17;22984:27;22974:122;;23015:79;;:::i;:::-;22974:122;23125:6;23119:13;23150:105;23251:3;23243:6;23236:4;23228:6;23224:17;23150:105;:::i;:::-;23141:114;;22964:297;22876:385;;;;:::o;23267:554::-;23362:6;23411:2;23399:9;23390:7;23386:23;23382:32;23379:119;;;23417:79;;:::i;:::-;23379:119;23558:1;23547:9;23543:17;23537:24;23588:18;23580:6;23577:30;23574:117;;;23610:79;;:::i;:::-;23574:117;23715:89;23796:7;23787:6;23776:9;23772:22;23715:89;:::i;:::-;23705:99;;23508:306;23267:554;;;;:::o;23827:85::-;23872:7;23901:5;23890:16;;23827:85;;;:::o;23918:158::-;23976:9;24009:61;24027:42;24036:32;24062:5;24036:32;:::i;:::-;24027:42;:::i;:::-;24009:61;:::i;:::-;23996:74;;23918:158;;;:::o;24082:147::-;24177:45;24216:5;24177:45;:::i;:::-;24172:3;24165:58;24082:147;;:::o;24235:831::-;24498:4;24536:3;24525:9;24521:19;24513:27;;24550:71;24618:1;24607:9;24603:17;24594:6;24550:71;:::i;:::-;24631:80;24707:2;24696:9;24692:18;24683:6;24631:80;:::i;:::-;24758:9;24752:4;24748:20;24743:2;24732:9;24728:18;24721:48;24786:108;24889:4;24880:6;24786:108;:::i;:::-;24778:116;;24904:72;24972:2;24961:9;24957:18;24948:6;24904:72;:::i;:::-;24986:73;25054:3;25043:9;25039:19;25030:6;24986:73;:::i;:::-;24235:831;;;;;;;;:::o
Swarm Source
ipfs://0f6c2779ba3b2b37c5e58c89c5174a3802dd77d755092378b8bf253428a46d19
Loading...
Loading
Loading...
Loading

Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.