Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 512 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24199217 | 27 days ago | IN | 0 ETH | 0.00000241 | ||||
| Approve | 23981728 | 58 days ago | IN | 0 ETH | 0.00001271 | ||||
| Approve | 23849911 | 76 days ago | IN | 0 ETH | 0.00007126 | ||||
| Transfer | 23656416 | 103 days ago | IN | 0 ETH | 0.00000968 | ||||
| Approve | 23499994 | 125 days ago | IN | 0 ETH | 0.00002333 | ||||
| Approve | 23494349 | 126 days ago | IN | 0 ETH | 0.00007961 | ||||
| Approve | 23453052 | 132 days ago | IN | 0 ETH | 0.00007907 | ||||
| Transfer | 23395319 | 140 days ago | IN | 0 ETH | 0.00000809 | ||||
| Transfer | 23395306 | 140 days ago | IN | 0 ETH | 0.00000749 | ||||
| Approve | 23379597 | 142 days ago | IN | 0 ETH | 0.00007707 | ||||
| Approve | 23368705 | 144 days ago | IN | 0 ETH | 0.00015443 | ||||
| Approve | 23347289 | 147 days ago | IN | 0 ETH | 0.00003838 | ||||
| Approve | 23319947 | 150 days ago | IN | 0 ETH | 0.00005021 | ||||
| Approve | 23319930 | 150 days ago | IN | 0 ETH | 0.00006596 | ||||
| Transfer | 23319908 | 150 days ago | IN | 0 ETH | 0.00009146 | ||||
| Approve | 23310907 | 152 days ago | IN | 0 ETH | 0.00005199 | ||||
| Approve | 23310902 | 152 days ago | IN | 0 ETH | 0.00004645 | ||||
| Approve | 23310876 | 152 days ago | IN | 0 ETH | 0.00005359 | ||||
| Approve | 23310871 | 152 days ago | IN | 0 ETH | 0.00005369 | ||||
| Approve | 23245804 | 161 days ago | IN | 0 ETH | 0.0001236 | ||||
| Approve | 23241440 | 161 days ago | IN | 0 ETH | 0.00002723 | ||||
| Approve | 23240640 | 162 days ago | IN | 0 ETH | 0.00019957 | ||||
| Approve | 23240197 | 162 days ago | IN | 0 ETH | 0.00011488 | ||||
| Approve | 23240185 | 162 days ago | IN | 0 ETH | 0.0000862 | ||||
| Approve | 23240184 | 162 days ago | IN | 0 ETH | 0.00008623 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// Enter the realm of Zodia
// https://www.zodia.world/
pragma solidity ^0.8.28;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IUniswapV2Router02} from "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import {IUniswapV2Factory} from "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
contract Token is ERC20, Ownable {
uint256 public immutable MAX_SUPPLY;
address public immutable pair;
address public treasury;
IUniswapV2Router02 private constant _router =
IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address private immutable _weth;
address private immutable _deployer;
uint256 public startBlock;
uint256 public startBlockTime;
mapping(address account => bool) public isExcludedFromFees;
mapping(address account => bool) public isExcludedFromMaxWallet;
mapping(uint256 blockNumber => uint256 txCount) public maxBuyTxsPerBlock;
mapping(uint256 blockNumber => uint256 supplyPerBlock)
public supplyPerBlock;
constructor(
string memory name,
string memory symbol,
uint256 maxSupply,
address _treasury
) 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[treasury] = true;
isExcludedFromMaxWallet[msg.sender] = true;
isExcludedFromMaxWallet[address(this)] = true;
isExcludedFromMaxWallet[pair] = true;
isExcludedFromMaxWallet[treasury] = true;
_mint(msg.sender, maxSupply);
_approve(msg.sender, address(_router), type(uint256).max);
treasury = _treasury;
_deployer = msg.sender;
_approve(address(this), address(_router), type(uint256).max);
}
function setTreasury(address newTreasury) external {
require(newTreasury != address(0), "treasury-is-0");
require(
msg.sender == _deployer || msg.sender == owner(),
"only-deployer"
);
treasury = newTreasury;
}
function enableTrading() 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 feesAndMaxWallet()
external
view
returns (uint256 _feeBps, uint256 _maxWallet)
{
return _feesAndMaxWallet();
}
function _feesAndMaxWallet()
internal
view
returns (uint256 _feeBps, uint256 _maxWallet)
{
if (block.number - startBlock < 1) {
return (0, MAX_SUPPLY / 200);
}
uint256 _diffSeconds = block.timestamp - startBlockTime;
if (_diffSeconds < 3600) {
_maxWallet = MAX_SUPPLY / 200; // 0.5%
// 1 min
if (_diffSeconds < 60) {
_feeBps = 4000; // 40%
return (_feeBps, _maxWallet);
}
// 2-5 min
if (_diffSeconds < 300) {
_feeBps = 3000; // 30%
return (_feeBps, _maxWallet);
}
// 6-8 min
if (_diffSeconds < 480) {
_feeBps = 2000; // 20%
return (_feeBps, _maxWallet);
}
if (_diffSeconds < 900) {
// 9-15 min
_feeBps = 1000; // 10%
return (_feeBps, _maxWallet);
}
_feeBps = 500;
}
uint256 day = _diffSeconds / 86400;
_feeBps = (day * 100) > 500 ? 0 : 500 - (day * 100);
_maxWallet = MAX_SUPPLY;
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 (isBuy && block.number - startBlock < 1) {
require(
maxBuyTxsPerBlock[block.number] <= 50,
"max-buy-txs-per-block-exceeded"
);
maxBuyTxsPerBlock[block.number]++;
}
if (_feeBps != 0) {
if (isBuy && !isExcludedFromFees[to]) {
uint256 fee = (value * _feeBps) / 10000;
value -= fee;
super._update(from, address(this), fee);
}
if (!isBuy && !isExcludedFromFees[from]) {
uint256 fee = (value * _feeBps) / 10000;
value -= fee;
super._update(from, address(this), fee);
_swapTokensForEth();
}
} else {
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;
}
if (supplyPerBlock[block.number] > MAX_SUPPLY / 200) {
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;
}
supplyPerBlock[block.number] += _tokenAmount;
_path[0] = address(this);
_path[1] = _weth;
_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
_tokenAmount,
0,
_path,
treasury,
block.timestamp
);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @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);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC6093.sol)
pragma solidity >=0.8.4;
/**
* @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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
/**
* @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;
}
/// @inheritdoc IERC20
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/// @inheritdoc IERC20
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;
}
/// @inheritdoc IERC20
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);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity >=0.6.2;
import {IERC20} from "../IERC20.sol";
/**
* @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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @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);
}// SPDX-License-Identifier: MIT
// 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;
}
}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.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);
}pragma solidity >=0.6.2;
import './IUniswapV2Router01.sol';
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;
}{
"evmVersion": "paris",
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}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":"_treasury","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":"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":[],"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":"newTreasury","type":"address"}],"name":"setTreasury","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":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"supplyPerBlock","outputs":[{"internalType":"uint256","name":"supplyPerBlock","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
61010060405234801561001157600080fd5b50604051614b2c380380614b2c8339818101604052810190610033919061179d565b33848481600390816100459190611a53565b5080600490816100559190611a53565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100ca5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c19190611b34565b60405180910390fd5b6100d9816106ed60201b60201c565b508160808181525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610141573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101659190611b4f565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021b9190611b4f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b8152600401610257929190611b7c565b6020604051808303816000875af1158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a9190611b4f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506105e533836107b360201b60201c565b61062a33737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61083b60201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250506106e430737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61083b60201b60201c565b505050506121da565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108255760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161081c9190611b34565b60405180910390fd5b6108376000838361085360201b60201c565b5050565b61084e8383836001610c9b60201b60201c565b505050565b600080610864610e7260201b60201c565b91509150600060a05173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905080806108d6575060a05173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610bd257600060075411806109355750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b90611c02565b60405180910390fd5b80801561098e575060016007544361098c9190611c51565b105b15610a14576032600b60004381526020019081526020016000205411156109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e190611cd1565b60405180910390fd5b600b60004381526020019081526020016000206000815480929190610a0e90611cf1565b91905055505b60008314610b6457808015610a735750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610ab65760006127108486610a899190611d39565b610a939190611daa565b90508085610aa19190611c51565b9450610ab4873083610f8360201b60201c565b505b80158015610b0e5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610b5f5760006127108486610b249190611d39565b610b2e9190611daa565b90508085610b3c9190611c51565b9450610b4f873083610f8360201b60201c565b610b5d6111a860201b60201c565b505b610bd1565b80158015610bbc5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610bd057610bcf6111a860201b60201c565b5b5b5b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c43575081610c358661154c60201b60201c565b85610c409190611ddb565b11155b610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990611e5b565b60405180910390fd5b610c93868686610f8360201b60201c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d0d5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d049190611b34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d7f5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610d769190611b34565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610e6c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e639190611e8a565b60405180910390a35b50505050565b600080600160075443610e859190611c51565b1015610ea557600060c8608051610e9c9190611daa565b91509150610f7f565b600060085442610eb59190611c51565b9050610e10811015610f2b5760c8608051610ed09190611daa565b9150603c811015610ee657610fa0925050610f7f565b61012c811015610efb57610bb8925050610f7f565b6101e0811015610f10576107d0925050610f7f565b610384811015610f25576103e8925050610f7f565b6101f492505b60006201518082610f3c9190611daa565b90506101f4606482610f4e9190611d39565b11610f7257606481610f609190611d39565b6101f4610f6d9190611c51565b610f75565b60005b9350608051925050505b9091565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd5578060026000828254610fc99190611ddb565b925050819055506110a8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611061578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161105893929190611ea5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f1578060026000828254039250508190555061113e565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119b9190611e8a565b60405180910390a3505050565b6000600854426111b89190611c51565b905061012c8110156111ca575061154a565b60c86080516111d99190611daa565b600c60004381526020019081526020016000205411156111f9575061154a565b600061120a3061154c60201b60201c565b90506000810361121b57505061154a565b6000600267ffffffffffffffff811115611238576112376115c3565b5b6040519080825280602002602001820160405280156112665781602001602082028036833780820191505090505b50905060c051816000815181106112805761127f611edc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106112cf576112ce611edc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611362929190612004565b600060405180830381865afa15801561137f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113a891906120fc565b6001815181106113bb576113ba611edc565b5b60200260200101519050808311156113d1578092505b82600c600043815260200190815260200160002060008282546113f49190611ddb565b9250508190555030826000815181106114105761140f611edc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060c0518260018151811061146157611460611edc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784600085600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611513959493929190612180565b600060405180830381600087803b15801561152d57600080fd5b505af1158015611541573d6000803e3d6000fd5b50505050505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6115fb826115b2565b810181811067ffffffffffffffff8211171561161a576116196115c3565b5b80604052505050565b600061162d611594565b905061163982826115f2565b919050565b600067ffffffffffffffff821115611659576116586115c3565b5b611662826115b2565b9050602081019050919050565b60005b8381101561168d578082015181840152602081019050611672565b60008484015250505050565b60006116ac6116a78461163e565b611623565b9050828152602081018484840111156116c8576116c76115ad565b5b6116d384828561166f565b509392505050565b600082601f8301126116f0576116ef6115a8565b5b8151611700848260208601611699565b91505092915050565b6000819050919050565b61171c81611709565b811461172757600080fd5b50565b60008151905061173981611713565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061176a8261173f565b9050919050565b61177a8161175f565b811461178557600080fd5b50565b60008151905061179781611771565b92915050565b600080600080608085870312156117b7576117b661159e565b5b600085015167ffffffffffffffff8111156117d5576117d46115a3565b5b6117e1878288016116db565b945050602085015167ffffffffffffffff811115611802576118016115a3565b5b61180e878288016116db565b935050604061181f8782880161172a565b925050606061183087828801611788565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061188e57607f821691505b6020821081036118a1576118a0611847565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026119097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118cc565b61191386836118cc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061195061194b61194684611709565b61192b565b611709565b9050919050565b6000819050919050565b61196a83611935565b61197e61197682611957565b8484546118d9565b825550505050565b600090565b611993611986565b61199e818484611961565b505050565b5b818110156119c2576119b760008261198b565b6001810190506119a4565b5050565b601f821115611a07576119d8816118a7565b6119e1846118bc565b810160208510156119f0578190505b611a046119fc856118bc565b8301826119a3565b50505b505050565b600082821c905092915050565b6000611a2a60001984600802611a0c565b1980831691505092915050565b6000611a438383611a19565b9150826002028217905092915050565b611a5c8261183c565b67ffffffffffffffff811115611a7557611a746115c3565b5b611a7f8254611876565b611a8a8282856119c6565b600060209050601f831160018114611abd5760008415611aab578287015190505b611ab58582611a37565b865550611b1d565b601f198416611acb866118a7565b60005b82811015611af357848901518255600182019150602085019450602081019050611ace565b86831015611b105784890151611b0c601f891682611a19565b8355505b6001600288020188555050505b505050505050565b611b2e8161175f565b82525050565b6000602082019050611b496000830184611b25565b92915050565b600060208284031215611b6557611b6461159e565b5b6000611b7384828501611788565b91505092915050565b6000604082019050611b916000830185611b25565b611b9e6020830184611b25565b9392505050565b600082825260208201905092915050565b7f74726164696e672d6e6f742d656e61626c656400000000000000000000000000600082015250565b6000611bec601383611ba5565b9150611bf782611bb6565b602082019050919050565b60006020820190508181036000830152611c1b81611bdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c5c82611709565b9150611c6783611709565b9250828203905081811115611c7f57611c7e611c22565b5b92915050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d65786365656465640000600082015250565b6000611cbb601e83611ba5565b9150611cc682611c85565b602082019050919050565b60006020820190508181036000830152611cea81611cae565b9050919050565b6000611cfc82611709565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d2e57611d2d611c22565b5b600182019050919050565b6000611d4482611709565b9150611d4f83611709565b9250828202611d5d81611709565b91508282048414831517611d7457611d73611c22565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611db582611709565b9150611dc083611709565b925082611dd057611dcf611d7b565b5b828204905092915050565b6000611de682611709565b9150611df183611709565b9250828201905080821115611e0957611e08611c22565b5b92915050565b7f6d61782d77616c6c65742d73697a652d65786365656465640000000000000000600082015250565b6000611e45601883611ba5565b9150611e5082611e0f565b602082019050919050565b60006020820190508181036000830152611e7481611e38565b9050919050565b611e8481611709565b82525050565b6000602082019050611e9f6000830184611e7b565b92915050565b6000606082019050611eba6000830186611b25565b611ec76020830185611e7b565b611ed46040830184611e7b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000611f30611f2b611f2684611f0b565b61192b565b611709565b9050919050565b611f4081611f15565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611f7b8161175f565b82525050565b6000611f8d8383611f72565b60208301905092915050565b6000602082019050919050565b6000611fb182611f46565b611fbb8185611f51565b9350611fc683611f62565b8060005b83811015611ff7578151611fde8882611f81565b9750611fe983611f99565b925050600181019050611fca565b5085935050505092915050565b60006040820190506120196000830185611f37565b818103602083015261202b8184611fa6565b90509392505050565b600067ffffffffffffffff82111561204f5761204e6115c3565b5b602082029050602081019050919050565b600080fd5b600061207861207384612034565b611623565b9050808382526020820190506020840283018581111561209b5761209a612060565b5b835b818110156120c457806120b0888261172a565b84526020840193505060208101905061209d565b5050509392505050565b600082601f8301126120e3576120e26115a8565b5b81516120f3848260208601612065565b91505092915050565b6000602082840312156121125761211161159e565b5b600082015167ffffffffffffffff8111156121305761212f6115a3565b5b61213c848285016120ce565b91505092915050565b6000819050919050565b600061216a61216561216084612145565b61192b565b611709565b9050919050565b61217a8161214f565b82525050565b600060a0820190506121956000830188611e7b565b6121a26020830187612171565b81810360408301526121b48186611fa6565b90506121c36060830185611b25565b6121d06080830184611e7b565b9695505050505050565b60805160a05160c05160e0516128e86122446000396000610a5c01526000818161197b0152611b7a01526000818161090701528181611234015261128c01526000818161062901528181610efe01528181610f500152818161102201526118c601526128e86000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80636dd3d39f116100de578063a25ba18311610097578063dbb64d4b11610071578063dbb64d4b1461047a578063dd62ed3e146104aa578063f0f44260146104da578063f2fde38b146104f65761018e565b8063a25ba1831461040d578063a8aa1b311461042c578063a9059cbb1461044a5761018e565b80636dd3d39f1461035d57806370a082311461038d578063715018a6146103bd5780638a8c523c146103c75780638da5cb5b146103d157806395d89b41146103ef5761018e565b8063313ce5671161014b57806348cd4cb11161012557806348cd4cb1146102d55780634fbee193146102f3578063590ffdce1461032357806361d027b31461033f5761018e565b8063313ce5671461027d57806332cb6b0c1461029b57806341220104146102b95761018e565b806306fdde0314610193578063095ea7b3146101b15780630c18d4ce146101e157806318160ddd146101ff57806321b024861461021d57806323b872dd1461024d575b600080fd5b61019b610512565b6040516101a89190611d28565b60405180910390f35b6101cb60048036038101906101c69190611df2565b6105a4565b6040516101d89190611e4d565b60405180910390f35b6101e96105c7565b6040516101f69190611e77565b60405180910390f35b6102076105cd565b6040516102149190611e77565b60405180910390f35b61023760048036038101906102329190611e92565b6105d7565b6040516102449190611e77565b60405180910390f35b61026760048036038101906102629190611ebf565b6105ef565b6040516102749190611e4d565b60405180910390f35b61028561061e565b6040516102929190611f2e565b60405180910390f35b6102a3610627565b6040516102b09190611e77565b60405180910390f35b6102d360048036038101906102ce9190611f75565b61064b565b005b6102dd6106ae565b6040516102ea9190611e77565b60405180910390f35b61030d60048036038101906103089190611fb5565b6106b4565b60405161031a9190611e4d565b60405180910390f35b61033d60048036038101906103389190611f75565b6106d4565b005b610347610737565b6040516103549190611ff1565b60405180910390f35b61037760048036038101906103729190611fb5565b61075d565b6040516103849190611e4d565b60405180910390f35b6103a760048036038101906103a29190611fb5565b61077d565b6040516103b49190611e77565b60405180910390f35b6103c56107c5565b005b6103cf6107d9565b005b6103d9610836565b6040516103e69190611ff1565b60405180910390f35b6103f7610860565b6040516104049190611d28565b60405180910390f35b6104156108f2565b60405161042392919061200c565b60405180910390f35b610434610905565b6040516104419190611ff1565b60405180910390f35b610464600480360381019061045f9190611df2565b610929565b6040516104719190611e4d565b60405180910390f35b610494600480360381019061048f9190611e92565b61094c565b6040516104a19190611e77565b60405180910390f35b6104c460048036038101906104bf9190612035565b610964565b6040516104d19190611e77565b60405180910390f35b6104f460048036038101906104ef9190611fb5565b6109eb565b005b610510600480360381019061050b9190611fb5565b610b69565b005b606060038054610521906120a4565b80601f016020809104026020016040519081016040528092919081815260200182805461054d906120a4565b801561059a5780601f1061056f5761010080835404028352916020019161059a565b820191906000526020600020905b81548152906001019060200180831161057d57829003601f168201915b5050505050905090565b6000806105af610bef565b90506105bc818585610bf7565b600191505092915050565b60085481565b6000600254905090565b600b6020528060005260406000206000915090505481565b6000806105fa610bef565b9050610607858285610c09565b610612858585610c9e565b60019150509392505050565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610653610d92565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60075481565b60096020528060005260406000206000915054906101000a900460ff1681565b6106dc610d92565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107cd610d92565b6107d76000610e19565b565b6107e1610d92565b600060075414610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612121565b60405180910390fd5b4360078190555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461086f906120a4565b80601f016020809104026020016040519081016040528092919081815260200182805461089b906120a4565b80156108e85780601f106108bd576101008083540402835291602001916108e8565b820191906000526020600020905b8154815290600101906020018083116108cb57829003601f168201915b5050505050905090565b6000806108fd610edf565b915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610934610bef565b9050610941818585610c9e565b600191505092915050565b600c6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a519061218d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ae65750610ab7610836565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c906121f9565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b71610d92565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610be35760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bda9190611ff1565b60405180910390fd5b610bec81610e19565b50565b600033905090565b610c04838383600161104a565b505050565b6000610c158484610964565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610c985781811015610c88578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c7f93929190612219565b60405180910390fd5b610c978484848403600061104a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d105760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d079190611ff1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d825760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d799190611ff1565b60405180910390fd5b610d8d838383611221565b505050565b610d9a610bef565b73ffffffffffffffffffffffffffffffffffffffff16610db8610836565b73ffffffffffffffffffffffffffffffffffffffff1614610e1757610ddb610bef565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e0e9190611ff1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600160075443610ef2919061227f565b1015610f3057600060c87f0000000000000000000000000000000000000000000000000000000000000000610f2791906122e2565b91509150611046565b600060085442610f40919061227f565b9050610e10811015610fd45760c87f0000000000000000000000000000000000000000000000000000000000000000610f7991906122e2565b9150603c811015610f8f57610fa0925050611046565b61012c811015610fa457610bb8925050611046565b6101e0811015610fb9576107d0925050611046565b610384811015610fce576103e8925050611046565b6101f492505b60006201518082610fe591906122e2565b90506101f4606482610ff79190612313565b1161101b576064816110099190612313565b6101f4611016919061227f565b61101e565b60005b93507f0000000000000000000000000000000000000000000000000000000000000000925050505b9091565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036110bc5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016110b39190611ff1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361112e5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111259190611ff1565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561121b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112129190611e77565b60405180910390a35b50505050565b60008061122c610edf565b9150915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905080806112da57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156115be57600060075411806113395750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f906123a1565b60405180910390fd5b8080156113925750600160075443611390919061227f565b105b15611418576032600b60004381526020019081526020016000205411156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e59061240d565b60405180910390fd5b600b600043815260200190815260200160002060008154809291906114129061242d565b91905055505b60008314611556578080156114775750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114b4576000612710848661148d9190612313565b61149791906122e2565b905080856114a5919061227f565b94506114b287308361167b565b505b8015801561150c5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561155157600061271084866115229190612313565b61152c91906122e2565b9050808561153a919061227f565b945061154787308361167b565b61154f6118a0565b505b6115bd565b801580156115ae5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156115bc576115bb6118a0565b5b5b5b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061162957508161161b8661077d565b856116269190612475565b11155b611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f906124f5565b60405180910390fd5b61167386868661167b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116cd5780600260008282546116c19190612475565b925050819055506117a0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611759578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161175093929190612219565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e95780600260008282540392505081905550611836565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118939190611e77565b60405180910390a3505050565b6000600854426118b0919061227f565b905061012c8110156118c25750611c96565b60c87f00000000000000000000000000000000000000000000000000000000000000006118ef91906122e2565b600c600043815260200190815260200160002054111561190f5750611c96565b600061191a3061077d565b90506000810361192b575050611c96565b6000600267ffffffffffffffff81111561194857611947612515565b5b6040519080825280602002602001820160405280156119765781602001602082028036833780820191505090505b5090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106119ae576119ad612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106119fd576119fc612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611a90929190612676565b600060405180830381865afa158015611aad573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611ad691906127d4565b600181518110611ae957611ae8612544565b5b6020026020010151905080831115611aff578092505b82600c60004381526020019081526020016000206000828254611b229190612475565b925050819055503082600081518110611b3e57611b3d612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000082600181518110611bad57611bac612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784600085600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611c5f959493929190612858565b600060405180830381600087803b158015611c7957600080fd5b505af1158015611c8d573d6000803e3d6000fd5b50505050505050505b565b600081519050919050565b600082825260208201905092915050565b60005b83811015611cd2578082015181840152602081019050611cb7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cfa82611c98565b611d048185611ca3565b9350611d14818560208601611cb4565b611d1d81611cde565b840191505092915050565b60006020820190508181036000830152611d428184611cef565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d8982611d5e565b9050919050565b611d9981611d7e565b8114611da457600080fd5b50565b600081359050611db681611d90565b92915050565b6000819050919050565b611dcf81611dbc565b8114611dda57600080fd5b50565b600081359050611dec81611dc6565b92915050565b60008060408385031215611e0957611e08611d54565b5b6000611e1785828601611da7565b9250506020611e2885828601611ddd565b9150509250929050565b60008115159050919050565b611e4781611e32565b82525050565b6000602082019050611e626000830184611e3e565b92915050565b611e7181611dbc565b82525050565b6000602082019050611e8c6000830184611e68565b92915050565b600060208284031215611ea857611ea7611d54565b5b6000611eb684828501611ddd565b91505092915050565b600080600060608486031215611ed857611ed7611d54565b5b6000611ee686828701611da7565b9350506020611ef786828701611da7565b9250506040611f0886828701611ddd565b9150509250925092565b600060ff82169050919050565b611f2881611f12565b82525050565b6000602082019050611f436000830184611f1f565b92915050565b611f5281611e32565b8114611f5d57600080fd5b50565b600081359050611f6f81611f49565b92915050565b60008060408385031215611f8c57611f8b611d54565b5b6000611f9a85828601611da7565b9250506020611fab85828601611f60565b9150509250929050565b600060208284031215611fcb57611fca611d54565b5b6000611fd984828501611da7565b91505092915050565b611feb81611d7e565b82525050565b60006020820190506120066000830184611fe2565b92915050565b60006040820190506120216000830185611e68565b61202e6020830184611e68565b9392505050565b6000806040838503121561204c5761204b611d54565b5b600061205a85828601611da7565b925050602061206b85828601611da7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806120bc57607f821691505b6020821081036120cf576120ce612075565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c6564000000000000000000600082015250565b600061210b601783611ca3565b9150612116826120d5565b602082019050919050565b6000602082019050818103600083015261213a816120fe565b9050919050565b7f74726561737572792d69732d3000000000000000000000000000000000000000600082015250565b6000612177600d83611ca3565b915061218282612141565b602082019050919050565b600060208201905081810360008301526121a68161216a565b9050919050565b7f6f6e6c792d6465706c6f79657200000000000000000000000000000000000000600082015250565b60006121e3600d83611ca3565b91506121ee826121ad565b602082019050919050565b60006020820190508181036000830152612212816121d6565b9050919050565b600060608201905061222e6000830186611fe2565b61223b6020830185611e68565b6122486040830184611e68565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061228a82611dbc565b915061229583611dbc565b92508282039050818111156122ad576122ac612250565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122ed82611dbc565b91506122f883611dbc565b925082612308576123076122b3565b5b828204905092915050565b600061231e82611dbc565b915061232983611dbc565b925082820261233781611dbc565b9150828204841483151761234e5761234d612250565b5b5092915050565b7f74726164696e672d6e6f742d656e61626c656400000000000000000000000000600082015250565b600061238b601383611ca3565b915061239682612355565b602082019050919050565b600060208201905081810360008301526123ba8161237e565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d65786365656465640000600082015250565b60006123f7601e83611ca3565b9150612402826123c1565b602082019050919050565b60006020820190508181036000830152612426816123ea565b9050919050565b600061243882611dbc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361246a57612469612250565b5b600182019050919050565b600061248082611dbc565b915061248b83611dbc565b92508282019050808211156124a3576124a2612250565b5b92915050565b7f6d61782d77616c6c65742d73697a652d65786365656465640000000000000000600082015250565b60006124df601883611ca3565b91506124ea826124a9565b602082019050919050565b6000602082019050818103600083015261250e816124d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006125a261259d61259884612573565b61257d565b611dbc565b9050919050565b6125b281612587565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6125ed81611d7e565b82525050565b60006125ff83836125e4565b60208301905092915050565b6000602082019050919050565b6000612623826125b8565b61262d81856125c3565b9350612638836125d4565b8060005b8381101561266957815161265088826125f3565b975061265b8361260b565b92505060018101905061263c565b5085935050505092915050565b600060408201905061268b60008301856125a9565b818103602083015261269d8184612618565b90509392505050565b600080fd5b6126b482611cde565b810181811067ffffffffffffffff821117156126d3576126d2612515565b5b80604052505050565b60006126e6611d4a565b90506126f282826126ab565b919050565b600067ffffffffffffffff82111561271257612711612515565b5b602082029050602081019050919050565b600080fd5b60008151905061273781611dc6565b92915050565b600061275061274b846126f7565b6126dc565b9050808382526020820190506020840283018581111561277357612772612723565b5b835b8181101561279c57806127888882612728565b845260208401935050602081019050612775565b5050509392505050565b600082601f8301126127bb576127ba6126a6565b5b81516127cb84826020860161273d565b91505092915050565b6000602082840312156127ea576127e9611d54565b5b600082015167ffffffffffffffff81111561280857612807611d59565b5b612814848285016127a6565b91505092915050565b6000819050919050565b600061284261283d6128388461281d565b61257d565b611dbc565b9050919050565b61285281612827565b82525050565b600060a08201905061286d6000830188611e68565b61287a6020830187612849565b818103604083015261288c8186612618565b905061289b6060830185611fe2565b6128a86080830184611e68565b969550505050505056fea264697066735822122015dfe354f80bb0b1f029fcda92e942c42ac7e2fbe469312e724a5bc53a20f79664736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000a7e836475a685a19fe5707afce1a497168bcb19300000000000000000000000000000000000000000000000000000000000000055a6f64696100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055a4f444941000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80636dd3d39f116100de578063a25ba18311610097578063dbb64d4b11610071578063dbb64d4b1461047a578063dd62ed3e146104aa578063f0f44260146104da578063f2fde38b146104f65761018e565b8063a25ba1831461040d578063a8aa1b311461042c578063a9059cbb1461044a5761018e565b80636dd3d39f1461035d57806370a082311461038d578063715018a6146103bd5780638a8c523c146103c75780638da5cb5b146103d157806395d89b41146103ef5761018e565b8063313ce5671161014b57806348cd4cb11161012557806348cd4cb1146102d55780634fbee193146102f3578063590ffdce1461032357806361d027b31461033f5761018e565b8063313ce5671461027d57806332cb6b0c1461029b57806341220104146102b95761018e565b806306fdde0314610193578063095ea7b3146101b15780630c18d4ce146101e157806318160ddd146101ff57806321b024861461021d57806323b872dd1461024d575b600080fd5b61019b610512565b6040516101a89190611d28565b60405180910390f35b6101cb60048036038101906101c69190611df2565b6105a4565b6040516101d89190611e4d565b60405180910390f35b6101e96105c7565b6040516101f69190611e77565b60405180910390f35b6102076105cd565b6040516102149190611e77565b60405180910390f35b61023760048036038101906102329190611e92565b6105d7565b6040516102449190611e77565b60405180910390f35b61026760048036038101906102629190611ebf565b6105ef565b6040516102749190611e4d565b60405180910390f35b61028561061e565b6040516102929190611f2e565b60405180910390f35b6102a3610627565b6040516102b09190611e77565b60405180910390f35b6102d360048036038101906102ce9190611f75565b61064b565b005b6102dd6106ae565b6040516102ea9190611e77565b60405180910390f35b61030d60048036038101906103089190611fb5565b6106b4565b60405161031a9190611e4d565b60405180910390f35b61033d60048036038101906103389190611f75565b6106d4565b005b610347610737565b6040516103549190611ff1565b60405180910390f35b61037760048036038101906103729190611fb5565b61075d565b6040516103849190611e4d565b60405180910390f35b6103a760048036038101906103a29190611fb5565b61077d565b6040516103b49190611e77565b60405180910390f35b6103c56107c5565b005b6103cf6107d9565b005b6103d9610836565b6040516103e69190611ff1565b60405180910390f35b6103f7610860565b6040516104049190611d28565b60405180910390f35b6104156108f2565b60405161042392919061200c565b60405180910390f35b610434610905565b6040516104419190611ff1565b60405180910390f35b610464600480360381019061045f9190611df2565b610929565b6040516104719190611e4d565b60405180910390f35b610494600480360381019061048f9190611e92565b61094c565b6040516104a19190611e77565b60405180910390f35b6104c460048036038101906104bf9190612035565b610964565b6040516104d19190611e77565b60405180910390f35b6104f460048036038101906104ef9190611fb5565b6109eb565b005b610510600480360381019061050b9190611fb5565b610b69565b005b606060038054610521906120a4565b80601f016020809104026020016040519081016040528092919081815260200182805461054d906120a4565b801561059a5780601f1061056f5761010080835404028352916020019161059a565b820191906000526020600020905b81548152906001019060200180831161057d57829003601f168201915b5050505050905090565b6000806105af610bef565b90506105bc818585610bf7565b600191505092915050565b60085481565b6000600254905090565b600b6020528060005260406000206000915090505481565b6000806105fa610bef565b9050610607858285610c09565b610612858585610c9e565b60019150509392505050565b60006012905090565b7f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000081565b610653610d92565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60075481565b60096020528060005260406000206000915054906101000a900460ff1681565b6106dc610d92565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107cd610d92565b6107d76000610e19565b565b6107e1610d92565b600060075414610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612121565b60405180910390fd5b4360078190555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461086f906120a4565b80601f016020809104026020016040519081016040528092919081815260200182805461089b906120a4565b80156108e85780601f106108bd576101008083540402835291602001916108e8565b820191906000526020600020905b8154815290600101906020018083116108cb57829003601f168201915b5050505050905090565b6000806108fd610edf565b915091509091565b7f000000000000000000000000885c4407ad2f04c78f9f0fc2cfcc6d79dfa7d28681565b600080610934610bef565b9050610941818585610c9e565b600191505092915050565b600c6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a519061218d565b60405180910390fd5b7f00000000000000000000000011ca8dcfd1c4cd681f55942e271a31955678effb73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ae65750610ab7610836565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c906121f9565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b71610d92565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610be35760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bda9190611ff1565b60405180910390fd5b610bec81610e19565b50565b600033905090565b610c04838383600161104a565b505050565b6000610c158484610964565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610c985781811015610c88578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c7f93929190612219565b60405180910390fd5b610c978484848403600061104a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d105760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d079190611ff1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d825760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d799190611ff1565b60405180910390fd5b610d8d838383611221565b505050565b610d9a610bef565b73ffffffffffffffffffffffffffffffffffffffff16610db8610836565b73ffffffffffffffffffffffffffffffffffffffff1614610e1757610ddb610bef565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e0e9190611ff1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600160075443610ef2919061227f565b1015610f3057600060c87f0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000610f2791906122e2565b91509150611046565b600060085442610f40919061227f565b9050610e10811015610fd45760c87f0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000610f7991906122e2565b9150603c811015610f8f57610fa0925050611046565b61012c811015610fa457610bb8925050611046565b6101e0811015610fb9576107d0925050611046565b610384811015610fce576103e8925050611046565b6101f492505b60006201518082610fe591906122e2565b90506101f4606482610ff79190612313565b1161101b576064816110099190612313565b6101f4611016919061227f565b61101e565b60005b93507f0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000925050505b9091565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036110bc5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016110b39190611ff1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361112e5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111259190611ff1565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561121b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112129190611e77565b60405180910390a35b50505050565b60008061122c610edf565b9150915060007f000000000000000000000000885c4407ad2f04c78f9f0fc2cfcc6d79dfa7d28673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905080806112da57507f000000000000000000000000885c4407ad2f04c78f9f0fc2cfcc6d79dfa7d28673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156115be57600060075411806113395750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f906123a1565b60405180910390fd5b8080156113925750600160075443611390919061227f565b105b15611418576032600b60004381526020019081526020016000205411156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e59061240d565b60405180910390fd5b600b600043815260200190815260200160002060008154809291906114129061242d565b91905055505b60008314611556578080156114775750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114b4576000612710848661148d9190612313565b61149791906122e2565b905080856114a5919061227f565b94506114b287308361167b565b505b8015801561150c5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561155157600061271084866115229190612313565b61152c91906122e2565b9050808561153a919061227f565b945061154787308361167b565b61154f6118a0565b505b6115bd565b801580156115ae5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156115bc576115bb6118a0565b5b5b5b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061162957508161161b8661077d565b856116269190612475565b11155b611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f906124f5565b60405180910390fd5b61167386868661167b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116cd5780600260008282546116c19190612475565b925050819055506117a0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611759578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161175093929190612219565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e95780600260008282540392505081905550611836565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118939190611e77565b60405180910390a3505050565b6000600854426118b0919061227f565b905061012c8110156118c25750611c96565b60c87f0000000000000000000000000000000000000000033b2e3c9fd0803ce80000006118ef91906122e2565b600c600043815260200190815260200160002054111561190f5750611c96565b600061191a3061077d565b90506000810361192b575050611c96565b6000600267ffffffffffffffff81111561194857611947612515565b5b6040519080825280602002602001820160405280156119765781602001602082028036833780820191505090505b5090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816000815181106119ae576119ad612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106119fd576119fc612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611a90929190612676565b600060405180830381865afa158015611aad573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611ad691906127d4565b600181518110611ae957611ae8612544565b5b6020026020010151905080831115611aff578092505b82600c60004381526020019081526020016000206000828254611b229190612475565b925050819055503082600081518110611b3e57611b3d612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282600181518110611bad57611bac612544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784600085600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611c5f959493929190612858565b600060405180830381600087803b158015611c7957600080fd5b505af1158015611c8d573d6000803e3d6000fd5b50505050505050505b565b600081519050919050565b600082825260208201905092915050565b60005b83811015611cd2578082015181840152602081019050611cb7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cfa82611c98565b611d048185611ca3565b9350611d14818560208601611cb4565b611d1d81611cde565b840191505092915050565b60006020820190508181036000830152611d428184611cef565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d8982611d5e565b9050919050565b611d9981611d7e565b8114611da457600080fd5b50565b600081359050611db681611d90565b92915050565b6000819050919050565b611dcf81611dbc565b8114611dda57600080fd5b50565b600081359050611dec81611dc6565b92915050565b60008060408385031215611e0957611e08611d54565b5b6000611e1785828601611da7565b9250506020611e2885828601611ddd565b9150509250929050565b60008115159050919050565b611e4781611e32565b82525050565b6000602082019050611e626000830184611e3e565b92915050565b611e7181611dbc565b82525050565b6000602082019050611e8c6000830184611e68565b92915050565b600060208284031215611ea857611ea7611d54565b5b6000611eb684828501611ddd565b91505092915050565b600080600060608486031215611ed857611ed7611d54565b5b6000611ee686828701611da7565b9350506020611ef786828701611da7565b9250506040611f0886828701611ddd565b9150509250925092565b600060ff82169050919050565b611f2881611f12565b82525050565b6000602082019050611f436000830184611f1f565b92915050565b611f5281611e32565b8114611f5d57600080fd5b50565b600081359050611f6f81611f49565b92915050565b60008060408385031215611f8c57611f8b611d54565b5b6000611f9a85828601611da7565b9250506020611fab85828601611f60565b9150509250929050565b600060208284031215611fcb57611fca611d54565b5b6000611fd984828501611da7565b91505092915050565b611feb81611d7e565b82525050565b60006020820190506120066000830184611fe2565b92915050565b60006040820190506120216000830185611e68565b61202e6020830184611e68565b9392505050565b6000806040838503121561204c5761204b611d54565b5b600061205a85828601611da7565b925050602061206b85828601611da7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806120bc57607f821691505b6020821081036120cf576120ce612075565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c6564000000000000000000600082015250565b600061210b601783611ca3565b9150612116826120d5565b602082019050919050565b6000602082019050818103600083015261213a816120fe565b9050919050565b7f74726561737572792d69732d3000000000000000000000000000000000000000600082015250565b6000612177600d83611ca3565b915061218282612141565b602082019050919050565b600060208201905081810360008301526121a68161216a565b9050919050565b7f6f6e6c792d6465706c6f79657200000000000000000000000000000000000000600082015250565b60006121e3600d83611ca3565b91506121ee826121ad565b602082019050919050565b60006020820190508181036000830152612212816121d6565b9050919050565b600060608201905061222e6000830186611fe2565b61223b6020830185611e68565b6122486040830184611e68565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061228a82611dbc565b915061229583611dbc565b92508282039050818111156122ad576122ac612250565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122ed82611dbc565b91506122f883611dbc565b925082612308576123076122b3565b5b828204905092915050565b600061231e82611dbc565b915061232983611dbc565b925082820261233781611dbc565b9150828204841483151761234e5761234d612250565b5b5092915050565b7f74726164696e672d6e6f742d656e61626c656400000000000000000000000000600082015250565b600061238b601383611ca3565b915061239682612355565b602082019050919050565b600060208201905081810360008301526123ba8161237e565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d65786365656465640000600082015250565b60006123f7601e83611ca3565b9150612402826123c1565b602082019050919050565b60006020820190508181036000830152612426816123ea565b9050919050565b600061243882611dbc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361246a57612469612250565b5b600182019050919050565b600061248082611dbc565b915061248b83611dbc565b92508282019050808211156124a3576124a2612250565b5b92915050565b7f6d61782d77616c6c65742d73697a652d65786365656465640000000000000000600082015250565b60006124df601883611ca3565b91506124ea826124a9565b602082019050919050565b6000602082019050818103600083015261250e816124d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006125a261259d61259884612573565b61257d565b611dbc565b9050919050565b6125b281612587565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6125ed81611d7e565b82525050565b60006125ff83836125e4565b60208301905092915050565b6000602082019050919050565b6000612623826125b8565b61262d81856125c3565b9350612638836125d4565b8060005b8381101561266957815161265088826125f3565b975061265b8361260b565b92505060018101905061263c565b5085935050505092915050565b600060408201905061268b60008301856125a9565b818103602083015261269d8184612618565b90509392505050565b600080fd5b6126b482611cde565b810181811067ffffffffffffffff821117156126d3576126d2612515565b5b80604052505050565b60006126e6611d4a565b90506126f282826126ab565b919050565b600067ffffffffffffffff82111561271257612711612515565b5b602082029050602081019050919050565b600080fd5b60008151905061273781611dc6565b92915050565b600061275061274b846126f7565b6126dc565b9050808382526020820190506020840283018581111561277357612772612723565b5b835b8181101561279c57806127888882612728565b845260208401935050602081019050612775565b5050509392505050565b600082601f8301126127bb576127ba6126a6565b5b81516127cb84826020860161273d565b91505092915050565b6000602082840312156127ea576127e9611d54565b5b600082015167ffffffffffffffff81111561280857612807611d59565b5b612814848285016127a6565b91505092915050565b6000819050919050565b600061284261283d6128388461281d565b61257d565b611dbc565b9050919050565b61285281612827565b82525050565b600060a08201905061286d6000830188611e68565b61287a6020830187612849565b818103604083015261288c8186612618565b905061289b6060830185611fe2565b6128a86080830184611e68565b969550505050505056fea264697066735822122015dfe354f80bb0b1f029fcda92e942c42ac7e2fbe469312e724a5bc53a20f79664736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000a7e836475a685a19fe5707afce1a497168bcb19300000000000000000000000000000000000000000000000000000000000000055a6f64696100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055a4f444941000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Zodia
Arg [1] : symbol (string): ZODIA
Arg [2] : maxSupply (uint256): 1000000000000000000000000000
Arg [3] : _treasury (address): 0xa7E836475a685A19fe5707Afce1a497168bcB193
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [3] : 000000000000000000000000a7e836475a685a19fe5707afce1a497168bcb193
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 5a6f646961000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 5a4f444941000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.71
Net Worth in ETH
0.000342
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BASE | 100.00% | $2,069.78 | 0.00034189 | $0.707639 |
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.