Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 659 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24093498 | 35 hrs ago | IN | 0 ETH | 0.00000144 | ||||
| Approve | 23912659 | 26 days ago | IN | 0 ETH | 0.00000534 | ||||
| Approve | 23908623 | 27 days ago | IN | 0 ETH | 0.00000543 | ||||
| Approve | 23906500 | 27 days ago | IN | 0 ETH | 0.00000562 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 | ||||
| Transfer | 23904259 | 28 days ago | IN | 0 ETH | 0.00000156 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
/*
Name: Shrek2HulkSimbaAnusHannahMontanInu
Symbol: ETH
Shrek2HulkSimbaAnusHannahMontanInu for short. Ticker is $ETH | #rETHtard Cult Parody Meme Project
https://ethretarded.wtf
https://x.com/Retard_S2HSAHMI
https://t.me/Retard_S2HSAHMI
*/
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// 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 9. 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 9;
}
/**
* @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;
}
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;
}
pragma solidity ^0.8.28;
contract Token is ERC20, Ownable {
uint256 public immutable MAX_SUPPLY;
address public pair;
address public treasury;
IUniswapV2Router02 private constant _router =
IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address private immutable _weth;
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 = 300;
mapping(uint256 blockNumber => uint256 txCount) public maxBuyTxsPerBlock;
uint256 private _maxBuyTxsPerBlock = 300;
constructor(
string memory name,
string memory symbol,
uint256 maxSupply
) ERC20(name, symbol) Ownable(msg.sender) {
MAX_SUPPLY = maxSupply*10**9;
_weth = _router.WETH();
isExcludedFromFees[msg.sender] = true;
isExcludedFromFees[address(this)] = true;
isExcludedFromMaxWallet[msg.sender] = true;
isExcludedFromMaxWallet[address(this)] = true;
_mint(msg.sender, MAX_SUPPLY);
_approve(msg.sender, address(_router), type(uint256).max);
treasury = msg.sender;
_approve(address(this), address(_router), type(uint256).max);
}
function enableTrading() external onlyOwner {
require(startBlock == 0, "trading-already-enabled");
startBlock = block.number;
startBlockTime = block.timestamp;
pair = IUniswapV2Factory(_router.factory()).getPair(address(this), _weth);
isExcludedFromFees[pair] = true;
isExcludedFromMaxWallet[pair] = true;
}
function setExcludedFromFees(
address account,
bool excluded
) external onlyOwner {
isExcludedFromFees[account] = excluded;
}
function setExcludedFromMaxWallet(
address account,
bool excluded
) external onlyOwner {
isExcludedFromMaxWallet[account] = excluded;
}
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);
}
_feeBps = 0;
_maxWallet = MAX_SUPPLY; // no limit
return (_feeBps, _maxWallet);
}
function _update(
address from,
address to,
uint256 value
) internal override {
require(startBlock > 0 || from == owner() || to == owner(), "Trading not Enabled");
bool isBuy = from == pair;
if (isBuy || to == pair) {
require(
startBlock > 0 || isExcludedFromFees[to],
"trading-not-enabled"
);
if (isBuy && !isExcludedFromFees[to]) {
if (
startBlockTime > 0
) {
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]++;
}
}
}
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 _treasuryBalanceBefore = address(treasury).balance;
_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
_tokenAmount,
0,
_path,
treasury,
block.timestamp
);
uint256 _treasuryBalanceAfter = address(treasury).balance;
raiseAmount += _treasuryBalanceAfter - _treasuryBalanceBefore;
}
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}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"}],"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesAndMaxWallet","outputs":[{"internalType":"uint256","name":"_feeBps","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"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":[{"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":[],"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":[],"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"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60c060405261012c600e5561012c60105534801561001b575f5ffd5b506040516134f93803806134f9833981810160405281019061003d9190610ecd565b338383816003908161004f919061115c565b50806004908161005f919061115c565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100d2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c9919061126a565b60405180910390fd5b6100e1816103e560201b60201c565b50633b9aca00816100f291906112b0565b60808181525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610156573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017a919061131b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610313336080516104a860201b60201c565b61035833737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052d60201b60201c565b3360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103dd30737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052d60201b60201c565b5050506115f3565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610518575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161050f919061126a565b60405180910390fd5b6105295f838361054560201b60201c565b5050565b610540838383600161093d60201b60201c565b505050565b5f600854118061058d575061055e610b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806105d057506105a1610b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61060f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610606906113a0565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080806106ba575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610926575f60085411806107155750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074b90611408565b60405180910390fd5b8080156107a85750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610925575f600954111561092457600e54600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205410610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e90611496565b60405180910390fd5b600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f8154809291906108a3906114b4565b9190505550601054600f5f4381526020019081526020015f2054106108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490611545565b60405180910390fd5b600f5f4381526020019081526020015f205f81548092919061091e906114b4565b91905055505b5b5b610937848484610b3460201b60201c565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109ad575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016109a4919061126a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1d575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a14919061126a565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610b06578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610afd9190611572565b60405180910390a35b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b84578060025f828254610b78919061158b565b92505081905550610c52565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610c0d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610c04939291906115be565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c99578060025f8282540392505081905550610ce3565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d409190611572565b60405180910390a3505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610dac82610d66565b810181811067ffffffffffffffff82111715610dcb57610dca610d76565b5b80604052505050565b5f610ddd610d4d565b9050610de98282610da3565b919050565b5f67ffffffffffffffff821115610e0857610e07610d76565b5b610e1182610d66565b9050602081019050919050565b8281835e5f83830152505050565b5f610e3e610e3984610dee565b610dd4565b905082815260208101848484011115610e5a57610e59610d62565b5b610e65848285610e1e565b509392505050565b5f82601f830112610e8157610e80610d5e565b5b8151610e91848260208601610e2c565b91505092915050565b5f819050919050565b610eac81610e9a565b8114610eb6575f5ffd5b50565b5f81519050610ec781610ea3565b92915050565b5f5f5f60608486031215610ee457610ee3610d56565b5b5f84015167ffffffffffffffff811115610f0157610f00610d5a565b5b610f0d86828701610e6d565b935050602084015167ffffffffffffffff811115610f2e57610f2d610d5a565b5b610f3a86828701610e6d565b9250506040610f4b86828701610eb9565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610fa357607f821691505b602082108103610fb657610fb5610f5f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026110187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610fdd565b6110228683610fdd565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61105d61105861105384610e9a565b61103a565b610e9a565b9050919050565b5f819050919050565b61107683611043565b61108a61108282611064565b848454610fe9565b825550505050565b5f5f905090565b6110a1611092565b6110ac81848461106d565b505050565b5b818110156110cf576110c45f82611099565b6001810190506110b2565b5050565b601f821115611114576110e581610fbc565b6110ee84610fce565b810160208510156110fd578190505b61111161110985610fce565b8301826110b1565b50505b505050565b5f82821c905092915050565b5f6111345f1984600802611119565b1980831691505092915050565b5f61114c8383611125565b9150826002028217905092915050565b61116582610f55565b67ffffffffffffffff81111561117e5761117d610d76565b5b6111888254610f8c565b6111938282856110d3565b5f60209050601f8311600181146111c4575f84156111b2578287015190505b6111bc8582611141565b865550611223565b601f1984166111d286610fbc565b5f5b828110156111f9578489015182556001820191506020850194506020810190506111d4565b868310156112165784890151611212601f891682611125565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6112548261122b565b9050919050565b6112648161124a565b82525050565b5f60208201905061127d5f83018461125b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6112ba82610e9a565b91506112c583610e9a565b92508282026112d381610e9a565b915082820484148315176112ea576112e9611283565b5b5092915050565b6112fa8161124a565b8114611304575f5ffd5b50565b5f81519050611315816112f1565b92915050565b5f602082840312156113305761132f610d56565b5b5f61133d84828501611307565b91505092915050565b5f82825260208201905092915050565b7f54726164696e67206e6f7420456e61626c6564000000000000000000000000005f82015250565b5f61138a601383611346565b915061139582611356565b602082019050919050565b5f6020820190508181035f8301526113b78161137e565b9050919050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f6113f2601383611346565b91506113fd826113be565b602082019050919050565b5f6020820190508181035f83015261141f816113e6565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f611480602983611346565b915061148b82611426565b604082019050919050565b5f6020820190508181035f8301526114ad81611474565b9050919050565b5f6114be82610e9a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114f0576114ef611283565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f61152f601e83611346565b915061153a826114fb565b602082019050919050565b5f6020820190508181035f83015261155c81611523565b9050919050565b61156c81610e9a565b82525050565b5f6020820190506115855f830184611563565b92915050565b5f61159582610e9a565b91506115a083610e9a565b92508282019050808211156115b8576115b7611283565b5b92915050565b5f6060820190506115d15f83018661125b565b6115de6020830185611563565b6115eb6040830184611563565b949350505050565b60805160a051611ede61161b5f395f61089e01525f81816106060152610f5e0152611ede5ff3fe608060405234801561000f575f5ffd5b5060043610610171575f3560e01c8063590ffdce116100dc5780638da5cb5b11610095578063a8aa1b311161006f578063a8aa1b311461043e578063a9059cbb1461045c578063dd62ed3e1461048c578063f2fde38b146104bc57610171565b80638da5cb5b146103e357806395d89b4114610401578063a25ba1831461041f57610171565b8063590ffdce1461033557806361d027b3146103515780636dd3d39f1461036f57806370a082311461039f578063715018a6146103cf5780638a8c523c146103d957610171565b806323b872dd1161012e57806323b872dd1461025f578063313ce5671461028f57806332cb6b0c146102ad57806341220104146102cb57806348cd4cb1146102e75780634fbee1931461030557610171565b806306fdde0314610175578063095ea7b3146101935780630c18d4ce146101c35780630fe3fe7d146101e157806318160ddd1461021157806321b024861461022f575b5f5ffd5b61017d6104d8565b60405161018a91906117c2565b60405180910390f35b6101ad60048036038101906101a89190611873565b610568565b6040516101ba91906118cb565b60405180910390f35b6101cb61058a565b6040516101d891906118f3565b60405180910390f35b6101fb60048036038101906101f69190611873565b610590565b60405161020891906118f3565b60405180910390f35b6102196105b0565b60405161022691906118f3565b60405180910390f35b6102496004803603810190610244919061190c565b6105b9565b60405161025691906118f3565b60405180910390f35b61027960048036038101906102749190611937565b6105ce565b60405161028691906118cb565b60405180910390f35b6102976105fc565b6040516102a491906119a2565b60405180910390f35b6102b5610604565b6040516102c291906118f3565b60405180910390f35b6102e560048036038101906102e091906119e5565b610628565b005b6102ef610688565b6040516102fc91906118f3565b60405180910390f35b61031f600480360381019061031a9190611a23565b61068e565b60405161032c91906118cb565b60405180910390f35b61034f600480360381019061034a91906119e5565b6106ab565b005b61035961070b565b6040516103669190611a5d565b60405180910390f35b61038960048036038101906103849190611a23565b610730565b60405161039691906118cb565b60405180910390f35b6103b960048036038101906103b49190611a23565b61074d565b6040516103c691906118f3565b60405180910390f35b6103d7610792565b005b6103e16107a5565b005b6103eb610a46565b6040516103f89190611a5d565b60405180910390f35b610409610a6e565b60405161041691906117c2565b60405180910390f35b610427610afe565b604051610435929190611a76565b60405180910390f35b610446610b10565b6040516104539190611a5d565b60405180910390f35b61047660048036038101906104719190611873565b610b35565b60405161048391906118cb565b60405180910390f35b6104a660048036038101906104a19190611a9d565b610b57565b6040516104b391906118f3565b60405180910390f35b6104d660048036038101906104d19190611a23565b610bd9565b005b6060600380546104e790611b08565b80601f016020809104026020016040519081016040528092919081815260200182805461051390611b08565b801561055e5780601f106105355761010080835404028352916020019161055e565b820191905f5260205f20905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b5f5f610572610c5d565b905061057f818585610c64565b600191505092915050565b60095481565b600d602052815f5260405f20602052805f5260405f205f91509150505481565b5f600254905090565b600f602052805f5260405f205f915090505481565b5f5f6105d8610c5d565b90506105e5858285610c76565b6105f0858585610d09565b60019150509392505050565b5f6009905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610630610df9565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60085481565b600b602052805f5260405f205f915054906101000a900460ff1681565b6106b3610df9565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61079a610df9565b6107a35f610e80565b565b6107ad610df9565b5f600854146107f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e890611b82565b60405180910390fd5b4360088190555042600981905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108809190611bb4565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016108da929190611bdf565b602060405180830381865afa1580156108f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109199190611bb4565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a7d90611b08565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa990611b08565b8015610af45780601f10610acb57610100808354040283529160200191610af4565b820191905f5260205f20905b815481529060010190602001808311610ad757829003601f168201915b5050505050905090565b5f5f610b08610f43565b915091509091565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f610b3f610c5d565b9050610b4c818585610d09565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610be1610df9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c51575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c489190611a5d565b60405180910390fd5b610c5a81610e80565b50565b5f33905090565b610c718383836001610f84565b505050565b5f610c818484610b57565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610d035781811015610cf4578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610ceb93929190611c06565b60405180910390fd5b610d0284848484035f610f84565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d79575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d709190611a5d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610de9575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610de09190611a5d565b60405180910390fd5b610df4838383611153565b505050565b610e01610c5d565b73ffffffffffffffffffffffffffffffffffffffff16610e1f610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e57610e42610c5d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e759190611a5d565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f60095403610f59575f5f91509150610f80565b5f91507f000000000000000000000000000000000000000000000000000000000000000090505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ff4575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610feb9190611a5d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611064575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161105b9190611a5d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561114d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161114491906118f3565b60405180910390a35b50505050565b5f60085411806111955750611166610a46565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806111d257506111a3610a46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890611c85565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080806112bc575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611528575f60085411806113175750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90611ced565b60405180910390fd5b8080156113aa5750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611527575f600954111561152657600e54600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205410611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090611d7b565b60405180910390fd5b600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f8154809291906114a590611dc6565b9190505550601054600f5f4381526020019081526020015f2054106114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690611e57565b60405180910390fd5b600f5f4381526020019081526020015f205f81548092919061152090611dc6565b91905055505b5b5b611533848484611539565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611589578060025f82825461157d9190611e75565b92505081905550611657565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611612578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161160993929190611c06565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361169e578060025f82825403925050819055506116e8565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161174591906118f3565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61179482611752565b61179e818561175c565b93506117ae81856020860161176c565b6117b78161177a565b840191505092915050565b5f6020820190508181035f8301526117da818461178a565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61180f826117e6565b9050919050565b61181f81611805565b8114611829575f5ffd5b50565b5f8135905061183a81611816565b92915050565b5f819050919050565b61185281611840565b811461185c575f5ffd5b50565b5f8135905061186d81611849565b92915050565b5f5f60408385031215611889576118886117e2565b5b5f6118968582860161182c565b92505060206118a78582860161185f565b9150509250929050565b5f8115159050919050565b6118c5816118b1565b82525050565b5f6020820190506118de5f8301846118bc565b92915050565b6118ed81611840565b82525050565b5f6020820190506119065f8301846118e4565b92915050565b5f60208284031215611921576119206117e2565b5b5f61192e8482850161185f565b91505092915050565b5f5f5f6060848603121561194e5761194d6117e2565b5b5f61195b8682870161182c565b935050602061196c8682870161182c565b925050604061197d8682870161185f565b9150509250925092565b5f60ff82169050919050565b61199c81611987565b82525050565b5f6020820190506119b55f830184611993565b92915050565b6119c4816118b1565b81146119ce575f5ffd5b50565b5f813590506119df816119bb565b92915050565b5f5f604083850312156119fb576119fa6117e2565b5b5f611a088582860161182c565b9250506020611a19858286016119d1565b9150509250929050565b5f60208284031215611a3857611a376117e2565b5b5f611a458482850161182c565b91505092915050565b611a5781611805565b82525050565b5f602082019050611a705f830184611a4e565b92915050565b5f604082019050611a895f8301856118e4565b611a9660208301846118e4565b9392505050565b5f5f60408385031215611ab357611ab26117e2565b5b5f611ac08582860161182c565b9250506020611ad18582860161182c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b1f57607f821691505b602082108103611b3257611b31611adb565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f611b6c60178361175c565b9150611b7782611b38565b602082019050919050565b5f6020820190508181035f830152611b9981611b60565b9050919050565b5f81519050611bae81611816565b92915050565b5f60208284031215611bc957611bc86117e2565b5b5f611bd684828501611ba0565b91505092915050565b5f604082019050611bf25f830185611a4e565b611bff6020830184611a4e565b9392505050565b5f606082019050611c195f830186611a4e565b611c2660208301856118e4565b611c3360408301846118e4565b949350505050565b7f54726164696e67206e6f7420456e61626c6564000000000000000000000000005f82015250565b5f611c6f60138361175c565b9150611c7a82611c3b565b602082019050919050565b5f6020820190508181035f830152611c9c81611c63565b9050919050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f611cd760138361175c565b9150611ce282611ca3565b602082019050919050565b5f6020820190508181035f830152611d0481611ccb565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f611d6560298361175c565b9150611d7082611d0b565b604082019050919050565b5f6020820190508181035f830152611d9281611d59565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611dd082611840565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e0257611e01611d99565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f611e41601e8361175c565b9150611e4c82611e0d565b602082019050919050565b5f6020820190508181035f830152611e6e81611e35565b9050919050565b5f611e7f82611840565b9150611e8a83611840565b9250828201905080821115611ea257611ea1611d99565b5b9291505056fea26469706673582212201fe30c38cbbb7d1af2978060e63f0814dbf28eba21779848da1f0fa4b6b9a18964736f6c634300081e0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000022536872656b3248756c6b53696d6261416e757348616e6e61684d6f6e74616e496e7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610171575f3560e01c8063590ffdce116100dc5780638da5cb5b11610095578063a8aa1b311161006f578063a8aa1b311461043e578063a9059cbb1461045c578063dd62ed3e1461048c578063f2fde38b146104bc57610171565b80638da5cb5b146103e357806395d89b4114610401578063a25ba1831461041f57610171565b8063590ffdce1461033557806361d027b3146103515780636dd3d39f1461036f57806370a082311461039f578063715018a6146103cf5780638a8c523c146103d957610171565b806323b872dd1161012e57806323b872dd1461025f578063313ce5671461028f57806332cb6b0c146102ad57806341220104146102cb57806348cd4cb1146102e75780634fbee1931461030557610171565b806306fdde0314610175578063095ea7b3146101935780630c18d4ce146101c35780630fe3fe7d146101e157806318160ddd1461021157806321b024861461022f575b5f5ffd5b61017d6104d8565b60405161018a91906117c2565b60405180910390f35b6101ad60048036038101906101a89190611873565b610568565b6040516101ba91906118cb565b60405180910390f35b6101cb61058a565b6040516101d891906118f3565b60405180910390f35b6101fb60048036038101906101f69190611873565b610590565b60405161020891906118f3565b60405180910390f35b6102196105b0565b60405161022691906118f3565b60405180910390f35b6102496004803603810190610244919061190c565b6105b9565b60405161025691906118f3565b60405180910390f35b61027960048036038101906102749190611937565b6105ce565b60405161028691906118cb565b60405180910390f35b6102976105fc565b6040516102a491906119a2565b60405180910390f35b6102b5610604565b6040516102c291906118f3565b60405180910390f35b6102e560048036038101906102e091906119e5565b610628565b005b6102ef610688565b6040516102fc91906118f3565b60405180910390f35b61031f600480360381019061031a9190611a23565b61068e565b60405161032c91906118cb565b60405180910390f35b61034f600480360381019061034a91906119e5565b6106ab565b005b61035961070b565b6040516103669190611a5d565b60405180910390f35b61038960048036038101906103849190611a23565b610730565b60405161039691906118cb565b60405180910390f35b6103b960048036038101906103b49190611a23565b61074d565b6040516103c691906118f3565b60405180910390f35b6103d7610792565b005b6103e16107a5565b005b6103eb610a46565b6040516103f89190611a5d565b60405180910390f35b610409610a6e565b60405161041691906117c2565b60405180910390f35b610427610afe565b604051610435929190611a76565b60405180910390f35b610446610b10565b6040516104539190611a5d565b60405180910390f35b61047660048036038101906104719190611873565b610b35565b60405161048391906118cb565b60405180910390f35b6104a660048036038101906104a19190611a9d565b610b57565b6040516104b391906118f3565b60405180910390f35b6104d660048036038101906104d19190611a23565b610bd9565b005b6060600380546104e790611b08565b80601f016020809104026020016040519081016040528092919081815260200182805461051390611b08565b801561055e5780601f106105355761010080835404028352916020019161055e565b820191905f5260205f20905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b5f5f610572610c5d565b905061057f818585610c64565b600191505092915050565b60095481565b600d602052815f5260405f20602052805f5260405f205f91509150505481565b5f600254905090565b600f602052805f5260405f205f915090505481565b5f5f6105d8610c5d565b90506105e5858285610c76565b6105f0858585610d09565b60019150509392505050565b5f6009905090565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b610630610df9565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60085481565b600b602052805f5260405f205f915054906101000a900460ff1681565b6106b3610df9565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61079a610df9565b6107a35f610e80565b565b6107ad610df9565b5f600854146107f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e890611b82565b60405180910390fd5b4360088190555042600981905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108809190611bb4565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905307f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26040518363ffffffff1660e01b81526004016108da929190611bdf565b602060405180830381865afa1580156108f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109199190611bb4565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a7d90611b08565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa990611b08565b8015610af45780601f10610acb57610100808354040283529160200191610af4565b820191905f5260205f20905b815481529060010190602001808311610ad757829003601f168201915b5050505050905090565b5f5f610b08610f43565b915091509091565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f610b3f610c5d565b9050610b4c818585610d09565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610be1610df9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c51575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c489190611a5d565b60405180910390fd5b610c5a81610e80565b50565b5f33905090565b610c718383836001610f84565b505050565b5f610c818484610b57565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610d035781811015610cf4578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610ceb93929190611c06565b60405180910390fd5b610d0284848484035f610f84565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d79575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d709190611a5d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610de9575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610de09190611a5d565b60405180910390fd5b610df4838383611153565b505050565b610e01610c5d565b73ffffffffffffffffffffffffffffffffffffffff16610e1f610a46565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e57610e42610c5d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e759190611a5d565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f60095403610f59575f5f91509150610f80565b5f91507f0000000000000000000000000000000000000000000000000de0b6b3a764000090505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ff4575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610feb9190611a5d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611064575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161105b9190611a5d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561114d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161114491906118f3565b60405180910390a35b50505050565b5f60085411806111955750611166610a46565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806111d257506111a3610a46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890611c85565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080806112bc575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611528575f60085411806113175750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90611ced565b60405180910390fd5b8080156113aa5750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611527575f600954111561152657600e54600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205410611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090611d7b565b60405180910390fd5b600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f8154809291906114a590611dc6565b9190505550601054600f5f4381526020019081526020015f2054106114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690611e57565b60405180910390fd5b600f5f4381526020019081526020015f205f81548092919061152090611dc6565b91905055505b5b5b611533848484611539565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611589578060025f82825461157d9190611e75565b92505081905550611657565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611612578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161160993929190611c06565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361169e578060025f82825403925050819055506116e8565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161174591906118f3565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61179482611752565b61179e818561175c565b93506117ae81856020860161176c565b6117b78161177a565b840191505092915050565b5f6020820190508181035f8301526117da818461178a565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61180f826117e6565b9050919050565b61181f81611805565b8114611829575f5ffd5b50565b5f8135905061183a81611816565b92915050565b5f819050919050565b61185281611840565b811461185c575f5ffd5b50565b5f8135905061186d81611849565b92915050565b5f5f60408385031215611889576118886117e2565b5b5f6118968582860161182c565b92505060206118a78582860161185f565b9150509250929050565b5f8115159050919050565b6118c5816118b1565b82525050565b5f6020820190506118de5f8301846118bc565b92915050565b6118ed81611840565b82525050565b5f6020820190506119065f8301846118e4565b92915050565b5f60208284031215611921576119206117e2565b5b5f61192e8482850161185f565b91505092915050565b5f5f5f6060848603121561194e5761194d6117e2565b5b5f61195b8682870161182c565b935050602061196c8682870161182c565b925050604061197d8682870161185f565b9150509250925092565b5f60ff82169050919050565b61199c81611987565b82525050565b5f6020820190506119b55f830184611993565b92915050565b6119c4816118b1565b81146119ce575f5ffd5b50565b5f813590506119df816119bb565b92915050565b5f5f604083850312156119fb576119fa6117e2565b5b5f611a088582860161182c565b9250506020611a19858286016119d1565b9150509250929050565b5f60208284031215611a3857611a376117e2565b5b5f611a458482850161182c565b91505092915050565b611a5781611805565b82525050565b5f602082019050611a705f830184611a4e565b92915050565b5f604082019050611a895f8301856118e4565b611a9660208301846118e4565b9392505050565b5f5f60408385031215611ab357611ab26117e2565b5b5f611ac08582860161182c565b9250506020611ad18582860161182c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b1f57607f821691505b602082108103611b3257611b31611adb565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f611b6c60178361175c565b9150611b7782611b38565b602082019050919050565b5f6020820190508181035f830152611b9981611b60565b9050919050565b5f81519050611bae81611816565b92915050565b5f60208284031215611bc957611bc86117e2565b5b5f611bd684828501611ba0565b91505092915050565b5f604082019050611bf25f830185611a4e565b611bff6020830184611a4e565b9392505050565b5f606082019050611c195f830186611a4e565b611c2660208301856118e4565b611c3360408301846118e4565b949350505050565b7f54726164696e67206e6f7420456e61626c6564000000000000000000000000005f82015250565b5f611c6f60138361175c565b9150611c7a82611c3b565b602082019050919050565b5f6020820190508181035f830152611c9c81611c63565b9050919050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f611cd760138361175c565b9150611ce282611ca3565b602082019050919050565b5f6020820190508181035f830152611d0481611ccb565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f611d6560298361175c565b9150611d7082611d0b565b604082019050919050565b5f6020820190508181035f830152611d9281611d59565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611dd082611840565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e0257611e01611d99565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f611e41601e8361175c565b9150611e4c82611e0d565b602082019050919050565b5f6020820190508181035f830152611e6e81611e35565b9050919050565b5f611e7f82611840565b9150611e8a83611840565b9250828201905080821115611ea257611ea1611d99565b5b9291505056fea26469706673582212201fe30c38cbbb7d1af2978060e63f0814dbf28eba21779848da1f0fa4b6b9a18964736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000022536872656b3248756c6b53696d6261416e757348616e6e61684d6f6e74616e496e7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Shrek2HulkSimbaAnusHannahMontanInu
Arg [1] : symbol (string): ETH
Arg [2] : maxSupply (uint256): 1000000000
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [4] : 536872656b3248756c6b53696d6261416e757348616e6e61684d6f6e74616e49
Arg [5] : 6e75000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4554480000000000000000000000000000000000000000000000000000000000
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.