Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
BABYDOGEonBasePresale
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2025-04-07
*/
// SPDX-License-Identifier: UNLICENSED
// ************************************************************************************
/*
.-%%%%%#+:.. -+#*=+#+.
*%####*##%###%# --=+##=+#+.
#####%#**#%@##%#### %%*-:-+##+...
###%%%#%%#**###%######## ##+#*-:-##%-....
##%# .+%%***#%%%%%%%%####.....---... %%%%%%#=--*%****....
%% ..%%#**%%%%%##########-------..###%%%%*=-+*-. ****..
.=%###%@%#******+=-------++++++-..-==#---==.
.:*#%%##*********+-------++***+=:.....-++-=.
--##*********#%**+-----=+*#**+:::.....-*-:.
...+******%@@%***+-----=*++%@@%#:......:....
...-******@@@%=@**-----:-+++@@@#%@=::..........
....=****%#*%#%@@@**=---...:--%%@%+:::-:..::.....
...:*****%#****%@#*+---.:.....::@@@@@%#:+-.::::.....
.-+******#=-=******=--=%@@%=:....::::::...-::::::....
.---------=******=----@@@%%*.....::::--.............
..-------*****##*=----+%@@*:.....:++*++=-...........
:==------=+*#####*=---=*%%*=:...=#****=:............
..-===----------=#%@%###%%#**%%#*=----:...........
..:-====---------=*%*+**+=#+--------::::::....
..:-===--------==-*#%%#+---------:::::...
..=#======---=+++++==---------:=-.
.-+#%#+==++*=---==-----=##**#--=::.
:#@@%##****#%##+===*#%#*****-:::-:.
.+%%%%%%%%%%@@@@@%@@@%#%%%%:.=::::.
.-#%%%%%%%%%%@#+###*%%%%%+-*:::::..
.:%@@%%%%%%%%**==#+##%%#+=*-:::::.
.=#%%%%%%%%%%*=-+*+=#*%%%%=:::::...
.=###%%%%%%+-=*=-+=*=--=#*::::..::.
.-###*##+BABYDOGE on Base=#*=...:-.
..+####**=----------------+**+:...:::...
.:**######*=babydoge20.com=*****+-..:::..
.*=*****###*===----=----=+#***++=:.:::::.
:*+********##*===LFG=====******++:...-::::.
-**********#%#%*+++====*%#***++-.::.----:.
.=#********#%%#*+++++++*##****-:.:::+=--.
.**********%#***++++++*##***-::::::+++-.
.********###%#***%*#%%%#**-::::::+**+=.
.-##******#@@@@@@@@@@@@@@*+:::::::=-......
..-********#%%%%%@@@@@@%%##*--::::::-.....:..
.==+===+++**#%##%##%@%-*%###@*-:.......::--.::.
..:*=*===++==+*#%%%%%#%%%%%%%#%%+-.:...:...:+-=-.
-=++===#=+=+*##**++==--::--==++--::...=..=.
.*+=++##+=+=-... .:=+*=-:-+:.: .
*/
// ************************************************************************************
// The New BABYDOGE on Base
pragma solidity 0.8.19;
// flattened
// import "@openzeppelin/[email protected]/token/ERC20/IERC20.sol";
// File: @openzeppelin/[email protected]/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/[email protected]/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/[email protected]/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin/[email protected]/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, _allowances[owner][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = _allowances[owner][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Spend `amount` form the allowance of `owner` toward `spender`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
interface Aggregator {
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
contract BABYDOGEonBasePresale {
address public owner;
address public presaleTokenAddress;
address public USDTAddress;
address public chainlinkPricefeedEth;
uint256 public totalTokens;
uint256 public initialTokenQty;
uint256 public initialValueToAddInUSD;
uint256 public burnTokens;
uint256 public devMarketingTokens;
uint256 public totalTokensOfferedPresale;
uint256 public softCapUSD;
uint256 public presaleValueRaised;
uint256 public hardCapUSD;
uint256 public presaleEndDate;
bool public presaleSuccessful;
bool public claimEnabled;
bool public presaleCancelled;
bool public presalePaused;
struct Contributor {
address contributorAddress;
uint256 totalContributionUSD;
}
mapping(address => uint256) public ethContributions;
mapping(address => uint256) public usdtContributions;
mapping(address => bool) public claimed;
mapping(address => bool) public refunded;
Contributor[] public contributors;
mapping(address => bool) public isContributor;
// Events for updates
event TokensPurchased(address indexed buyer, uint256 amountContributed);
event TokensClaimed(address indexed claimer, uint256 amountClaimed);
event RefundIssued(address indexed user, uint256 amountRefunded);
event PresaleSuccessful(uint256 totalContributionsUSD, uint256 totalTokensOfferedPresaleDistributed);
event ClaimEnabled();
event PresaleCancelled();
event PresalePaused(bool paused);
event ParametersUpdated(
uint256 newInitialTokenQty,
uint256 newInitialValueToAddInUSD,
uint256 newBurnTokens,
uint256 newPresaleEndDate,
uint256 newDevMarketingTokens,
uint256 newHardCapUSD
);
event TotalTokensOfferedPresaleUpdated(uint256 newTotalTokensOfferedPresale);
event PresaleValueRaisedUpdated(uint256 newPresaleValueRaised);
modifier onlyOwner() {
require(msg.sender == owner, "Caller is not owner");
_;
}
modifier presaleNotCancelled() {
require(!presaleCancelled, "Presale has been cancelled");
_;
}
modifier presaleNotPaused() {
require(!presalePaused, "Presale is paused");
_;
}
modifier presaleNotEnded() {
require(block.timestamp <= presaleEndDate, "Presale has ended");
_;
}
constructor(
address _presaleTokenAddress,
uint256 _totalTokensOfferedPresale,
uint256 _softCapUSD,
uint256 _presaleEndDate,
uint256 _totalTokens // Set totalTokens during deployment
) {
owner = msg.sender;
presaleTokenAddress = _presaleTokenAddress;
USDTAddress = 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913; // Base USDC
chainlinkPricefeedEth = 0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70;
totalTokens = _totalTokens; // Assign directly to totalTokens
initialTokenQty = 0;
initialValueToAddInUSD = 0;
burnTokens = 0;
devMarketingTokens = 0;
totalTokensOfferedPresale = _totalTokensOfferedPresale;
softCapUSD = _softCapUSD;
presaleEndDate = _presaleEndDate;
presaleSuccessful = false;
claimEnabled = false;
presaleCancelled = false;
presalePaused = false;
}
// Bulk update function for multiple parameters at once, including softCapUSD and totalTokensOfferedPresale
function updateParameters(
uint256 newInitialTokenQty,
uint256 newInitialValueToAddInUSD,
uint256 newBurnTokens,
uint256 newPresaleEndDate,
uint256 newDevMarketingTokens,
uint256 newHardCapUSD,
uint256 newSoftCapUSD,
uint256 newTotalTokensOfferedPresale
) external onlyOwner {
initialTokenQty = newInitialTokenQty;
initialValueToAddInUSD = newInitialValueToAddInUSD;
burnTokens = newBurnTokens;
presaleEndDate = newPresaleEndDate;
devMarketingTokens = newDevMarketingTokens;
hardCapUSD = newHardCapUSD;
softCapUSD = newSoftCapUSD;
totalTokensOfferedPresale = newTotalTokensOfferedPresale;
emit ParametersUpdated(
newInitialTokenQty,
newInitialValueToAddInUSD,
newBurnTokens,
newPresaleEndDate,
newDevMarketingTokens,
newHardCapUSD
);
// Emit events for the updated values of softCapUSD and totalTokensOfferedPresale
emit TotalTokensOfferedPresaleUpdated(newTotalTokensOfferedPresale);
emit PresaleValueRaisedUpdated(newSoftCapUSD);
}
// Update total tokens offered for presale
function updateTotalTokensOfferedPresale(uint256 newTotalTokensOfferedPresale) external onlyOwner {
totalTokensOfferedPresale = newTotalTokensOfferedPresale;
emit TotalTokensOfferedPresaleUpdated(newTotalTokensOfferedPresale);
}
// Update presale value raised manually
function updatePresaleValueRaised(uint256 newPresaleValueRaised) external onlyOwner {
presaleValueRaised = newPresaleValueRaised;
emit PresaleValueRaisedUpdated(newPresaleValueRaised);
}
// Contribute with ETH
function contributeWithETH() external payable presaleNotCancelled presaleNotPaused presaleNotEnded {
require(msg.value > 0, "Must contribute ETH");
uint256 contributionInUSD = ethToUSD(msg.value);
ethContributions[msg.sender] += msg.value;
presaleValueRaised += contributionInUSD;
if (!isContributor[msg.sender]) {
contributors.push(Contributor(msg.sender, contributionInUSD));
isContributor[msg.sender] = true;
} else {
for (uint256 i = 0; i < contributors.length; i++) {
if (contributors[i].contributorAddress == msg.sender) {
contributors[i].totalContributionUSD += contributionInUSD;
break;
}
}
}
emit TokensPurchased(msg.sender, contributionInUSD);
}
// Contribute with USDT
function contributeWithUSDT(uint256 usdtAmount) external presaleNotCancelled presaleNotPaused presaleNotEnded {
require(usdtAmount > 0, "Must contribute USDT");
uint256 allowance = IERC20(USDTAddress).allowance(msg.sender, address(this));
require(allowance >= usdtAmount, "USDT allowance too low");
IERC20(USDTAddress).transferFrom(msg.sender, address(this), usdtAmount);
usdtContributions[msg.sender] += usdtAmount;
presaleValueRaised += usdtToUSD(usdtAmount);
if (!isContributor[msg.sender]) {
contributors.push(Contributor(msg.sender, usdtAmount));
isContributor[msg.sender] = true;
} else {
for (uint256 i = 0; i < contributors.length; i++) {
if (contributors[i].contributorAddress == msg.sender) {
contributors[i].totalContributionUSD += usdtAmount;
break;
}
}
}
emit TokensPurchased(msg.sender, usdtAmount);
}
// End the presale if the soft cap is reached
function endPresale() external onlyOwner presaleNotCancelled {
require(presaleValueRaised >= softCapUSD, "Soft cap not reached");
presaleSuccessful = true;
emit PresaleSuccessful(presaleValueRaised, totalTokensOfferedPresale);
}
// Enable token claiming
function enableClaimTokens() external onlyOwner {
require(presaleSuccessful, "Presale must be successful to enable claims");
claimEnabled = true;
emit ClaimEnabled();
}
// Claim tokens after the presale
function claimTokens() external {
require(presaleSuccessful, "Presale not successful");
require(claimEnabled, "Claiming not enabled");
require(!claimed[msg.sender], "Tokens already claimed");
uint256 userContributionUSD = ethToUSD(ethContributions[msg.sender]) + usdtContributions[msg.sender];
require(userContributionUSD > 0, "No contributions from user");
uint256 userTokenAmount = (totalTokensOfferedPresale * userContributionUSD) / presaleValueRaised;
require(userTokenAmount > 0, "No tokens to claim");
claimed[msg.sender] = true;
IERC20(presaleTokenAddress).transfer(msg.sender, userTokenAmount);
emit TokensClaimed(msg.sender, userTokenAmount);
}
// Issue refunds if the presale is cancelled or fails
function refund() external {
require(presaleCancelled || presaleValueRaised < softCapUSD, "Refunds not allowed");
require(!refunded[msg.sender], "Already refunded");
uint256 ethContribution = ethContributions[msg.sender];
if (ethContribution > 0) {
ethContributions[msg.sender] = 0;
payable(msg.sender).transfer(ethContribution);
refunded[msg.sender] = true;
emit RefundIssued(msg.sender, ethContribution);
}
uint256 usdtContribution = usdtContributions[msg.sender];
if (usdtContribution > 0) {
usdtContributions[msg.sender] = 0;
IERC20(USDTAddress).transfer(msg.sender, usdtContribution);
refunded[msg.sender] = true;
emit RefundIssued(msg.sender, usdtContribution);
}
}
// Cancel the presale
function cancelPresale() external onlyOwner {
require(!presaleSuccessful, "Cannot cancel a successful presale");
presaleCancelled = true;
emit PresaleCancelled();
}
// Toggle presale pause state
function togglePresalePause() external onlyOwner {
presalePaused = !presalePaused;
emit PresalePaused(presalePaused);
}
// Withdraw remaining tokens after the presale
function withdrawRemainingTokens() external onlyOwner {
require(presaleSuccessful, "Presale not successful");
uint256 remainingTokens = IERC20(presaleTokenAddress).balanceOf(address(this));
IERC20(presaleTokenAddress).transfer(owner, remainingTokens);
}
// Withdraw contributions (ETH and USDT)
function withdrawContributions() external onlyOwner {
require(presaleSuccessful, "Presale not successful");
uint256 contractETHBalance = address(this).balance;
if (contractETHBalance > 0) {
payable(owner).transfer(contractETHBalance);
}
uint256 contractUSDTBalance = IERC20(USDTAddress).balanceOf(address(this));
if (contractUSDTBalance > 0) {
IERC20(USDTAddress).transfer(owner, contractUSDTBalance);
}
}
// Get the latest ETH price using Chainlink
function getLatestETHPrice() public view returns (uint256) {
(, int256 price, , ,) = Aggregator(chainlinkPricefeedEth).latestRoundData();
return uint256(price * 10 ** 10); // Convert to 18 decimals
}
// Convert ETH to USD based on the Chainlink price
function ethToUSD(uint256 ethAmount) public view returns (uint256) {
uint256 ethPriceInUSD = getLatestETHPrice();
return (ethAmount * ethPriceInUSD) / 1 ether / 1e12; // Convert to 6 decimals
}
// Convert USDT to USD (1:1 ratio)
function usdtToUSD(uint256 usdtAmount) public pure returns (uint256) {
return usdtAmount;
}
// Get the balance of presale tokens
function getPresaleTokenBalance() public view returns (uint256) {
return IERC20(presaleTokenAddress).balanceOf(address(this));
}
// Get the list of contributors
function getContributors() external view returns (Contributor[] memory) {
return contributors;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_presaleTokenAddress","type":"address"},{"internalType":"uint256","name":"_totalTokensOfferedPresale","type":"uint256"},{"internalType":"uint256","name":"_softCapUSD","type":"uint256"},{"internalType":"uint256","name":"_presaleEndDate","type":"uint256"},{"internalType":"uint256","name":"_totalTokens","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"ClaimEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newInitialTokenQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newInitialValueToAddInUSD","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBurnTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPresaleEndDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDevMarketingTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newHardCapUSD","type":"uint256"}],"name":"ParametersUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"PresaleCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PresalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalContributionsUSD","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokensOfferedPresaleDistributed","type":"uint256"}],"name":"PresaleSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPresaleValueRaised","type":"uint256"}],"name":"PresaleValueRaisedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountRefunded","type":"uint256"}],"name":"RefundIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountContributed","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTotalTokensOfferedPresale","type":"uint256"}],"name":"TotalTokensOfferedPresaleUpdated","type":"event"},{"inputs":[],"name":"USDTAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainlinkPricefeedEth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contributeWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"contributeWithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"contributors","outputs":[{"internalType":"address","name":"contributorAddress","type":"address"},{"internalType":"uint256","name":"totalContributionUSD","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devMarketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableClaimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"ethToUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContributors","outputs":[{"components":[{"internalType":"address","name":"contributorAddress","type":"address"},{"internalType":"uint256","name":"totalContributionUSD","type":"uint256"}],"internalType":"struct BABYDOGEonBasePresale.Contributor[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestETHPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPresaleTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hardCapUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTokenQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialValueToAddInUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isContributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCancelled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEndDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSuccessful","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleValueRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"refunded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"softCapUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePresalePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensOfferedPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInitialTokenQty","type":"uint256"},{"internalType":"uint256","name":"newInitialValueToAddInUSD","type":"uint256"},{"internalType":"uint256","name":"newBurnTokens","type":"uint256"},{"internalType":"uint256","name":"newPresaleEndDate","type":"uint256"},{"internalType":"uint256","name":"newDevMarketingTokens","type":"uint256"},{"internalType":"uint256","name":"newHardCapUSD","type":"uint256"},{"internalType":"uint256","name":"newSoftCapUSD","type":"uint256"},{"internalType":"uint256","name":"newTotalTokensOfferedPresale","type":"uint256"}],"name":"updateParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPresaleValueRaised","type":"uint256"}],"name":"updatePresaleValueRaised","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTotalTokensOfferedPresale","type":"uint256"}],"name":"updateTotalTokensOfferedPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usdtContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"usdtToUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdrawContributions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRemainingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b506040516120fc3803806120fc83398101604081905261002f916100d1565b600080546001600160a01b031990811633178255600180546001600160a01b03989098169782169790971790965560028054871673833589fcd6edb6e08f4c7c32d4f71b54bda02913179055600380549096167371041dddad3595f9ced3dccfbe3d1f4b0a16bb7017909555600455600584905560068490556007849055600893909355600991909155600a55600d55600e805463ffffffff19169055610126565b600080600080600060a086880312156100e957600080fd5b85516001600160a01b038116811461010057600080fd5b602087015160408801516060890151608090990151929a91995097965090945092505050565b611fc7806101356000396000f3fe6080604052600436106102515760003560e01c80639a2e27f811610139578063c9fe0dff116100b6578063d78142aa1161007a578063d78142aa146106a7578063de81aaaa146106bd578063e621b149146106d3578063e730395a146106e9578063fb97956614610716578063ff920c741461072c57600080fd5b8063c9fe0dff14610607578063cbf14ab414610627578063cf3085f614610647578063d1c6098614610667578063d5933c2c1461068757600080fd5b8063b6b5290c116100fd578063b6b5290c1461055c578063bf217c4214610572578063bfe4771514610587578063c033a490146105a7578063c884ef83146105d757600080fd5b80639a2e27f8146104d9578063a43be57b146104ef578063a79fdbb414610504578063af157c1914610525578063b67847a11461054757600080fd5b8063418872a7116101d2578063777e0d8611610196578063777e0d86146104325780637e1c0c09146104475780637e3d1cf51461045d5780638afbf669146104775780638da5cb5b1461048c5780638fc6c04f146104c457600080fd5b8063418872a7146103d55780634636ea53146103dd578063467e53b1146103f357806348c54b9d14610408578063590e1ae31461041d57600080fd5b8063261b44d111610219578063261b44d11461030c5780632866ed211461032a5780632b2da7c8146103495780633cb5d100146103765780633edec08c146103b557600080fd5b806308003f7814610256578063092431d41461027f578063196e609d146102955780631d0d35f5146102b55780632108af09146102f5575b600080fd5b34801561026257600080fd5b5061026c60075481565b6040519081526020015b60405180910390f35b34801561028b57600080fd5b5061026c60085481565b3480156102a157600080fd5b5061026c6102b0366004611c9d565b61074c565b3480156102c157600080fd5b506102e56102d0366004611cb6565b60146020526000908152604090205460ff1681565b6040519015158152602001610276565b34801561030157600080fd5b5061030a61078d565b005b34801561031857600080fd5b5061026c610327366004611c9d565b90565b34801561033657600080fd5b50600e546102e590610100900460ff1681565b34801561035557600080fd5b5061026c610364366004611cb6565b60106020526000908152604090205481565b34801561038257600080fd5b50610396610391366004611c9d565b610918565b604080516001600160a01b039093168352602083019190915201610276565b3480156103c157600080fd5b5061030a6103d0366004611c9d565b610950565b61030a6109b6565b3480156103e957600080fd5b5061026c600b5481565b3480156103ff57600080fd5b5061030a610ca3565b34801561041457600080fd5b5061030a610d67565b34801561042957600080fd5b5061030a610fe0565b34801561043e57600080fd5b5061026c611221565b34801561045357600080fd5b5061026c60045481565b34801561046957600080fd5b50600e546102e59060ff1681565b34801561048357600080fd5b5061030a6112b8565b34801561049857600080fd5b506000546104ac906001600160a01b031681565b6040516001600160a01b039091168152602001610276565b3480156104d057600080fd5b5061030a6113ec565b3480156104e557600080fd5b5061026c600d5481565b3480156104fb57600080fd5b5061030a61147c565b34801561051057600080fd5b50600e546102e5906301000000900460ff1681565b34801561053157600080fd5b5061053a611564565b6040516102769190611cdf565b34801561055357600080fd5b5061026c6115d9565b34801561056857600080fd5b5061026c60055481565b34801561057e57600080fd5b5061030a61164b565b34801561059357600080fd5b506003546104ac906001600160a01b031681565b3480156105b357600080fd5b506102e56105c2366004611cb6565b60126020526000908152604090205460ff1681565b3480156105e357600080fd5b506102e56105f2366004611cb6565b60116020526000908152604090205460ff1681565b34801561061357600080fd5b5061030a610622366004611c9d565b611715565b34801561063357600080fd5b5061030a610642366004611d37565b611b26565b34801561065357600080fd5b506001546104ac906001600160a01b031681565b34801561067357600080fd5b5061030a610682366004611c9d565b611c3e565b34801561069357600080fd5b50600e546102e59062010000900460ff1681565b3480156106b357600080fd5b5061026c60065481565b3480156106c957600080fd5b5061026c600c5481565b3480156106df57600080fd5b5061026c600a5481565b3480156106f557600080fd5b5061026c610704366004611cb6565b600f6020526000908152604090205481565b34801561072257600080fd5b5061026c60095481565b34801561073857600080fd5b506002546104ac906001600160a01b031681565b600080610757611221565b905064e8d4a51000670de0b6b3a76400006107728386611da2565b61077c9190611dbf565b6107869190611dbf565b9392505050565b6000546001600160a01b031633146107c05760405162461bcd60e51b81526004016107b790611de1565b60405180910390fd5b600e5460ff166107e25760405162461bcd60e51b81526004016107b790611e0e565b47801561082457600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610822573d6000803e3d6000fd5b505b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611e3e565b905080156109145760025460005460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af11580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109129190611e57565b505b5050565b6013818154811061092857600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b6000546001600160a01b0316331461097a5760405162461bcd60e51b81526004016107b790611de1565b60098190556040518181527f0ce3f4f2fda3b433834fea4ce71ae05d18e838aa420137500dbf6bc82dcfcd11906020015b60405180910390a150565b600e5462010000900460ff16156109df5760405162461bcd60e51b81526004016107b790611e79565b600e546301000000900460ff1615610a2d5760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a5cc81c185d5cd959607a1b60448201526064016107b7565b600d54421115610a735760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b60448201526064016107b7565b60003411610ab95760405162461bcd60e51b815260206004820152601360248201527209aeae6e840c6dedce8e4d2c4eae8ca408aa89606b1b60448201526064016107b7565b6000610ac43461074c565b336000908152600f6020526040812080549293503492909190610ae8908490611eb0565b9250508190555080600b6000828254610b019190611eb0565b90915550503360009081526014602052604090205460ff16610bcf576040805180820182523380825260208083018581526013805460018082018355600092835295517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090600290920291820180546001600160a01b0319166001600160a01b0390921691909117905591517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a091909201919091559182526014905291909120805460ff19169091179055610c6b565b60005b601354811015610c6957336001600160a01b031660138281548110610bf957610bf9611ec3565b60009182526020909120600290910201546001600160a01b031603610c57578160138281548110610c2c57610c2c611ec3565b90600052602060002090600202016001016000828254610c4c9190611eb0565b90915550610c699050565b80610c6181611ed9565b915050610bd2565b505b60405181815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a250565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b81526004016107b790611de1565b600e5460ff1615610d2b5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f742063616e63656c2061207375636365737366756c2070726573616044820152616c6560f01b60648201526084016107b7565b600e805462ff00001916620100001790556040517fd2cd724ddf2a5df0530f823642f354d39f58719906bbecf0820f498c9c5a359f90600090a1565b600e5460ff16610d895760405162461bcd60e51b81526004016107b790611e0e565b600e54610100900460ff16610dd75760405162461bcd60e51b815260206004820152601460248201527310db185a5b5a5b99c81b9bdd08195b98589b195960621b60448201526064016107b7565b3360009081526011602052604090205460ff1615610e305760405162461bcd60e51b8152602060048201526016602482015275151bdad95b9cc8185b1c9958591e4818db185a5b595960521b60448201526064016107b7565b33600090815260106020908152604080832054600f909252822054610e549061074c565b610e5e9190611eb0565b905060008111610eb05760405162461bcd60e51b815260206004820152601a60248201527f4e6f20636f6e747269627574696f6e732066726f6d207573657200000000000060448201526064016107b7565b6000600b5482600954610ec39190611da2565b610ecd9190611dbf565b905060008111610f145760405162461bcd60e51b81526020600482015260126024820152714e6f20746f6b656e7320746f20636c61696d60701b60448201526064016107b7565b3360008181526011602052604090819020805460ff1916600190811790915554905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611e57565b5060405181815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430906020015b60405180910390a25050565b600e5462010000900460ff1680610ffa5750600a54600b54105b61103c5760405162461bcd60e51b81526020600482015260136024820152721499599d5b991cc81b9bdd08185b1b1bddd959606a1b60448201526064016107b7565b3360009081526012602052604090205460ff161561108f5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c99599d5b99195960821b60448201526064016107b7565b336000908152600f6020526040902054801561113657336000818152600f60205260408082208290555183156108fc0291849190818181858888f193505050501580156110e0573d6000803e3d6000fd5b503360008181526012602052604090819020805460ff19166001179055517fa171b6942063c6f2800ce40a780edce37baa2b618571b11eedd1e69e626e7d769061112d9084815260200190565b60405180910390a25b336000908152601060205260409020548015610914573360008181526010602052604080822091909155600254905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d49190611e57565b503360008181526012602052604090819020805460ff19166001179055517fa171b6942063c6f2800ce40a780edce37baa2b618571b11eedd1e69e626e7d7690610fd49084815260200190565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129b9190611f11565b505050915050806402540be4006112b29190611f61565b91505090565b6000546001600160a01b031633146112e25760405162461bcd60e51b81526004016107b790611de1565b600e5460ff166113045760405162461bcd60e51b81526004016107b790611e0e565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190611e3e565b60015460005460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303816000875af11580156113c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190611e57565b6000546001600160a01b031633146114165760405162461bcd60e51b81526004016107b790611de1565b600e805460ff6301000000808304821615810263ff0000001990931692909217928390556040517f66006354ac6a35f0f9b001e7cd8a73623bab487be4239f71fb1428656e7de6a6936114729390049091161515815260200190565b60405180910390a1565b6000546001600160a01b031633146114a65760405162461bcd60e51b81526004016107b790611de1565b600e5462010000900460ff16156114cf5760405162461bcd60e51b81526004016107b790611e79565b600a54600b54101561151a5760405162461bcd60e51b815260206004820152601460248201527314dbd99d0818d85c081b9bdd081c995858da195960621b60448201526064016107b7565b600e805460ff19166001179055600b546009546040517f2799ced422df976804d8cf4af408f16df0ceff348038afe3c2bf3cffb1b3870a9261147292908252602082015260400190565b60606013805480602002602001604051908101604052809291908181526020016000905b828210156115d0576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611588565b50505050905090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116469190611e3e565b905090565b6000546001600160a01b031633146116755760405162461bcd60e51b81526004016107b790611de1565b600e5460ff166116db5760405162461bcd60e51b815260206004820152602b60248201527f50726573616c65206d757374206265207375636365737366756c20746f20656e60448201526a61626c6520636c61696d7360a81b60648201526084016107b7565b600e805461ff0019166101001790556040517fca666f7745697e47f1359d151c9445641549379e821785dd1fa6c38f7f8bc3da90600090a1565b600e5462010000900460ff161561173e5760405162461bcd60e51b81526004016107b790611e79565b600e546301000000900460ff161561178c5760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a5cc81c185d5cd959607a1b60448201526064016107b7565b600d544211156117d25760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b60448201526064016107b7565b600081116118195760405162461bcd60e51b8152602060048201526014602482015273135d5cdd0818dbdb9d1c9a589d5d19481554d11560621b60448201526064016107b7565b600254604051636eb1769f60e11b81523360048201523060248201526000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190611e3e565b9050818110156118d75760405162461bcd60e51b81526020600482015260166024820152755553445420616c6c6f77616e636520746f6f206c6f7760501b60448201526064016107b7565b6002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561192e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119529190611e57565b503360009081526010602052604081208054849290611972908490611eb0565b90915550829050600b600082825461198a9190611eb0565b90915550503360009081526014602052604090205460ff16611a58576040805180820182523380825260208083018681526013805460018082018355600092835295517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090600290920291820180546001600160a01b0319166001600160a01b0390921691909117905591517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a091909201919091559182526014905291909120805460ff19169091179055611af4565b60005b601354811015611af257336001600160a01b031660138281548110611a8257611a82611ec3565b60009182526020909120600290910201546001600160a01b031603611ae0578260138281548110611ab557611ab5611ec3565b90600052602060002090600202016001016000828254611ad59190611eb0565b90915550611af29050565b80611aea81611ed9565b915050611a5b565b505b60405182815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc27190602001610fd4565b6000546001600160a01b03163314611b505760405162461bcd60e51b81526004016107b790611de1565b600588905560068790556007869055600d8590556008849055600c839055600a82905560098190556040805189815260208101899052908101879052606081018690526080810185905260a081018490527fb4e1fbeb0ffbfe92679bdf67bebeda0b781e7a37849484c69d99695f31e4b0299060c00160405180910390a16040518181527f0ce3f4f2fda3b433834fea4ce71ae05d18e838aa420137500dbf6bc82dcfcd119060200160405180910390a16040518281527f264eb5bd3e2eb7d471a5d3dfa3204728836a2086aa5b34d478e5694b69d52dfe9060200160405180910390a15050505050505050565b6000546001600160a01b03163314611c685760405162461bcd60e51b81526004016107b790611de1565b600b8190556040518181527f264eb5bd3e2eb7d471a5d3dfa3204728836a2086aa5b34d478e5694b69d52dfe906020016109ab565b600060208284031215611caf57600080fd5b5035919050565b600060208284031215611cc857600080fd5b81356001600160a01b038116811461078657600080fd5b602080825282518282018190526000919060409081850190868401855b82811015611d2a57815180516001600160a01b03168552860151868501529284019290850190600101611cfc565b5091979650505050505050565b600080600080600080600080610100898b031215611d5457600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611db957611db9611d8c565b92915050565b600082611ddc57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b602080825260169082015275141c995cd85b19481b9bdd081cdd58d8d95cdcd99d5b60521b604082015260600190565b600060208284031215611e5057600080fd5b5051919050565b600060208284031215611e6957600080fd5b8151801515811461078657600080fd5b6020808252601a908201527f50726573616c6520686173206265656e2063616e63656c6c6564000000000000604082015260600190565b80820180821115611db957611db9611d8c565b634e487b7160e01b600052603260045260246000fd5b600060018201611eeb57611eeb611d8c565b5060010190565b805169ffffffffffffffffffff81168114611f0c57600080fd5b919050565b600080600080600060a08688031215611f2957600080fd5b611f3286611ef2565b9450602086015193506040860151925060608601519150611f5560808701611ef2565b90509295509295909350565b80820260008212600160ff1b84141615611f7d57611f7d611d8c565b8181058314821517611db957611db9611d8c56fea2646970667358221220934a9a586d47771c983983730f5a700b6fee80a125616ff743e4e9e6da1c458264736f6c634300081300330000000000000000000000009467fffb7b5649d4a56fd1f3373bd07b8da3643f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000000000000000000000000000000000000773594000000000000000000000000000000000000000000000000000000000067f4523600000000000000000000000000000000000000000d92289838d21a9968000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80639a2e27f811610139578063c9fe0dff116100b6578063d78142aa1161007a578063d78142aa146106a7578063de81aaaa146106bd578063e621b149146106d3578063e730395a146106e9578063fb97956614610716578063ff920c741461072c57600080fd5b8063c9fe0dff14610607578063cbf14ab414610627578063cf3085f614610647578063d1c6098614610667578063d5933c2c1461068757600080fd5b8063b6b5290c116100fd578063b6b5290c1461055c578063bf217c4214610572578063bfe4771514610587578063c033a490146105a7578063c884ef83146105d757600080fd5b80639a2e27f8146104d9578063a43be57b146104ef578063a79fdbb414610504578063af157c1914610525578063b67847a11461054757600080fd5b8063418872a7116101d2578063777e0d8611610196578063777e0d86146104325780637e1c0c09146104475780637e3d1cf51461045d5780638afbf669146104775780638da5cb5b1461048c5780638fc6c04f146104c457600080fd5b8063418872a7146103d55780634636ea53146103dd578063467e53b1146103f357806348c54b9d14610408578063590e1ae31461041d57600080fd5b8063261b44d111610219578063261b44d11461030c5780632866ed211461032a5780632b2da7c8146103495780633cb5d100146103765780633edec08c146103b557600080fd5b806308003f7814610256578063092431d41461027f578063196e609d146102955780631d0d35f5146102b55780632108af09146102f5575b600080fd5b34801561026257600080fd5b5061026c60075481565b6040519081526020015b60405180910390f35b34801561028b57600080fd5b5061026c60085481565b3480156102a157600080fd5b5061026c6102b0366004611c9d565b61074c565b3480156102c157600080fd5b506102e56102d0366004611cb6565b60146020526000908152604090205460ff1681565b6040519015158152602001610276565b34801561030157600080fd5b5061030a61078d565b005b34801561031857600080fd5b5061026c610327366004611c9d565b90565b34801561033657600080fd5b50600e546102e590610100900460ff1681565b34801561035557600080fd5b5061026c610364366004611cb6565b60106020526000908152604090205481565b34801561038257600080fd5b50610396610391366004611c9d565b610918565b604080516001600160a01b039093168352602083019190915201610276565b3480156103c157600080fd5b5061030a6103d0366004611c9d565b610950565b61030a6109b6565b3480156103e957600080fd5b5061026c600b5481565b3480156103ff57600080fd5b5061030a610ca3565b34801561041457600080fd5b5061030a610d67565b34801561042957600080fd5b5061030a610fe0565b34801561043e57600080fd5b5061026c611221565b34801561045357600080fd5b5061026c60045481565b34801561046957600080fd5b50600e546102e59060ff1681565b34801561048357600080fd5b5061030a6112b8565b34801561049857600080fd5b506000546104ac906001600160a01b031681565b6040516001600160a01b039091168152602001610276565b3480156104d057600080fd5b5061030a6113ec565b3480156104e557600080fd5b5061026c600d5481565b3480156104fb57600080fd5b5061030a61147c565b34801561051057600080fd5b50600e546102e5906301000000900460ff1681565b34801561053157600080fd5b5061053a611564565b6040516102769190611cdf565b34801561055357600080fd5b5061026c6115d9565b34801561056857600080fd5b5061026c60055481565b34801561057e57600080fd5b5061030a61164b565b34801561059357600080fd5b506003546104ac906001600160a01b031681565b3480156105b357600080fd5b506102e56105c2366004611cb6565b60126020526000908152604090205460ff1681565b3480156105e357600080fd5b506102e56105f2366004611cb6565b60116020526000908152604090205460ff1681565b34801561061357600080fd5b5061030a610622366004611c9d565b611715565b34801561063357600080fd5b5061030a610642366004611d37565b611b26565b34801561065357600080fd5b506001546104ac906001600160a01b031681565b34801561067357600080fd5b5061030a610682366004611c9d565b611c3e565b34801561069357600080fd5b50600e546102e59062010000900460ff1681565b3480156106b357600080fd5b5061026c60065481565b3480156106c957600080fd5b5061026c600c5481565b3480156106df57600080fd5b5061026c600a5481565b3480156106f557600080fd5b5061026c610704366004611cb6565b600f6020526000908152604090205481565b34801561072257600080fd5b5061026c60095481565b34801561073857600080fd5b506002546104ac906001600160a01b031681565b600080610757611221565b905064e8d4a51000670de0b6b3a76400006107728386611da2565b61077c9190611dbf565b6107869190611dbf565b9392505050565b6000546001600160a01b031633146107c05760405162461bcd60e51b81526004016107b790611de1565b60405180910390fd5b600e5460ff166107e25760405162461bcd60e51b81526004016107b790611e0e565b47801561082457600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610822573d6000803e3d6000fd5b505b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611e3e565b905080156109145760025460005460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af11580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109129190611e57565b505b5050565b6013818154811061092857600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b6000546001600160a01b0316331461097a5760405162461bcd60e51b81526004016107b790611de1565b60098190556040518181527f0ce3f4f2fda3b433834fea4ce71ae05d18e838aa420137500dbf6bc82dcfcd11906020015b60405180910390a150565b600e5462010000900460ff16156109df5760405162461bcd60e51b81526004016107b790611e79565b600e546301000000900460ff1615610a2d5760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a5cc81c185d5cd959607a1b60448201526064016107b7565b600d54421115610a735760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b60448201526064016107b7565b60003411610ab95760405162461bcd60e51b815260206004820152601360248201527209aeae6e840c6dedce8e4d2c4eae8ca408aa89606b1b60448201526064016107b7565b6000610ac43461074c565b336000908152600f6020526040812080549293503492909190610ae8908490611eb0565b9250508190555080600b6000828254610b019190611eb0565b90915550503360009081526014602052604090205460ff16610bcf576040805180820182523380825260208083018581526013805460018082018355600092835295517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090600290920291820180546001600160a01b0319166001600160a01b0390921691909117905591517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a091909201919091559182526014905291909120805460ff19169091179055610c6b565b60005b601354811015610c6957336001600160a01b031660138281548110610bf957610bf9611ec3565b60009182526020909120600290910201546001600160a01b031603610c57578160138281548110610c2c57610c2c611ec3565b90600052602060002090600202016001016000828254610c4c9190611eb0565b90915550610c699050565b80610c6181611ed9565b915050610bd2565b505b60405181815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a250565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b81526004016107b790611de1565b600e5460ff1615610d2b5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f742063616e63656c2061207375636365737366756c2070726573616044820152616c6560f01b60648201526084016107b7565b600e805462ff00001916620100001790556040517fd2cd724ddf2a5df0530f823642f354d39f58719906bbecf0820f498c9c5a359f90600090a1565b600e5460ff16610d895760405162461bcd60e51b81526004016107b790611e0e565b600e54610100900460ff16610dd75760405162461bcd60e51b815260206004820152601460248201527310db185a5b5a5b99c81b9bdd08195b98589b195960621b60448201526064016107b7565b3360009081526011602052604090205460ff1615610e305760405162461bcd60e51b8152602060048201526016602482015275151bdad95b9cc8185b1c9958591e4818db185a5b595960521b60448201526064016107b7565b33600090815260106020908152604080832054600f909252822054610e549061074c565b610e5e9190611eb0565b905060008111610eb05760405162461bcd60e51b815260206004820152601a60248201527f4e6f20636f6e747269627574696f6e732066726f6d207573657200000000000060448201526064016107b7565b6000600b5482600954610ec39190611da2565b610ecd9190611dbf565b905060008111610f145760405162461bcd60e51b81526020600482015260126024820152714e6f20746f6b656e7320746f20636c61696d60701b60448201526064016107b7565b3360008181526011602052604090819020805460ff1916600190811790915554905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611e57565b5060405181815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430906020015b60405180910390a25050565b600e5462010000900460ff1680610ffa5750600a54600b54105b61103c5760405162461bcd60e51b81526020600482015260136024820152721499599d5b991cc81b9bdd08185b1b1bddd959606a1b60448201526064016107b7565b3360009081526012602052604090205460ff161561108f5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c99599d5b99195960821b60448201526064016107b7565b336000908152600f6020526040902054801561113657336000818152600f60205260408082208290555183156108fc0291849190818181858888f193505050501580156110e0573d6000803e3d6000fd5b503360008181526012602052604090819020805460ff19166001179055517fa171b6942063c6f2800ce40a780edce37baa2b618571b11eedd1e69e626e7d769061112d9084815260200190565b60405180910390a25b336000908152601060205260409020548015610914573360008181526010602052604080822091909155600254905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d49190611e57565b503360008181526012602052604090819020805460ff19166001179055517fa171b6942063c6f2800ce40a780edce37baa2b618571b11eedd1e69e626e7d7690610fd49084815260200190565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129b9190611f11565b505050915050806402540be4006112b29190611f61565b91505090565b6000546001600160a01b031633146112e25760405162461bcd60e51b81526004016107b790611de1565b600e5460ff166113045760405162461bcd60e51b81526004016107b790611e0e565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190611e3e565b60015460005460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303816000875af11580156113c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190611e57565b6000546001600160a01b031633146114165760405162461bcd60e51b81526004016107b790611de1565b600e805460ff6301000000808304821615810263ff0000001990931692909217928390556040517f66006354ac6a35f0f9b001e7cd8a73623bab487be4239f71fb1428656e7de6a6936114729390049091161515815260200190565b60405180910390a1565b6000546001600160a01b031633146114a65760405162461bcd60e51b81526004016107b790611de1565b600e5462010000900460ff16156114cf5760405162461bcd60e51b81526004016107b790611e79565b600a54600b54101561151a5760405162461bcd60e51b815260206004820152601460248201527314dbd99d0818d85c081b9bdd081c995858da195960621b60448201526064016107b7565b600e805460ff19166001179055600b546009546040517f2799ced422df976804d8cf4af408f16df0ceff348038afe3c2bf3cffb1b3870a9261147292908252602082015260400190565b60606013805480602002602001604051908101604052809291908181526020016000905b828210156115d0576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611588565b50505050905090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116469190611e3e565b905090565b6000546001600160a01b031633146116755760405162461bcd60e51b81526004016107b790611de1565b600e5460ff166116db5760405162461bcd60e51b815260206004820152602b60248201527f50726573616c65206d757374206265207375636365737366756c20746f20656e60448201526a61626c6520636c61696d7360a81b60648201526084016107b7565b600e805461ff0019166101001790556040517fca666f7745697e47f1359d151c9445641549379e821785dd1fa6c38f7f8bc3da90600090a1565b600e5462010000900460ff161561173e5760405162461bcd60e51b81526004016107b790611e79565b600e546301000000900460ff161561178c5760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a5cc81c185d5cd959607a1b60448201526064016107b7565b600d544211156117d25760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b60448201526064016107b7565b600081116118195760405162461bcd60e51b8152602060048201526014602482015273135d5cdd0818dbdb9d1c9a589d5d19481554d11560621b60448201526064016107b7565b600254604051636eb1769f60e11b81523360048201523060248201526000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190611e3e565b9050818110156118d75760405162461bcd60e51b81526020600482015260166024820152755553445420616c6c6f77616e636520746f6f206c6f7760501b60448201526064016107b7565b6002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561192e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119529190611e57565b503360009081526010602052604081208054849290611972908490611eb0565b90915550829050600b600082825461198a9190611eb0565b90915550503360009081526014602052604090205460ff16611a58576040805180820182523380825260208083018681526013805460018082018355600092835295517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090600290920291820180546001600160a01b0319166001600160a01b0390921691909117905591517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a091909201919091559182526014905291909120805460ff19169091179055611af4565b60005b601354811015611af257336001600160a01b031660138281548110611a8257611a82611ec3565b60009182526020909120600290910201546001600160a01b031603611ae0578260138281548110611ab557611ab5611ec3565b90600052602060002090600202016001016000828254611ad59190611eb0565b90915550611af29050565b80611aea81611ed9565b915050611a5b565b505b60405182815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc27190602001610fd4565b6000546001600160a01b03163314611b505760405162461bcd60e51b81526004016107b790611de1565b600588905560068790556007869055600d8590556008849055600c839055600a82905560098190556040805189815260208101899052908101879052606081018690526080810185905260a081018490527fb4e1fbeb0ffbfe92679bdf67bebeda0b781e7a37849484c69d99695f31e4b0299060c00160405180910390a16040518181527f0ce3f4f2fda3b433834fea4ce71ae05d18e838aa420137500dbf6bc82dcfcd119060200160405180910390a16040518281527f264eb5bd3e2eb7d471a5d3dfa3204728836a2086aa5b34d478e5694b69d52dfe9060200160405180910390a15050505050505050565b6000546001600160a01b03163314611c685760405162461bcd60e51b81526004016107b790611de1565b600b8190556040518181527f264eb5bd3e2eb7d471a5d3dfa3204728836a2086aa5b34d478e5694b69d52dfe906020016109ab565b600060208284031215611caf57600080fd5b5035919050565b600060208284031215611cc857600080fd5b81356001600160a01b038116811461078657600080fd5b602080825282518282018190526000919060409081850190868401855b82811015611d2a57815180516001600160a01b03168552860151868501529284019290850190600101611cfc565b5091979650505050505050565b600080600080600080600080610100898b031215611d5457600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611db957611db9611d8c565b92915050565b600082611ddc57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b602080825260169082015275141c995cd85b19481b9bdd081cdd58d8d95cdcd99d5b60521b604082015260600190565b600060208284031215611e5057600080fd5b5051919050565b600060208284031215611e6957600080fd5b8151801515811461078657600080fd5b6020808252601a908201527f50726573616c6520686173206265656e2063616e63656c6c6564000000000000604082015260600190565b80820180821115611db957611db9611d8c565b634e487b7160e01b600052603260045260246000fd5b600060018201611eeb57611eeb611d8c565b5060010190565b805169ffffffffffffffffffff81168114611f0c57600080fd5b919050565b600080600080600060a08688031215611f2957600080fd5b611f3286611ef2565b9450602086015193506040860151925060608601519150611f5560808701611ef2565b90509295509295909350565b80820260008212600160ff1b84141615611f7d57611f7d611d8c565b8181058314821517611db957611db9611d8c56fea2646970667358221220934a9a586d47771c983983730f5a700b6fee80a125616ff743e4e9e6da1c458264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009467fffb7b5649d4a56fd1f3373bd07b8da3643f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000000000000000000000000000000000000773594000000000000000000000000000000000000000000000000000000000067f4523600000000000000000000000000000000000000000d92289838d21a9968000000
-----Decoded View---------------
Arg [0] : _presaleTokenAddress (address): 0x9467fFFb7b5649D4a56fd1F3373bd07B8dA3643f
Arg [1] : _totalTokensOfferedPresale (uint256): 1000000000000000000000000000
Arg [2] : _softCapUSD (uint256): 2000000000
Arg [3] : _presaleEndDate (uint256): 1744065078
Arg [4] : _totalTokens (uint256): 4200000000000000000000000000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000009467fffb7b5649d4a56fd1f3373bd07b8da3643f
Arg [1] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000077359400
Arg [3] : 0000000000000000000000000000000000000000000000000000000067f45236
Arg [4] : 00000000000000000000000000000000000000000d92289838d21a9968000000
Deployed Bytecode Sourcemap
24002:11747:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24300:25;;;;;;;;;;;;;;;;;;;160::1;;;148:2;133:18;24300:25:0;;;;;;;;24332:33;;;;;;;;;;;;;;;;35030:216;;;;;;;;;;-1:-1:-1;35030:216:0;;;;;:::i;:::-;;:::i;25058:45::-;;;;;;;;;;-1:-1:-1;25058:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;837:14:1;;830:22;812:41;;800:2;785:18;25058:45:0;672:187:1;34184:503:0;;;;;;;;;;;;;:::i;:::-;;35294:105;;;;;;;;;;-1:-1:-1;35294:105:0;;;;;:::i;:::-;35381:10;35294:105;24597:24;;;;;;;;;;-1:-1:-1;24597:24:0;;;;;;;;;;;24866:52;;;;;;;;;;-1:-1:-1;24866:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;25018:33;;;;;;;;;;-1:-1:-1;25018:33:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1056:32:1;;;1038:51;;1120:2;1105:18;;1098:34;;;;1011:18;25018:33:0;864:274:1;28594:251:0;;;;;;;;;;-1:-1:-1;28594:251:0;;;;;:::i;:::-;;:::i;29143:864::-;;;:::i;24451:33::-;;;;;;;;;;;;;;;;33404:196;;;;;;;;;;;;;:::i;31690:756::-;;;;;;;;;;;;;:::i;32513:856::-;;;;;;;;;;;;;:::i;34744:222::-;;;;;;;;;;;;;:::i;24186:26::-;;;;;;;;;;;;;;;;24561:29;;;;;;;;;;-1:-1:-1;24561:29:0;;;;;;;;33845:285;;;;;;;;;;;;;:::i;24040:20::-;;;;;;;;;;-1:-1:-1;24040:20:0;;;;-1:-1:-1;;;;;24040:20:0;;;;;;-1:-1:-1;;;;;1307:32:1;;;1289:51;;1277:2;1262:18;24040:20:0;1143:203:1;33643:142:0;;;;;;;;;;;;;:::i;24523:29::-;;;;;;;;;;;;;;;;31145:260;;;;;;;;;;;;;:::i;24663:25::-;;;;;;;;;;-1:-1:-1;24663:25:0;;;;;;;;;;;35636:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35449:142::-;;;;;;;;;;;;;:::i;24219:30::-;;;;;;;;;;;;;;;;31443:200;;;;;;;;;;;;;:::i;24141:36::-;;;;;;;;;;-1:-1:-1;24141:36:0;;;;-1:-1:-1;;;;;24141:36:0;;;24971:40;;;;;;;;;;-1:-1:-1;24971:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24925:39;;;;;;;;;;-1:-1:-1;24925:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30044:1042;;;;;;;;;;-1:-1:-1;30044:1042:0;;;;;:::i;:::-;;:::i;27438:1098::-;;;;;;;;;;-1:-1:-1;27438:1098:0;;;;;:::i;:::-;;:::i;24067:34::-;;;;;;;;;;-1:-1:-1;24067:34:0;;;;-1:-1:-1;;;;;24067:34:0;;;28898:209;;;;;;;;;;-1:-1:-1;28898:209:0;;;;;:::i;:::-;;:::i;24628:28::-;;;;;;;;;;-1:-1:-1;24628:28:0;;;;;;;;;;;24256:37;;;;;;;;;;;;;;;;24491:25;;;;;;;;;;;;;;;;24419;;;;;;;;;;;;;;;;24808:51;;;;;;;;;;-1:-1:-1;24808:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;24372:40;;;;;;;;;;;;;;;;24108:26;;;;;;;;;;-1:-1:-1;24108:26:0;;;;-1:-1:-1;;;;;24108:26:0;;;35030:216;35088:7;35108:21;35132:19;:17;:19::i;:::-;35108:43;-1:-1:-1;35209:4:0;35199:7;35170:25;35108:43;35170:9;:25;:::i;:::-;35169:37;;;;:::i;:::-;:44;;;;:::i;:::-;35162:51;35030:216;-1:-1:-1;;;35030:216:0:o;34184:503::-;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;;;;;;;;;34255:17:::1;::::0;::::1;;34247:52;;;;-1:-1:-1::0;;;34247:52:0::1;;;;;;;:::i;:::-;34341:21;34377:22:::0;;34373:98:::1;;34424:5;::::0;;34416:43:::1;::::0;-1:-1:-1;;;;;34424:5:0;;::::1;::::0;34416:43;::::1;;;::::0;34440:18;;34416:43;34424:5;34416:43;34440:18;34424:5;34416:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34373:98;34520:11;::::0;34513:44:::1;::::0;-1:-1:-1;;;34513:44:0;;34551:4:::1;34513:44;::::0;::::1;1289:51:1::0;34483:27:0::1;::::0;-1:-1:-1;;;;;34520:11:0::1;::::0;34513:29:::1;::::0;1262:18:1;;34513:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34483:74:::0;-1:-1:-1;34572:23:0;;34568:112:::1;;34619:11;::::0;::::1;34641:5:::0;34612:56:::1;::::0;-1:-1:-1;;;34612:56:0;;-1:-1:-1;;;;;34641:5:0;;::::1;34612:56;::::0;::::1;1038:51:1::0;1105:18;;;1098:34;;;34619:11:0;::::1;::::0;34612:28:::1;::::0;1011:18:1;;34612:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34568:112;34236:451;;34184:503::o:0;25018:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25018:33:0;;;;-1:-1:-1;25018:33:0;:::o;28594:251::-;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;28703:25:::1;:56:::0;;;28775:62:::1;::::0;160:25:1;;;28775:62:0::1;::::0;148:2:1;133:18;28775:62:0::1;;;;;;;;28594:251:::0;:::o;29143:864::-;26140:16;;;;;;;26139:17;26131:56;;;;-1:-1:-1;;;26131:56:0;;;;;;;:::i;:::-;26263:13:::1;::::0;;;::::1;;;26262:14;26254:44;;;::::0;-1:-1:-1;;;26254:44:0;;5096:2:1;26254:44:0::1;::::0;::::1;5078:21:1::0;5135:2;5115:18;;;5108:30;-1:-1:-1;;;5154:18:1;;;5147:47;5211:18;;26254:44:0::1;4894:341:1::0;26254:44:0::1;26391:14:::2;;26372:15;:33;;26364:63;;;::::0;-1:-1:-1;;;26364:63:0;;5442:2:1;26364:63:0::2;::::0;::::2;5424:21:1::0;5481:2;5461:18;;;5454:30;-1:-1:-1;;;5500:18:1;;;5493:47;5557:18;;26364:63:0::2;5240:341:1::0;26364:63:0::2;29273:1:::3;29261:9;:13;29253:45;;;::::0;-1:-1:-1;;;29253:45:0;;5788:2:1;29253:45:0::3;::::0;::::3;5770:21:1::0;5827:2;5807:18;;;5800:30;-1:-1:-1;;;5846:18:1;;;5839:49;5905:18;;29253:45:0::3;5586:343:1::0;29253:45:0::3;29309:25;29337:19;29346:9;29337:8;:19::i;:::-;29384:10;29367:28;::::0;;;:16:::3;:28;::::0;;;;:41;;29309:47;;-1:-1:-1;29399:9:0::3;::::0;29367:28;;;:41:::3;::::0;29399:9;;29367:41:::3;:::i;:::-;;;;;;;;29441:17;29419:18;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;29490:10:0::3;29476:25;::::0;;;:13:::3;:25;::::0;;;;;::::3;;29471:465;;29536:42;::::0;;;;::::3;::::0;;29548:10:::3;29536:42:::0;;;::::3;::::0;;::::3;::::0;;;29518:12:::3;:61:::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;29518:61:0;;;;;;::::3;::::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;;;;;;29518:61:0::3;-1:-1:-1::0;;;;;29518:61:0;;::::3;::::0;;;::::3;::::0;;;;;;;;;;;;29594:25;;;:13:::3;:25:::0;;;;;;:32;;-1:-1:-1;;29594:32:0::3;::::0;;::::3;::::0;;29471:465:::3;;;29664:9;29659:266;29683:12;:19:::0;29679:23;::::3;29659:266;;;29770:10;-1:-1:-1::0;;;;;29732:48:0::3;:12;29745:1;29732:15;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;;::::3;;:34:::0;-1:-1:-1;;;;;29732:34:0::3;:48:::0;29728:182:::3;;29845:17;29805:12;29818:1;29805:15;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;;:57;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;29885:5:0::3;::::0;-1:-1:-1;29885:5:0::3;29728:182;29704:3:::0;::::3;::::0;::::3;:::i;:::-;;;;29659:266;;;;29471:465;29953:46;::::0;160:25:1;;;29969:10:0::3;::::0;29953:46:::3;::::0;148:2:1;133:18;29953:46:0::3;;;;;;;29242:765;29143:864::o:0;33404:196::-;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;33468:17:::1;::::0;::::1;;33467:18;33459:65;;;::::0;-1:-1:-1;;;33459:65:0;;6538:2:1;33459:65:0::1;::::0;::::1;6520:21:1::0;6577:2;6557:18;;;6550:30;6616:34;6596:18;;;6589:62;-1:-1:-1;;;6667:18:1;;;6660:32;6709:19;;33459:65:0::1;6336:398:1::0;33459:65:0::1;33535:16;:23:::0;;-1:-1:-1;;33535:23:0::1;::::0;::::1;::::0;;33574:18:::1;::::0;::::1;::::0;33535:23;;33574:18:::1;33404:196::o:0;31690:756::-;31741:17;;;;31733:52;;;;-1:-1:-1;;;31733:52:0;;;;;;;:::i;:::-;31804:12;;;;;;;31796:45;;;;-1:-1:-1;;;31796:45:0;;6941:2:1;31796:45:0;;;6923:21:1;6980:2;6960:18;;;6953:30;-1:-1:-1;;;6999:18:1;;;6992:50;7059:18;;31796:45:0;6739:344:1;31796:45:0;31869:10;31861:19;;;;:7;:19;;;;;;;;31860:20;31852:55;;;;-1:-1:-1;;;31852:55:0;;7290:2:1;31852:55:0;;;7272:21:1;7329:2;7309:18;;;7302:30;-1:-1:-1;;;7348:18:1;;;7341:52;7410:18;;31852:55:0;7088:346:1;31852:55:0;32009:10;31920:27;31991:29;;;:17;:29;;;;;;;;;31959:16;:28;;;;;;31950:38;;:8;:38::i;:::-;:70;;;;:::i;:::-;31920:100;;32061:1;32039:19;:23;32031:62;;;;-1:-1:-1;;;32031:62:0;;7641:2:1;32031:62:0;;;7623:21:1;7680:2;7660:18;;;7653:30;7719:28;7699:18;;;7692:56;7765:18;;32031:62:0;7439:350:1;32031:62:0;32106:23;32184:18;;32161:19;32133:25;;:47;;;;:::i;:::-;32132:70;;;;:::i;:::-;32106:96;;32239:1;32221:15;:19;32213:50;;;;-1:-1:-1;;;32213:50:0;;7996:2:1;32213:50:0;;;7978:21:1;8035:2;8015:18;;;8008:30;-1:-1:-1;;;8054:18:1;;;8047:48;8112:18;;32213:50:0;7794:342:1;32213:50:0;32284:10;32276:19;;;;:7;:19;;;;;;;:26;;-1:-1:-1;;32276:26:0;32298:4;32276:26;;;;;;32320:19;32313:65;;-1:-1:-1;;;32313:65:0;;;;;1038:51:1;;;;1105:18;;;1098:34;;;-1:-1:-1;;;;;32320:19:0;;32313:36;;1011:18:1;;32313:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32396:42:0;;160:25:1;;;32410:10:0;;32396:42;;148:2:1;133:18;32396:42:0;;;;;;;;31722:724;;31690:756::o;32513:856::-;32559:16;;;;;;;;:51;;;32600:10;;32579:18;;:31;32559:51;32551:83;;;;-1:-1:-1;;;32551:83:0;;8343:2:1;32551:83:0;;;8325:21:1;8382:2;8362:18;;;8355:30;-1:-1:-1;;;8401:18:1;;;8394:49;8460:18;;32551:83:0;8141:343:1;32551:83:0;32663:10;32654:20;;;;:8;:20;;;;;;;;32653:21;32645:50;;;;-1:-1:-1;;;32645:50:0;;8691:2:1;32645:50:0;;;8673:21:1;8730:2;8710:18;;;8703:30;-1:-1:-1;;;8749:18:1;;;8742:46;8805:18;;32645:50:0;8489:340:1;32645:50:0;32751:10;32708:23;32734:28;;;:16;:28;;;;;;32777:19;;32773:247;;32830:10;32844:1;32813:28;;;:16;:28;;;;;;:32;;;32860:45;;;;;;32889:15;;32860:45;;32844:1;32860:45;32889:15;32830:10;32860:45;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32929:10:0;32920:20;;;;:8;:20;;;;;;;:27;;-1:-1:-1;;32920:27:0;32943:4;32920:27;;;32967:41;;;;;32992:15;160:25:1;;148:2;133:18;;14:177;32967:41:0;;;;;;;;32773:247;33077:10;33032:24;33059:29;;;:17;:29;;;;;;33103:20;;33099:263;;33158:10;33172:1;33140:29;;;:17;:29;;;;;;:33;;;;33195:11;;33188:58;;-1:-1:-1;;;33188:58:0;;;;;1038:51:1;;;;1105:18;;;1098:34;;;-1:-1:-1;;;;;33195:11:0;;33188:28;;1011:18:1;;33188:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;33270:10:0;33261:20;;;;:8;:20;;;;;;;:27;;-1:-1:-1;;33261:27:0;33284:4;33261:27;;;33308:42;;;;;33333:16;160:25:1;;148:2;133:18;;14:177;34744:222:0;34794:7;34817:12;34849:21;;;;;;;;;-1:-1:-1;;;;;34849:21:0;-1:-1:-1;;;;;34838:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34814:75;;;;;;34915:5;34923:8;34915:16;;;;:::i;:::-;34900:32;;;34744:222;:::o;33845:285::-;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;33918:17:::1;::::0;::::1;;33910:52;;;;-1:-1:-1::0;;;33910:52:0::1;;;;;;;:::i;:::-;34006:19;::::0;33999:52:::1;::::0;-1:-1:-1;;;33999:52:0;;34045:4:::1;33999:52;::::0;::::1;1289:51:1::0;33973:23:0::1;::::0;-1:-1:-1;;;;;34006:19:0::1;::::0;33999:37:::1;::::0;1262:18:1;;33999:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34069:19;::::0;::::1;34099:5:::0;34062:60:::1;::::0;-1:-1:-1;;;34062:60:0;;-1:-1:-1;;;;;34099:5:0;;::::1;34062:60;::::0;::::1;1038:51:1::0;1105:18;;;1098:34;;;33973:78:0;;-1:-1:-1;34069:19:0::1;::::0;34062:36:::1;::::0;1011:18:1;;34062:60:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33643:142::-:0;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;33720:13:::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;33719:14;33703:30:::0;::::1;-1:-1:-1::0;;33703:30:0;;::::1;::::0;;;::::1;::::0;;;;33749:28:::1;::::0;::::1;::::0;::::1;::::0;33763:13;::::1;::::0;;::::1;837:14:1::0;830:22;812:41;;800:2;785:18;;672:187;33749:28:0::1;;;;;;;;33643:142::o:0;31145:260::-;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;26140:16:::1;::::0;;;::::1;;;26139:17;26131:56;;;;-1:-1:-1::0;;;26131:56:0::1;;;;;;;:::i;:::-;31247:10:::2;;31225:18;;:32;;31217:65;;;::::0;-1:-1:-1;;;31217:65:0;;9940:2:1;31217:65:0::2;::::0;::::2;9922:21:1::0;9979:2;9959:18;;;9952:30;-1:-1:-1;;;9998:18:1;;;9991:50;10058:18;;31217:65:0::2;9738:344:1::0;31217:65:0::2;31293:17;:24:::0;;-1:-1:-1;;31293:24:0::2;31313:4;31293:24;::::0;;31351:18:::2;::::0;31371:25:::2;::::0;31333:64:::2;::::0;::::2;::::0;::::2;::::0;31351:18;10261:25:1;;10317:2;10302:18;;10295:34;10249:2;10234:18;;10087:248;35636:110:0;35686:20;35726:12;35719:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35719:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35636:110;:::o;35449:142::-;35538:19;;35531:52;;-1:-1:-1;;;35531:52:0;;35577:4;35531:52;;;1289:51:1;35504:7:0;;-1:-1:-1;;;;;35538:19:0;;35531:37;;1262:18:1;;35531:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35524:59;;35449:142;:::o;31443:200::-;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;31510:17:::1;::::0;::::1;;31502:73;;;::::0;-1:-1:-1;;;31502:73:0;;10542:2:1;31502:73:0::1;::::0;::::1;10524:21:1::0;10581:2;10561:18;;;10554:30;10620:34;10600:18;;;10593:62;-1:-1:-1;;;10671:18:1;;;10664:41;10722:19;;31502:73:0::1;10340:407:1::0;31502:73:0::1;31586:12;:19:::0;;-1:-1:-1;;31586:19:0::1;;;::::0;;31621:14:::1;::::0;::::1;::::0;31586:19;;31621:14:::1;31443:200::o:0;30044:1042::-;26140:16;;;;;;;26139:17;26131:56;;;;-1:-1:-1;;;26131:56:0;;;;;;;:::i;:::-;26263:13:::1;::::0;;;::::1;;;26262:14;26254:44;;;::::0;-1:-1:-1;;;26254:44:0;;5096:2:1;26254:44:0::1;::::0;::::1;5078:21:1::0;5135:2;5115:18;;;5108:30;-1:-1:-1;;;5154:18:1;;;5147:47;5211:18;;26254:44:0::1;4894:341:1::0;26254:44:0::1;26391:14:::2;;26372:15;:33;;26364:63;;;::::0;-1:-1:-1;;;26364:63:0;;5442:2:1;26364:63:0::2;::::0;::::2;5424:21:1::0;5481:2;5461:18;;;5454:30;-1:-1:-1;;;5500:18:1;;;5493:47;5557:18;;26364:63:0::2;5240:341:1::0;26364:63:0::2;30186:1:::3;30173:10;:14;30165:47;;;::::0;-1:-1:-1;;;30165:47:0;;10954:2:1;30165:47:0::3;::::0;::::3;10936:21:1::0;10993:2;10973:18;;;10966:30;-1:-1:-1;;;11012:18:1;;;11005:50;11072:18;;30165:47:0::3;10752:344:1::0;30165:47:0::3;30250:11;::::0;30243:56:::3;::::0;-1:-1:-1;;;30243:56:0;;30273:10:::3;30243:56;::::0;::::3;11313:34:1::0;30293:4:0::3;11363:18:1::0;;;11356:43;30223:17:0::3;::::0;-1:-1:-1;;;;;30250:11:0::3;::::0;30243:29:::3;::::0;11248:18:1;;30243:56:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30223:76;;30331:10;30318:9;:23;;30310:58;;;::::0;-1:-1:-1;;;30310:58:0;;11612:2:1;30310:58:0::3;::::0;::::3;11594:21:1::0;11651:2;11631:18;;;11624:30;-1:-1:-1;;;11670:18:1;;;11663:52;11732:18;;30310:58:0::3;11410:346:1::0;30310:58:0::3;30386:11;::::0;30379:71:::3;::::0;-1:-1:-1;;;30379:71:0;;30412:10:::3;30379:71;::::0;::::3;12001:34:1::0;30432:4:0::3;12051:18:1::0;;;12044:43;12103:18;;;12096:34;;;-1:-1:-1;;;;;30386:11:0;;::::3;::::0;30379:32:::3;::::0;11936:18:1;;30379:71:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30479:10:0::3;30461:29;::::0;;;:17:::3;:29;::::0;;;;:43;;30494:10;;30461:29;:43:::3;::::0;30494:10;;30461:43:::3;:::i;:::-;::::0;;;-1:-1:-1;30547:10:0;;-1:-1:-1;30515:18:0::3;;:43;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30590:10:0::3;30576:25;::::0;;;:13:::3;:25;::::0;;;;;::::3;;30571:451;;30636:35;::::0;;;;::::3;::::0;;30648:10:::3;30636:35:::0;;;::::3;::::0;;::::3;::::0;;;30618:12:::3;:54:::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;30618:54:0;;;;;;::::3;::::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;;;;;;30618:54:0::3;-1:-1:-1::0;;;;;30618:54:0;;::::3;::::0;;;::::3;::::0;;;;;;;;;;;;30687:25;;;:13:::3;:25:::0;;;;;;:32;;-1:-1:-1;;30687:32:0::3;::::0;;::::3;::::0;;30571:451:::3;;;30757:9;30752:259;30776:12;:19:::0;30772:23;::::3;30752:259;;;30863:10;-1:-1:-1::0;;;;;30825:48:0::3;:12;30838:1;30825:15;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;;::::3;;:34:::0;-1:-1:-1;;;;;30825:34:0::3;:48:::0;30821:175:::3;;30938:10;30898:12;30911:1;30898:15;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;;:50;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;30971:5:0::3;::::0;-1:-1:-1;30971:5:0::3;30821:175;30797:3:::0;::::3;::::0;::::3;:::i;:::-;;;;30752:259;;;;30571:451;31039:39;::::0;160:25:1;;;31055:10:0::3;::::0;31039:39:::3;::::0;148:2:1;133:18;31039:39:0::3;14:177:1::0;27438:1098:0;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;27761:15:::1;:36:::0;;;27804:22:::1;:50:::0;;;27861:10:::1;:26:::0;;;27894:14:::1;:34:::0;;;27935:18:::1;:42:::0;;;27984:10:::1;:26:::0;;;28017:10:::1;:26:::0;;;28050:25:::1;:56:::0;;;28120:197:::1;::::0;;12428:25:1;;;12484:2;12469:18;;12462:34;;;12512:18;;;12505:34;;;12570:2;12555:18;;12548:34;;;12613:3;12598:19;;12591:35;;;12657:3;12642:19;;12635:35;;;28120:197:0::1;::::0;12415:3:1;12400:19;28120:197:0::1;;;;;;;28418:62;::::0;160:25:1;;;28418:62:0::1;::::0;148:2:1;133:18;28418:62:0::1;;;;;;;28492:40;::::0;160:25:1;;;28492:40:0::1;::::0;148:2:1;133:18;28492:40:0::1;;;;;;;27438:1098:::0;;;;;;;;:::o;28898:209::-;26032:5;;-1:-1:-1;;;;;26032:5:0;26018:10;:19;26010:51;;;;-1:-1:-1;;;26010:51:0;;;;;;;:::i;:::-;28993:18:::1;:42:::0;;;29051:48:::1;::::0;160:25:1;;;29051:48:0::1;::::0;148:2:1;133:18;29051:48:0::1;14:177:1::0;196:180;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:286::-;440:6;493:2;481:9;472:7;468:23;464:32;461:52;;;509:1;506;499:12;461:52;535:23;;-1:-1:-1;;;;;587:31:1;;577:42;;567:70;;633:1;630;623:12;1351:820;1578:2;1630:21;;;1700:13;;1603:18;;;1722:22;;;1549:4;;1578:2;1763;;1781:18;;;;1822:15;;;1549:4;1865:280;1879:6;1876:1;1873:13;1865:280;;;1938:13;;1980:9;;-1:-1:-1;;;;;1976:35:1;1964:48;;2052:11;;2046:18;2032:12;;;2025:40;2085:12;;;;2120:15;;;;2008:1;1894:9;1865:280;;;-1:-1:-1;2162:3:1;;1351:820;-1:-1:-1;;;;;;;1351:820:1:o;2176:661::-;2298:6;2306;2314;2322;2330;2338;2346;2354;2407:3;2395:9;2386:7;2382:23;2378:33;2375:53;;;2424:1;2421;2414:12;2375:53;-1:-1:-1;;2447:23:1;;;2517:2;2502:18;;2489:32;;-1:-1:-1;2568:2:1;2553:18;;2540:32;;2619:2;2604:18;;2591:32;;-1:-1:-1;2670:3:1;2655:19;;2642:33;;-1:-1:-1;2722:3:1;2707:19;;2694:33;;-1:-1:-1;2774:3:1;2759:19;;2746:33;;-1:-1:-1;2826:3:1;2811:19;2798:33;;-1:-1:-1;2176:661:1;-1:-1:-1;2176:661:1:o;2842:127::-;2903:10;2898:3;2894:20;2891:1;2884:31;2934:4;2931:1;2924:15;2958:4;2955:1;2948:15;2974:168;3047:9;;;3078;;3095:15;;;3089:22;;3075:37;3065:71;;3116:18;;:::i;:::-;2974:168;;;;:::o;3147:217::-;3187:1;3213;3203:132;;3257:10;3252:3;3248:20;3245:1;3238:31;3292:4;3289:1;3282:15;3320:4;3317:1;3310:15;3203:132;-1:-1:-1;3349:9:1;;3147:217::o;3369:343::-;3571:2;3553:21;;;3610:2;3590:18;;;3583:30;-1:-1:-1;;;3644:2:1;3629:18;;3622:49;3703:2;3688:18;;3369:343::o;3717:346::-;3919:2;3901:21;;;3958:2;3938:18;;;3931:30;-1:-1:-1;;;3992:2:1;3977:18;;3970:52;4054:2;4039:18;;3717:346::o;4068:184::-;4138:6;4191:2;4179:9;4170:7;4166:23;4162:32;4159:52;;;4207:1;4204;4197:12;4159:52;-1:-1:-1;4230:16:1;;4068:184;-1:-1:-1;4068:184:1:o;4257:277::-;4324:6;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4425:9;4419:16;4478:5;4471:13;4464:21;4457:5;4454:32;4444:60;;4500:1;4497;4490:12;4539:350;4741:2;4723:21;;;4780:2;4760:18;;;4753:30;4819:28;4814:2;4799:18;;4792:56;4880:2;4865:18;;4539:350::o;5934:125::-;5999:9;;;6020:10;;;6017:36;;;6033:18;;:::i;6064:127::-;6125:10;6120:3;6116:20;6113:1;6106:31;6156:4;6153:1;6146:15;6180:4;6177:1;6170:15;6196:135;6235:3;6256:17;;;6253:43;;6276:18;;:::i;:::-;-1:-1:-1;6323:1:1;6312:13;;6196:135::o;8834:179::-;8912:13;;8965:22;8954:34;;8944:45;;8934:73;;9003:1;9000;8993:12;8934:73;8834:179;;;:::o;9018:473::-;9121:6;9129;9137;9145;9153;9206:3;9194:9;9185:7;9181:23;9177:33;9174:53;;;9223:1;9220;9213:12;9174:53;9246:39;9275:9;9246:39;:::i;:::-;9236:49;;9325:2;9314:9;9310:18;9304:25;9294:35;;9369:2;9358:9;9354:18;9348:25;9338:35;;9413:2;9402:9;9398:18;9392:25;9382:35;;9436:49;9480:3;9469:9;9465:19;9436:49;:::i;:::-;9426:59;;9018:473;;;;;;;;:::o;9496:237::-;9568:9;;;9535:7;9593:9;;-1:-1:-1;;;9604:18:1;;9589:34;9586:60;;;9626:18;;:::i;:::-;9699:1;9690:7;9685:16;9682:1;9679:23;9675:1;9668:9;9665:38;9655:72;;9707:18;;:::i
Swarm Source
ipfs://934a9a586d47771c983983730f5a700b6fee80a125616ff743e4e9e6da1c4582
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.