Source Code
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x973D8657...2af7d556c The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
DevLockVault
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at monadscan.com on 2025-11-27
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/// @notice Minimal ERC20 interface for lock/claim operations
interface IERC20 {
function transfer(address to, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
}
/// @title DevLockVault
/// @notice Token locking vault for Gain.fun launches.
/// - Early Buy: Optional locking with custom duration (called by BondingCurve/Factory).
/// - User Locks: Users can lock their own tokens for custom duration (hours, days, or months).
/// - Tokens can be claimed after unlock time.
/// - No owner withdraw for locked balances (no rug).
contract DevLockVault {
// ---------------------------------------------------------------------
// Ownership (simple, no external dependency)
// ---------------------------------------------------------------------
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
modifier onlyOwner() {
require(msg.sender == owner, "DevLockVault: caller is not the owner");
_;
}
constructor() {
owner = msg.sender;
emit OwnershipTransferred(address(0), msg.sender);
}
function transferOwnership(address newOwner) external onlyOwner {
require(newOwner != address(0), "DevLockVault: new owner is zero");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
// ---------------------------------------------------------------------
// Config
// ---------------------------------------------------------------------
/// @notice Default lock duration for early buy (1 hour).
uint256 public constant DEFAULT_LOCK_DURATION = 1 hours;
/// @notice Maximum lock duration (5 years = 60 months).
uint256 public constant MAX_LOCK_DURATION = 60 * 30 days; // 5 years max
/// @notice Time unit constants for convenience.
uint256 public constant SECONDS_PER_HOUR = 1 hours;
uint256 public constant SECONDS_PER_DAY = 1 days;
uint256 public constant SECONDS_PER_MONTH = 30 days; // approximate: 30 days
/// @notice Addresses allowed to lock tokens (BondingCurve, Factory, etc.).
mapping(address => bool) public isAuthorizedDepositor;
event AuthorizedDepositorUpdated(address indexed depositor, bool allowed);
/// @notice Update which addresses are allowed to create locks.
/// @dev Typically set to BondingCurve + Factory contracts.
function setAuthorizedDepositor(address depositor, bool allowed) external onlyOwner {
isAuthorizedDepositor[depositor] = allowed;
emit AuthorizedDepositorUpdated(depositor, allowed);
}
// ---------------------------------------------------------------------
// Lock storage
// ---------------------------------------------------------------------
struct LockInfo {
uint256 amount; // total locked tokens for this token+dev
uint256 unlockTime; // timestamp when claim becomes available
}
/// @notice token => dev => lock info
mapping(address => mapping(address => LockInfo)) public locks;
event TokensLocked(
address indexed token,
address indexed dev,
uint256 amount,
uint256 unlockTime
);
event TokensClaimed(
address indexed token,
address indexed dev,
uint256 amount
);
// ---------------------------------------------------------------------
// Core logic
// ---------------------------------------------------------------------
/// @notice Lock dev tokens for a specific creator (dev) with optional duration.
/// @dev Caller must be authorized (BondingCurve/Factory).
/// This function pulls tokens from msg.sender via transferFrom.
/// If lockDurationSeconds is 0, tokens are sent directly to dev (no lock).
/// Flow example (inside BondingCurve):
/// 1) compute devTokens
/// 2) IERC20(token).approve(devLockVault, devTokens);
/// 3) devLockVault.lockFrom(token, creator, devTokens, lockDurationSeconds);
///
/// @param token The token to lock (GainFunToken address).
/// @param dev The wallet address of the token creator (dev).
/// @param amount Amount of tokens to lock.
/// @param lockDurationSeconds Lock duration in seconds (0 = no lock, send directly to dev).
/// Use SECONDS_PER_HOUR, SECONDS_PER_DAY, or SECONDS_PER_MONTH constants.
function lockFrom(address token, address dev, uint256 amount, uint256 lockDurationSeconds) external {
require(isAuthorizedDepositor[msg.sender], "DevLockVault: not authorized");
require(dev != address(0), "DevLockVault: dev is zero");
require(amount > 0, "DevLockVault: amount is zero");
require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");
// Pull tokens from depositor (BondingCurve/Factory).
bool ok = IERC20(token).transferFrom(msg.sender, address(this), amount);
require(ok, "DevLockVault: transferFrom failed");
// If no lock duration, send directly to dev
if (lockDurationSeconds == 0) {
ok = IERC20(token).transfer(dev, amount);
require(ok, "DevLockVault: direct transfer failed");
emit TokensLocked(token, dev, amount, block.timestamp); // unlockTime = now means immediately claimable
return;
}
LockInfo storage l = locks[token][dev];
// Calculate unlock time: now + lockDurationSeconds
uint256 newUnlock = block.timestamp + lockDurationSeconds;
// Extend unlock time if new lock is longer
if (newUnlock > l.unlockTime) {
l.unlockTime = newUnlock;
}
l.amount += amount;
emit TokensLocked(token, dev, amount, l.unlockTime);
}
/// @dev Internal lock function (shared logic for lock and convenience functions)
function _lock(address token, address user, uint256 amount, uint256 lockDurationSeconds) internal {
require(token != address(0), "DevLockVault: token is zero");
require(amount > 0, "DevLockVault: amount is zero");
require(lockDurationSeconds > 0 && lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: invalid duration");
// Pull tokens from user
bool ok = IERC20(token).transferFrom(user, address(this), amount);
require(ok, "DevLockVault: transferFrom failed");
LockInfo storage l = locks[token][user];
// Calculate unlock time: now + lockDurationSeconds
uint256 newUnlock = block.timestamp + lockDurationSeconds;
// Extend unlock time if new lock is longer
if (newUnlock > l.unlockTime) {
l.unlockTime = newUnlock;
}
l.amount += amount;
emit TokensLocked(token, user, amount, l.unlockTime);
}
/// @notice Lock tokens for msg.sender with custom duration (in seconds).
/// @dev Users can lock their own tokens for a specified duration.
/// Tokens must be approved first: IERC20(token).approve(devLockVault, amount)
/// Use helper functions lockHours, lockDays, lockMonths for convenience.
///
/// @param token The token to lock.
/// @param amount Amount of tokens to lock.
/// @param lockDurationSeconds Lock duration in seconds.
/// Use SECONDS_PER_HOUR, SECONDS_PER_DAY, or SECONDS_PER_MONTH constants.
function lock(address token, uint256 amount, uint256 lockDurationSeconds) external {
_lock(token, msg.sender, amount, lockDurationSeconds);
}
/// @notice Lock tokens for msg.sender for specified hours.
/// @dev Convenience function for locking by hours.
/// @param token The token to lock.
/// @param amount Amount of tokens to lock.
/// @param hours_ Number of hours to lock (max 43800 hours = 5 years).
function lockHours(address token, uint256 amount, uint256 hours_) external {
require(hours_ > 0, "DevLockVault: hours must be > 0");
uint256 lockDurationSeconds = hours_ * SECONDS_PER_HOUR;
require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");
_lock(token, msg.sender, amount, lockDurationSeconds);
}
/// @notice Lock tokens for msg.sender for specified days.
/// @dev Convenience function for locking by days.
/// @param token The token to lock.
/// @param amount Amount of tokens to lock.
/// @param days_ Number of days to lock (max 1825 days = 5 years).
function lockDays(address token, uint256 amount, uint256 days_) external {
require(days_ > 0, "DevLockVault: days must be > 0");
uint256 lockDurationSeconds = days_ * SECONDS_PER_DAY;
require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");
_lock(token, msg.sender, amount, lockDurationSeconds);
}
/// @notice Lock tokens for msg.sender for specified months.
/// @dev Convenience function for locking by months.
/// @param token The token to lock.
/// @param amount Amount of tokens to lock.
/// @param months_ Number of months to lock (max 60 months = 5 years).
function lockMonths(address token, uint256 amount, uint256 months_) external {
require(months_ > 0, "DevLockVault: months must be > 0");
uint256 lockDurationSeconds = months_ * SECONDS_PER_MONTH;
require(lockDurationSeconds <= MAX_LOCK_DURATION, "DevLockVault: lock too long");
_lock(token, msg.sender, amount, lockDurationSeconds);
}
/// @notice Claim all unlocked tokens for msg.sender for a specific token.
/// @dev Users can claim their own locked tokens after unlock time.
function claim(address token) external {
LockInfo storage l = locks[token][msg.sender];
uint256 amount = l.amount;
require(amount > 0, "DevLockVault: nothing to claim");
require(block.timestamp >= l.unlockTime, "DevLockVault: still locked");
// Clear before transfer to prevent re-entrancy issues on non-standard tokens.
l.amount = 0;
l.unlockTime = 0;
bool ok = IERC20(token).transfer(msg.sender, amount);
require(ok, "DevLockVault: transfer failed");
emit TokensClaimed(token, msg.sender, amount);
}
// ---------------------------------------------------------------------
// Views for frontend
// ---------------------------------------------------------------------
/// @notice Get lock info for a given token and user wallet.
/// @param token The token address.
/// @param dev The user wallet address.
/// @return amount Currently locked token amount.
/// @return unlockTime Timestamp when this lock can be claimed.
function getLockInfo(address token, address dev)
external
view
returns (uint256 amount, uint256 unlockTime)
{
LockInfo memory l = locks[token][dev];
return (l.amount, l.unlockTime);
}
/// @notice Returns true if the user's lock for this token is currently claimable.
function isUnlocked(address token, address dev) external view returns (bool) {
LockInfo memory l = locks[token][dev];
return (l.amount > 0 && block.timestamp >= l.unlockTime);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"AuthorizedDepositorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"TokensLocked","type":"event"},{"inputs":[],"name":"DEFAULT_LOCK_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LOCK_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_HOUR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_MONTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"dev","type":"address"}],"name":"getLockInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorizedDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"dev","type":"address"}],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockDurationSeconds","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"days_","type":"uint256"}],"name":"lockDays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockDurationSeconds","type":"uint256"}],"name":"lockFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"hours_","type":"uint256"}],"name":"lockHours","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"months_","type":"uint256"}],"name":"lockMonths","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"locks","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"depositor","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAuthorizedDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
0x6080604052348015600e575f5ffd5b505f80546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3610fb68061005a5f395ff3fe608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80638efc9dfa1161009e578063e952acc81161006e578063e952acc814610286578063ee3ca99c146101d4578063efd6eaa1146102b8578063f16ce33e146102cb578063f2fde38b146102de575f5ffd5b80638efc9dfa1461021c578063c05f61551461022f578063dcef06bf14610260578063e2ab691d14610273575f5ffd5b806322abe7e3116100e457806322abe7e3146101c15780634df86126146101d45780634f1bfc9e146101dd57806374f0314f146101e85780638da5cb5b146101f2575f5ffd5b8063061c90401461011557806310786deb1461018157806312248bd2146101995780631e83409a146101ae575b5f5ffd5b610167610123366004610d9c565b6001600160a01b039182165f908152600260209081526040808320939094168252918252829020825180840190935280548084526001909101549290910182905291565b604080519283526020830191909152015b60405180910390f35b61018b62278d0081565b604051908152602001610178565b6101ac6101a7366004610dcd565b6102f1565b005b6101ac6101bc366004610dfd565b6103bb565b6101ac6101cf366004610dcd565b61058e565b61018b610e1081565b61018b6309450c0081565b61018b6201518081565b5f54610204906001600160a01b031681565b6040516001600160a01b039091168152602001610178565b6101ac61022a366004610e2d565b6105ea565b61016761023d366004610d9c565b600260209081525f92835260408084209091529082529020805460019091015482565b6101ac61026e366004610e62565b610671565b6101ac610281366004610dcd565b610a40565b6102a8610294366004610dfd565b60016020525f908152604090205460ff1681565b6040519015158152602001610178565b6101ac6102c6366004610dcd565b610a51565b6102a86102d9366004610d9c565b610aae565b6101ac6102ec366004610dfd565b610b0d565b5f81116103455760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a2064617973206d757374206265203e2030000060448201526064015b60405180910390fd5b5f6103536201518083610eb5565b90506309450c008111156103a95760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6103b584338584610be5565b50505050565b6001600160a01b0381165f908152600260209081526040808320338452909152902080548061042c5760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a206e6f7468696e6720746f20636c61696d0000604482015260640161033c565b81600101544210156104805760405162461bcd60e51b815260206004820152601a60248201527f4465764c6f636b5661756c743a207374696c6c206c6f636b6564000000000000604482015260640161033c565b5f8083556001830181905560405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0385169063a9059cbb906044016020604051808303815f875af11580156104d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190610ecc565b9050806105485760405162461bcd60e51b815260206004820152601d60248201527f4465764c6f636b5661756c743a207472616e73666572206661696c6564000000604482015260640161033c565b60405182815233906001600160a01b038616907fa86305abc2db271df4609aa86a8d044bc11fb36939841bfdad6c1ab2b26e94719060200160405180910390a350505050565b5f81116105dd5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a20686f757273206d757374206265203e203000604482015260640161033c565b5f610353610e1083610eb5565b5f546001600160a01b031633146106135760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527fd8ca4ccec562bc375bed25d6c45ea2c3229b9cd6f5e0569ab9b193479d0a1092910160405180910390a25050565b335f9081526001602052604090205460ff166106cf5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a206e6f7420617574686f72697a656400000000604482015260640161033c565b6001600160a01b0383166107255760405162461bcd60e51b815260206004820152601960248201527f4465764c6f636b5661756c743a20646576206973207a65726f00000000000000604482015260640161033c565b5f82116107745760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b6309450c008111156107c85760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6040516323b872dd60e01b8152336004820152306024820152604481018390525f906001600160a01b038616906323b872dd906064016020604051808303815f875af115801561081a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083e9190610ecc565b90508061085d5760405162461bcd60e51b815260040161033c90610f2c565b815f0361097d5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303815f875af11580156108b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190610ecc565b90508061092f5760405162461bcd60e51b8152602060048201526024808201527f4465764c6f636b5661756c743a20646972656374207472616e736665722066616044820152631a5b195960e21b606482015260840161033c565b604080518481524260208201526001600160a01b0380871692908816917fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9910160405180910390a3506103b5565b6001600160a01b038086165f9081526002602090815260408083209388168352929052908120906109ae8442610f6d565b905081600101548111156109c457600182018190555b84825f015f8282546109d69190610f6d565b92505081905550856001600160a01b0316876001600160a01b03167fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9878560010154604051610a2f929190918252602082015260400190565b60405180910390a350505050505050565b610a4c83338484610be5565b505050565b5f8111610aa05760405162461bcd60e51b815260206004820181905260248201527f4465764c6f636b5661756c743a206d6f6e746873206d757374206265203e2030604482015260640161033c565b5f61035362278d0083610eb5565b6001600160a01b038083165f9081526002602090815260408083209385168352928152828220835180850190945280548085526001909101549184019190915290919015801590610b03575080602001514210155b9150505b92915050565b5f546001600160a01b03163314610b365760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b038116610b8c5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a206e6577206f776e6572206973207a65726f00604482015260640161033c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416610c3b5760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a20746f6b656e206973207a65726f0000000000604482015260640161033c565b5f8211610c8a5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b5f81118015610c9d57506309450c008111155b610ce95760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a20696e76616c6964206475726174696f6e0000604482015260640161033c565b6040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490525f91908616906323b872dd906064016020604051808303815f875af1158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190610ecc565b90508061097d5760405162461bcd60e51b815260040161033c90610f2c565b80356001600160a01b0381168114610d97575f5ffd5b919050565b5f5f60408385031215610dad575f5ffd5b610db683610d81565b9150610dc460208401610d81565b90509250929050565b5f5f5f60608486031215610ddf575f5ffd5b610de884610d81565b95602085013595506040909401359392505050565b5f60208284031215610e0d575f5ffd5b610e1682610d81565b9392505050565b8015158114610e2a575f5ffd5b50565b5f5f60408385031215610e3e575f5ffd5b610e4783610d81565b91506020830135610e5781610e1d565b809150509250929050565b5f5f5f5f60808587031215610e75575f5ffd5b610e7e85610d81565b9350610e8c60208601610d81565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b0757610b07610ea1565b5f60208284031215610edc575f5ffd5b8151610e1681610e1d565b60208082526025908201527f4465764c6f636b5661756c743a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b60208082526021908201527f4465764c6f636b5661756c743a207472616e7366657246726f6d206661696c656040820152601960fa1b606082015260800190565b80820180821115610b0757610b07610ea156fea26469706673582212206afa878fbd4c2050d6d14930270ba76e222ea87e10a4cad0265794d181c9110564736f6c634300081e0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80638efc9dfa1161009e578063e952acc81161006e578063e952acc814610286578063ee3ca99c146101d4578063efd6eaa1146102b8578063f16ce33e146102cb578063f2fde38b146102de575f5ffd5b80638efc9dfa1461021c578063c05f61551461022f578063dcef06bf14610260578063e2ab691d14610273575f5ffd5b806322abe7e3116100e457806322abe7e3146101c15780634df86126146101d45780634f1bfc9e146101dd57806374f0314f146101e85780638da5cb5b146101f2575f5ffd5b8063061c90401461011557806310786deb1461018157806312248bd2146101995780631e83409a146101ae575b5f5ffd5b610167610123366004610d9c565b6001600160a01b039182165f908152600260209081526040808320939094168252918252829020825180840190935280548084526001909101549290910182905291565b604080519283526020830191909152015b60405180910390f35b61018b62278d0081565b604051908152602001610178565b6101ac6101a7366004610dcd565b6102f1565b005b6101ac6101bc366004610dfd565b6103bb565b6101ac6101cf366004610dcd565b61058e565b61018b610e1081565b61018b6309450c0081565b61018b6201518081565b5f54610204906001600160a01b031681565b6040516001600160a01b039091168152602001610178565b6101ac61022a366004610e2d565b6105ea565b61016761023d366004610d9c565b600260209081525f92835260408084209091529082529020805460019091015482565b6101ac61026e366004610e62565b610671565b6101ac610281366004610dcd565b610a40565b6102a8610294366004610dfd565b60016020525f908152604090205460ff1681565b6040519015158152602001610178565b6101ac6102c6366004610dcd565b610a51565b6102a86102d9366004610d9c565b610aae565b6101ac6102ec366004610dfd565b610b0d565b5f81116103455760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a2064617973206d757374206265203e2030000060448201526064015b60405180910390fd5b5f6103536201518083610eb5565b90506309450c008111156103a95760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6103b584338584610be5565b50505050565b6001600160a01b0381165f908152600260209081526040808320338452909152902080548061042c5760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a206e6f7468696e6720746f20636c61696d0000604482015260640161033c565b81600101544210156104805760405162461bcd60e51b815260206004820152601a60248201527f4465764c6f636b5661756c743a207374696c6c206c6f636b6564000000000000604482015260640161033c565b5f8083556001830181905560405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0385169063a9059cbb906044016020604051808303815f875af11580156104d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190610ecc565b9050806105485760405162461bcd60e51b815260206004820152601d60248201527f4465764c6f636b5661756c743a207472616e73666572206661696c6564000000604482015260640161033c565b60405182815233906001600160a01b038616907fa86305abc2db271df4609aa86a8d044bc11fb36939841bfdad6c1ab2b26e94719060200160405180910390a350505050565b5f81116105dd5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a20686f757273206d757374206265203e203000604482015260640161033c565b5f610353610e1083610eb5565b5f546001600160a01b031633146106135760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527fd8ca4ccec562bc375bed25d6c45ea2c3229b9cd6f5e0569ab9b193479d0a1092910160405180910390a25050565b335f9081526001602052604090205460ff166106cf5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a206e6f7420617574686f72697a656400000000604482015260640161033c565b6001600160a01b0383166107255760405162461bcd60e51b815260206004820152601960248201527f4465764c6f636b5661756c743a20646576206973207a65726f00000000000000604482015260640161033c565b5f82116107745760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b6309450c008111156107c85760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a206c6f636b20746f6f206c6f6e670000000000604482015260640161033c565b6040516323b872dd60e01b8152336004820152306024820152604481018390525f906001600160a01b038616906323b872dd906064016020604051808303815f875af115801561081a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083e9190610ecc565b90508061085d5760405162461bcd60e51b815260040161033c90610f2c565b815f0361097d5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303815f875af11580156108b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190610ecc565b90508061092f5760405162461bcd60e51b8152602060048201526024808201527f4465764c6f636b5661756c743a20646972656374207472616e736665722066616044820152631a5b195960e21b606482015260840161033c565b604080518481524260208201526001600160a01b0380871692908816917fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9910160405180910390a3506103b5565b6001600160a01b038086165f9081526002602090815260408083209388168352929052908120906109ae8442610f6d565b905081600101548111156109c457600182018190555b84825f015f8282546109d69190610f6d565b92505081905550856001600160a01b0316876001600160a01b03167fc8b76441f0c994977de3f73de32b3573a68b94e5d786ffd899638438754c9de9878560010154604051610a2f929190918252602082015260400190565b60405180910390a350505050505050565b610a4c83338484610be5565b505050565b5f8111610aa05760405162461bcd60e51b815260206004820181905260248201527f4465764c6f636b5661756c743a206d6f6e746873206d757374206265203e2030604482015260640161033c565b5f61035362278d0083610eb5565b6001600160a01b038083165f9081526002602090815260408083209385168352928152828220835180850190945280548085526001909101549184019190915290919015801590610b03575080602001514210155b9150505b92915050565b5f546001600160a01b03163314610b365760405162461bcd60e51b815260040161033c90610ee7565b6001600160a01b038116610b8c5760405162461bcd60e51b815260206004820152601f60248201527f4465764c6f636b5661756c743a206e6577206f776e6572206973207a65726f00604482015260640161033c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416610c3b5760405162461bcd60e51b815260206004820152601b60248201527f4465764c6f636b5661756c743a20746f6b656e206973207a65726f0000000000604482015260640161033c565b5f8211610c8a5760405162461bcd60e51b815260206004820152601c60248201527f4465764c6f636b5661756c743a20616d6f756e74206973207a65726f00000000604482015260640161033c565b5f81118015610c9d57506309450c008111155b610ce95760405162461bcd60e51b815260206004820152601e60248201527f4465764c6f636b5661756c743a20696e76616c6964206475726174696f6e0000604482015260640161033c565b6040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490525f91908616906323b872dd906064016020604051808303815f875af1158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190610ecc565b90508061097d5760405162461bcd60e51b815260040161033c90610f2c565b80356001600160a01b0381168114610d97575f5ffd5b919050565b5f5f60408385031215610dad575f5ffd5b610db683610d81565b9150610dc460208401610d81565b90509250929050565b5f5f5f60608486031215610ddf575f5ffd5b610de884610d81565b95602085013595506040909401359392505050565b5f60208284031215610e0d575f5ffd5b610e1682610d81565b9392505050565b8015158114610e2a575f5ffd5b50565b5f5f60408385031215610e3e575f5ffd5b610e4783610d81565b91506020830135610e5781610e1d565b809150509250929050565b5f5f5f5f60808587031215610e75575f5ffd5b610e7e85610d81565b9350610e8c60208601610d81565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b0757610b07610ea1565b5f60208284031215610edc575f5ffd5b8151610e1681610e1d565b60208082526025908201527f4465764c6f636b5661756c743a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b60208082526021908201527f4465764c6f636b5661756c743a207472616e7366657246726f6d206661696c656040820152601960fa1b606082015260800190565b80820180821115610b0757610b07610ea156fea26469706673582212206afa878fbd4c2050d6d14930270ba76e222ea87e10a4cad0265794d181c9110564736f6c634300081e0033
Deployed Bytecode Sourcemap
796:10985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:238;;;;;;:::i;:::-;-1:-1:-1;;;;;11415:12:0;;;11343:14;11415:12;;;:5;:12;;;;;;;;:17;;;;;;;;;;;;11395:37;;;;;;;;;;;;;;;;;;;;;;;;;;11244:238;;;;;631:25:1;;;687:2;672:18;;665:34;;;;604:18;11244:238:0;;;;;;;;2256:51;;2300:7;2256:51;;;;;856:25:1;;;844:2;829:18;2256:51:0;710:177:1;8968:363:0;;;;;;:::i;:::-;;:::i;:::-;;10165:602;;;;;;:::i;:::-;;:::i;8309:369::-;;;;;;:::i;:::-;;:::i;2144:50::-;;2187:7;2144:50;;2006:56;;2050:12;2006:56;;2201:48;;2243:6;2201:48;;1034:20;;;;;-1:-1:-1;;;;;1034:20:0;;;;;;-1:-1:-1;;;;;1672:32:1;;;1654:51;;1642:2;1627:18;1034:20:0;1508:203:1;2699:207:0;;;;;;:::i;:::-;;:::i;3312:61::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4783:1416;;;;;;:::i;:::-;;:::i;7858:155::-;;;;;;:::i;:::-;;:::i;2421:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2824:14:1;;2817:22;2799:41;;2787:2;2772:18;2421:53:0;2659:187:1;9629:375:0;;;;;;:::i;:::-;;:::i;11578:200::-;;;;;;:::i;:::-;;:::i;1403:229::-;;;;;;:::i;:::-;;:::i;8968:363::-;9068:1;9060:5;:9;9052:52;;;;-1:-1:-1;;;9052:52:0;;3053:2:1;9052:52:0;;;3035:21:1;3092:2;3072:18;;;3065:30;3131:32;3111:18;;;3104:60;3181:18;;9052:52:0;;;;;;;;;9115:27;9145:23;2243:6;9145:5;:23;:::i;:::-;9115:53;;2050:12;9187:19;:40;;9179:80;;;;-1:-1:-1;;;9179:80:0;;3717:2:1;9179:80:0;;;3699:21:1;3756:2;3736:18;;;3729:30;3795:29;3775:18;;;3768:57;3842:18;;9179:80:0;3515:351:1;9179:80:0;9270:53;9276:5;9283:10;9295:6;9303:19;9270:5;:53::i;:::-;9041:290;8968:363;;;:::o;10165:602::-;-1:-1:-1;;;;;10236:12:0;;10215:18;10236:12;;;:5;:12;;;;;;;;10249:10;10236:24;;;;;;;10288:8;;10315:10;10307:53;;;;-1:-1:-1;;;10307:53:0;;4073:2:1;10307:53:0;;;4055:21:1;4112:2;4092:18;;;4085:30;4151:32;4131:18;;;4124:60;4201:18;;10307:53:0;3871:354:1;10307:53:0;10398:1;:12;;;10379:15;:31;;10371:70;;;;-1:-1:-1;;;10371:70:0;;4432:2:1;10371:70:0;;;4414:21:1;4471:2;4451:18;;;4444:30;4510:28;4490:18;;;4483:56;4556:18;;10371:70:0;4230:350:1;10371:70:0;10553:1;10542:12;;;10565;;;:16;;;10604:42;;-1:-1:-1;;;10604:42:0;;10627:10;10604:42;;;4759:51:1;4826:18;;;4819:34;;;-1:-1:-1;;;;;10604:22:0;;;;;4732:18:1;;10604:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10594:52;;10665:2;10657:44;;;;-1:-1:-1;;;10657:44:0;;5316:2:1;10657:44:0;;;5298:21:1;5355:2;5335:18;;;5328:30;5394:31;5374:18;;;5367:59;5443:18;;10657:44:0;5114:353:1;10657:44:0;10719:40;;856:25:1;;;10740:10:0;;-1:-1:-1;;;;;10719:40:0;;;;;844:2:1;829:18;10719:40:0;;;;;;;10204:563;;;10165:602;:::o;8309:369::-;8412:1;8403:6;:10;8395:54;;;;-1:-1:-1;;;8395:54:0;;5674:2:1;8395:54:0;;;5656:21:1;5713:2;5693:18;;;5686:30;5752:33;5732:18;;;5725:61;5803:18;;8395:54:0;5472:355:1;8395:54:0;8460:27;8490:25;2187:7;8490:6;:25;:::i;2699:207::-;1209:5;;-1:-1:-1;;;;;1209:5:0;1195:10;:19;1187:69;;;;-1:-1:-1;;;1187:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2794:32:0;::::1;;::::0;;;:21:::1;:32;::::0;;;;;;;;:42;;-1:-1:-1;;2794:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;2852:46;;2799:41:1;;;2852:46:0::1;::::0;2772:18:1;2852:46:0::1;;;;;;;2699:207:::0;;:::o;4783:1416::-;4924:10;4902:33;;;;:21;:33;;;;;;;;4894:74;;;;-1:-1:-1;;;4894:74:0;;6440:2:1;4894:74:0;;;6422:21:1;6479:2;6459:18;;;6452:30;6518;6498:18;;;6491:58;6566:18;;4894:74:0;6238:352:1;4894:74:0;-1:-1:-1;;;;;4987:17:0;;4979:55;;;;-1:-1:-1;;;4979:55:0;;6797:2:1;4979:55:0;;;6779:21:1;6836:2;6816:18;;;6809:30;6875:27;6855:18;;;6848:55;6920:18;;4979:55:0;6595:349:1;4979:55:0;5062:1;5053:6;:10;5045:51;;;;-1:-1:-1;;;5045:51:0;;7151:2:1;5045:51:0;;;7133:21:1;7190:2;7170:18;;;7163:30;7229;7209:18;;;7202:58;7277:18;;5045:51:0;6949:352:1;5045:51:0;2050:12;5115:19;:40;;5107:80;;;;-1:-1:-1;;;5107:80:0;;3717:2:1;5107:80:0;;;3699:21:1;3756:2;3736:18;;;3729:30;3795:29;3775:18;;;3768:57;3842:18;;5107:80:0;3515:351:1;5107:80:0;5273:61;;-1:-1:-1;;;5273:61:0;;5300:10;5273:61;;;7508:51:1;5320:4:0;7575:18:1;;;7568:60;7644:18;;;7637:34;;;5263:7:0;;-1:-1:-1;;;;;5273:26:0;;;;;7481:18:1;;5273:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5263:71;;5353:2;5345:48;;;;-1:-1:-1;;;5345:48:0;;;;;;;:::i;:::-;5464:19;5487:1;5464:24;5460:301;;5510:35;;-1:-1:-1;;;5510:35:0;;-1:-1:-1;;;;;4777:32:1;;;5510:35:0;;;4759:51:1;4826:18;;;4819:34;;;5510:22:0;;;;;4732:18:1;;5510:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5505:40;;5568:2;5560:51;;;;-1:-1:-1;;;5560:51:0;;8286:2:1;5560:51:0;;;8268:21:1;8325:2;8305:18;;;8298:30;8364:34;8344:18;;;8337:62;-1:-1:-1;;;8415:18:1;;;8408:34;8459:19;;5560:51:0;8084:400:1;5560:51:0;5631:49;;;631:25:1;;;5664:15:0;687:2:1;672:18;;665:34;-1:-1:-1;;;;;5631:49:0;;;;;;;;;;604:18:1;5631:49:0;;;;;;;5743:7;;;5460:301;-1:-1:-1;;;;;5794:12:0;;;5773:18;5794:12;;;:5;:12;;;;;;;;:17;;;;;;;;;;;;5905:37;5923:19;5905:15;:37;:::i;:::-;5885:57;;6032:1;:12;;;6020:9;:24;6016:81;;;6061:12;;;:24;;;6016:81;6121:6;6109:1;:8;;;:18;;;;;;;:::i;:::-;;;;;;;;6165:3;-1:-1:-1;;;;;6145:46:0;6158:5;-1:-1:-1;;;;;6145:46:0;;6170:6;6178:1;:12;;;6145:46;;;;;;631:25:1;;;687:2;672:18;;665:34;619:2;604:18;;457:248;6145:46:0;;;;;;;;4883:1316;;;4783:1416;;;;:::o;7858:155::-;7952:53;7958:5;7965:10;7977:6;7985:19;7952:5;:53::i;:::-;7858:155;;;:::o;9629:375::-;9735:1;9725:7;:11;9717:56;;;;-1:-1:-1;;;9717:56:0;;8821:2:1;9717:56:0;;;8803:21:1;;;8840:18;;;8833:30;8899:34;8879:18;;;8872:62;8951:18;;9717:56:0;8619:356:1;9717:56:0;9784:27;9814;2300:7;9814;:27;:::i;11578:200::-;-1:-1:-1;;;;;11686:12:0;;;11649:4;11686:12;;;:5;:12;;;;;;;;:17;;;;;;;;;;;11666:37;;;;;;;;;;;;;;;;;;;;;;;;;11649:4;;11666:37;11722:12;;;;:47;;;11757:1;:12;;;11738:15;:31;;11722:47;11714:56;;;11578:200;;;;;:::o;1403:229::-;1209:5;;-1:-1:-1;;;;;1209:5:0;1195:10;:19;1187:69;;;;-1:-1:-1;;;1187:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1486:22:0;::::1;1478:66;;;::::0;-1:-1:-1;;;1478:66:0;;9182:2:1;1478:66:0::1;::::0;::::1;9164:21:1::0;9221:2;9201:18;;;9194:30;9260:33;9240:18;;;9233:61;9311:18;;1478:66:0::1;8980:355:1::0;1478:66:0::1;1581:5;::::0;;1560:37:::1;::::0;-1:-1:-1;;;;;1560:37:0;;::::1;::::0;1581:5;::::1;::::0;1560:37:::1;::::0;::::1;1608:5;:16:::0;;-1:-1:-1;;;;;;1608:16:0::1;-1:-1:-1::0;;;;;1608:16:0;;;::::1;::::0;;;::::1;::::0;;1403:229::o;6294:963::-;-1:-1:-1;;;;;6411:19:0;;6403:59;;;;-1:-1:-1;;;6403:59:0;;9542:2:1;6403:59:0;;;9524:21:1;9581:2;9561:18;;;9554:30;9620:29;9600:18;;;9593:57;9667:18;;6403:59:0;9340:351:1;6403:59:0;6490:1;6481:6;:10;6473:51;;;;-1:-1:-1;;;6473:51:0;;7151:2:1;6473:51:0;;;7133:21:1;7190:2;7170:18;;;7163:30;7229;7209:18;;;7202:58;7277:18;;6473:51:0;6949:352:1;6473:51:0;6565:1;6543:19;:23;:67;;;;;2050:12;6570:19;:40;;6543:67;6535:110;;;;-1:-1:-1;;;6535:110:0;;9898:2:1;6535:110:0;;;9880:21:1;9937:2;9917:18;;;9910:30;9976:32;9956:18;;;9949:60;10026:18;;6535:110:0;9696:354:1;6535:110:0;6702:55;;-1:-1:-1;;;6702:55:0;;-1:-1:-1;;;;;7526:32:1;;;6702:55:0;;;7508:51:1;6743:4:0;7575:18:1;;;7568:60;7644:18;;;7637:34;;;6692:7:0;;6702:26;;;;;;7481:18:1;;6702:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6692:65;;6776:2;6768:48;;;;-1:-1:-1;;;6768:48:0;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:260::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;;408:38;442:2;431:9;427:18;408:38;:::i;:::-;398:48;;192:260;;;;;:::o;892:420::-;969:6;977;985;1038:2;1026:9;1017:7;1013:23;1009:32;1006:52;;;1054:1;1051;1044:12;1006:52;1077:29;1096:9;1077:29;:::i;:::-;1067:39;1175:2;1160:18;;1147:32;;-1:-1:-1;1276:2:1;1261:18;;;1248:32;;892:420;-1:-1:-1;;;892:420:1:o;1317:186::-;1376:6;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1468:29;1487:9;1468:29;:::i;:::-;1458:39;1317:186;-1:-1:-1;;;1317:186:1:o;1716:118::-;1802:5;1795:13;1788:21;1781:5;1778:32;1768:60;;1824:1;1821;1814:12;1768:60;1716:118;:::o;1839:315::-;1904:6;1912;1965:2;1953:9;1944:7;1940:23;1936:32;1933:52;;;1981:1;1978;1971:12;1933:52;2004:29;2023:9;2004:29;:::i;:::-;1994:39;;2083:2;2072:9;2068:18;2055:32;2096:28;2118:5;2096:28;:::i;:::-;2143:5;2133:15;;;1839:315;;;;;:::o;2159:495::-;2245:6;2253;2261;2269;2322:3;2310:9;2301:7;2297:23;2293:33;2290:53;;;2339:1;2336;2329:12;2290:53;2362:29;2381:9;2362:29;:::i;:::-;2352:39;;2410:38;2444:2;2433:9;2429:18;2410:38;:::i;:::-;2159:495;;2400:48;;-1:-1:-1;;;;2517:2:1;2502:18;;2489:32;;2618:2;2603:18;2590:32;;2159:495::o;3210:127::-;3271:10;3266:3;3262:20;3259:1;3252:31;3302:4;3299:1;3292:15;3326:4;3323:1;3316:15;3342:168;3415:9;;;3446;;3463:15;;;3457:22;;3443:37;3433:71;;3484:18;;:::i;4864:245::-;4931:6;4984:2;4972:9;4963:7;4959:23;4955:32;4952:52;;;5000:1;4997;4990:12;4952:52;5032:9;5026:16;5051:28;5073:5;5051:28;:::i;5832:401::-;6034:2;6016:21;;;6073:2;6053:18;;;6046:30;6112:34;6107:2;6092:18;;6085:62;-1:-1:-1;;;6178:2:1;6163:18;;6156:35;6223:3;6208:19;;5832:401::o;7682:397::-;7884:2;7866:21;;;7923:2;7903:18;;;7896:30;7962:34;7957:2;7942:18;;7935:62;-1:-1:-1;;;8028:2:1;8013:18;;8006:31;8069:3;8054:19;;7682:397::o;8489:125::-;8554:9;;;8575:10;;;8572:36;;;8588:18;;:::i
Swarm Source
ipfs://6afa878fbd4c2050d6d14930270ba76e222ea87e10a4cad0265794d181c91105
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.