Overview
BNB Balance
0 BNB
BNB Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 21,191 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint With Backin... | 44592534 | 1 hr ago | IN | 0 BNB | 0.00009762 | ||||
Transfer | 44592264 | 1 hr ago | IN | 0 BNB | 0.00005434 | ||||
Mint With Backin... | 44592230 | 1 hr ago | IN | 0 BNB | 0.00029286 | ||||
Mint With Backin... | 44591997 | 1 hr ago | IN | 0 BNB | 0.0004057 | ||||
Mint With Backin... | 44590843 | 2 hrs ago | IN | 0 BNB | 0.00014004 | ||||
Mint With Backin... | 44590721 | 2 hrs ago | IN | 0 BNB | 0.00040566 | ||||
Mint With Backin... | 44589265 | 3 hrs ago | IN | 0 BNB | 0.00027846 | ||||
Mint With Backin... | 44588957 | 4 hrs ago | IN | 0 BNB | 0.00009282 | ||||
Mint With Backin... | 44587275 | 5 hrs ago | IN | 0 BNB | 0.00009282 | ||||
Mint With Backin... | 44587175 | 5 hrs ago | IN | 0 BNB | 0.00011469 | ||||
Mint With Backin... | 44586905 | 5 hrs ago | IN | 0 BNB | 0.00013525 | ||||
Mint With Backin... | 44586814 | 6 hrs ago | IN | 0 BNB | 0.00014877 | ||||
Mint With Backin... | 44586510 | 6 hrs ago | IN | 0 BNB | 0.0000976 | ||||
Mint With Backin... | 44585891 | 6 hrs ago | IN | 0 BNB | 0.00040573 | ||||
Sell | 44585876 | 6 hrs ago | IN | 0 BNB | 0.00025528 | ||||
Sell | 44585854 | 6 hrs ago | IN | 0 BNB | 0.0000851 | ||||
Sell | 44585062 | 7 hrs ago | IN | 0 BNB | 0.00024099 | ||||
Mint With Backin... | 44584794 | 7 hrs ago | IN | 0 BNB | 0.00009762 | ||||
Sell | 44584521 | 7 hrs ago | IN | 0 BNB | 0.00029229 | ||||
Mint With Backin... | 44584143 | 8 hrs ago | IN | 0 BNB | 0.00027849 | ||||
Sell | 44583978 | 8 hrs ago | IN | 0 BNB | 0.00030661 | ||||
Transfer | 44583923 | 8 hrs ago | IN | 0 BNB | 0.00006503 | ||||
Transfer | 44583898 | 8 hrs ago | IN | 0 BNB | 0.00006502 | ||||
Sell | 44583767 | 8 hrs ago | IN | 0 BNB | 0.00029229 | ||||
Mint With Backin... | 44583632 | 8 hrs ago | IN | 0 BNB | 0.00010739 |
Loading...
Loading
Contract Name:
Trumpet
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2023-03-04 */ /* SPDX-License-Identifier: MIT A Bankteller Production Elephant Money Copyright 2023 */ /* Elephant Money Trumpet - A store of value backed by TRUNK that only goes up in value - Zero transfer or dev fees - Pay a low 5% fee on mint and reedem to fund the internal treasury - No pump and dump is possible and single sided liquidity is locked in the contract - 100% immutable with zero administrative functions - Extra transactional volume is generated by the growing Elephant Treasury Only at https://elephant.money */ pragma solidity 0.8.17; abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint8 private constant _NOT_ENTERED = 1; uint8 private constant _ENTERED = 2; uint8 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } abstract contract Context is ReentrancyGuard { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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; address private _previousOwner; bool private _paused; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); event RunStatusUpdated(bool indexed paused); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; _paused = false; emit RunStatusUpdated(_paused); emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Returns if paused status */ function isPaused() public view returns (bool) { return _paused; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Throws if called when contract is paused */ modifier isRunning() { require( _paused == false, "Function unavailable because contract is paused" ); _; } /** * @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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } /** * @dev Pause the contract for functions that check run status * Can only be called by the current owner. */ function updateRunStatus(bool paused) public virtual onlyOwner { emit RunStatusUpdated(paused); _paused = paused; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } interface IERC20 { function totalSupply() external view returns (uint256); function symbol() external view returns(string memory); function name() external view returns(string memory); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Returns the number of decimal places */ function decimals() external view returns (uint8); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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); } contract Trumpet is IERC20, Ownable { using SafeMath for uint256; // token data string private constant _name = "Elephant Money Trumpet"; string private constant _symbol = "TRUMPET"; uint8 private constant _decimals = 18; uint256 private constant precision = 10**18; uint256 private _total_users; //counts new minters uint256 private _total_txs; IERC20 public immutable underlying; uint256 private _totalSupply; // balances mapping (address => uint256) private _balances; mapping (address => uint8) private _users; mapping (address => mapping (address => uint256)) private _allowances; // 5% buy and sell Fees uint256 public mintFee = 95000; uint256 public sellFee = 95000; uint256 private constant feeDenominator = 10**5; constructor() Ownable() { // initialize underlying asset; TRUNK underlying = IERC20(address(0xdd325C38b12903B727D16961e61333f4871A70E0)); } /** Returns the total number of tokens in existence */ function totalSupply() external view override returns (uint256) { return _totalSupply; } /** Returns the number of tokens owned by `account` */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** Returns the number of tokens `spender` can transfer from `holder` */ function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } /** Token Name */ function name() public pure override returns (string memory) { return _name; } /** Token Ticker Symbol */ function symbol() public pure override returns (string memory) { return _symbol; } /** Tokens decimals */ function decimals() public pure override returns (uint8) { return _decimals; } /** Approves `spender` to transfer `amount` tokens from caller */ function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } /** Transfer Function */ function transfer(address recipient, uint256 amount) external override nonReentrant returns (bool) { return _transferFrom(msg.sender, recipient, amount); } /** Transfer Function */ function transferFrom(address sender, address recipient, uint256 amount) external override nonReentrant returns (bool) { _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, 'Insufficient Allowance'); return _transferFrom(sender, recipient, amount); } /** Internal Transfer */ function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { // make standard checks require(recipient != address(0) && sender != address(0), "Transfer To Zero"); require(amount > 0, "Transfer Amt Zero"); // track price change uint256 oldPrice = _calculatePrice(); // subtract from sender _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); // give reduced amount to receiver _balances[recipient] = _balances[recipient].add(amount); // require price rises _requirePriceRises(oldPrice); //update globals _total_txs += 1; // Transfer Event emit Transfer(sender, recipient, amount); return true; } /** Mint TRUMPET Tokens For `recipient` By Depositing TRUNK Into The Contract Requirements: Approval from the TRUNK prior to purchase @param numTokens number of TRUNK tokens to mint TRUMPET with @param recipient Account to receive minted TRUMPET tokens @return tokensMinted number of TRUMPET tokens minted */ function mintWithBacking(uint256 numTokens, address recipient) external nonReentrant returns (uint256) { _checkGarbageCollector(address(this)); return _mintWithBacking(numTokens, recipient); } /** Burns Sender's TRUMPET Tokens and redeems their value in TRUNK @param tokenAmount Number of TRUMPET Tokens To Redeem, Must be greater than 0 */ function sell(uint256 tokenAmount) external nonReentrant returns (uint256) { return _sell(msg.sender, tokenAmount, msg.sender); } /** Burns Sender's TRUMPET Tokens and redeems their value in TRUNK for `recipient` @param tokenAmount Number of TRUMPET Tokens To Redeem, Must be greater than 0 @param recipient Recipient Of TRUNK transfer, Must not be address(0) */ function sellTo(uint256 tokenAmount, address recipient) external nonReentrant returns (uint256) { return _sell(msg.sender, tokenAmount, recipient); } /** Allows A User To Erase Their Holdings From Supply DOES NOT REDEEM UNDERLYING ASSET FOR USER @param amount Number of TRUMPET Tokens To Burn */ function burn(uint256 amount) external nonReentrant { // get balance of caller uint256 bal = _balances[msg.sender]; require(bal >= amount && bal > 0, 'Zero Holdings'); // Track Change In Price uint256 oldPrice = _calculatePrice(); // burn tokens from sender + supply _burn(msg.sender, amount); // require price rises _requirePriceRises(oldPrice); // Emit Call emit Burn(msg.sender, amount); } /** Stake Tokens and Deposits TRUMPET in Sender's Address, Must Have Prior Approval For TRUNK */ function _mintWithBacking(uint256 amount, address recipient) internal returns (uint256) { // users token balance uint256 userTokenBalance = underlying.balanceOf(msg.sender); // ensure user has enough to send require(userTokenBalance > 0 && amount <= userTokenBalance, 'Insufficient Balance'); // calculate price change uint256 oldPrice = _calculatePrice(); // amount of underlying uint256 amountUnderlying = underlyingBalance(); // transfer in token uint256 received = _transferIn(amount); // Handle Minting return _mintTo(recipient, received, amountUnderlying, oldPrice); } /** Burns TRUMPET Tokens And Deposits TRUNK Tokens into Recipients's Address */ function _sell(address seller, uint256 tokenAmount, address recipient) internal returns (uint256) { require(tokenAmount > 0 && _balances[seller] >= tokenAmount); require(seller != address(0) && recipient != address(0)); // calculate price change uint256 oldPrice = _calculatePrice(); // tokens post fee to swap for underlying asset uint256 tokensToSwap = tokenAmount.mul(sellFee).div(feeDenominator); // value of taxed tokens uint256 amountUnderlyingAsset = amountOut(tokensToSwap); // burn from sender + supply _burn(seller, tokenAmount); // send Tokens to Seller require( underlying.transfer(recipient, amountUnderlyingAsset), 'Underlying Transfer Failure' ); // require price rises _requirePriceRises(oldPrice); //update globals _total_txs += 1; // Differentiate Sell emit Redeemed(seller, tokenAmount, amountUnderlyingAsset); // return token redeemed and amount underlying return amountUnderlyingAsset; } /** Handles Minting Logic To Create New TRUMPET */ function _mintTo(address recipient, uint256 received, uint256 totalBacking, uint256 oldPrice) private returns(uint256) { // find the number of tokens we should mint to keep up with the current price uint256 tokensToMintNoTax = _totalSupply == 0 ? received : _totalSupply.mul(received).div(totalBacking); // apply fee to minted tokens to inflate price relative to total supply uint256 tokensToMint = tokensToMintNoTax.mul(mintFee).div(feeDenominator); require(tokensToMint > 0, 'Zero Amount'); // mint to Buyer _mint(recipient, tokensToMint); // require price rises _requirePriceRises(oldPrice); //update globals _total_txs += 1; // differentiate purchase emit Minted(recipient, tokensToMint); return tokensToMint; } /** Requires The Price Of TRUMPET To Rise For The Transaction To Conclude */ function _requirePriceRises(uint256 oldPrice) internal { // Calculate Price After Transaction uint256 newPrice = _calculatePrice(); // Require Current Price >= Last Price require(newPrice >= oldPrice, 'Price Cannot Fall'); // Emit The Price Change emit PriceChange(oldPrice, newPrice, _totalSupply); } /** Transfers `desiredAmount` of `token` in and verifies the transaction success */ function _transferIn(uint256 desiredAmount) internal returns (uint256) { uint256 balBefore = underlyingBalance(); require( underlying.transferFrom(msg.sender, address(this), desiredAmount), 'Failure Transfer From' ); uint256 balAfter = underlyingBalance(); require( balAfter > balBefore, 'Zero Received' ); return balAfter - balBefore; } /** Mints Tokens to the Receivers Address */ function _mint(address receiver, uint amount) private { //user count is based on whenever a new account has been minted to if (_users[receiver] == 0){ _users[receiver] = 1; _total_users += 1; } _balances[receiver] = _balances[receiver].add(amount); _totalSupply = _totalSupply.add(amount); emit Transfer(address(0), receiver, amount); } /** Burns `amount` of tokens from `account` */ function _burn(address account, uint amount) private { _balances[account] = _balances[account].sub(amount, 'Insufficient Balance'); _totalSupply = _totalSupply.sub(amount, 'Negative Supply'); emit Transfer(account, address(0), amount); } /** Make Sure there's no Native Tokens in contract */ function _checkGarbageCollector(address burnLocation) internal { uint256 bal = _balances[burnLocation]; if (bal > 10**3) { // Track Change In Price uint256 oldPrice = _calculatePrice(); // burn amount _burn(burnLocation, bal); // Emit Collection emit GarbageCollected(bal); // Emit Price Difference emit PriceChange(oldPrice, _calculatePrice(), _totalSupply); } } function underlyingBalance() public view returns (uint256) { return underlying.balanceOf(address(this)); } /** Price Of TRUMPET in TRUNK With 18 Points Of Precision */ function calculatePrice() external view returns (uint256) { return _calculatePrice(); } /** Returns the Current Price of 1 Token */ function _calculatePrice() internal view returns (uint256) { return _totalSupply == 0 ? 10**18 : (underlyingBalance().mul(precision)).div(_totalSupply); } /** Returns the amount of TRUMPET given numtokens of TRUNK; accounting for fees**/ function estimateMinted(uint256 numTokens) public view returns (uint256) { uint balance = underlyingBalance(); return _totalSupply == 0 ? numTokens.mul(mintFee).div(feeDenominator) : _totalSupply.mul(numTokens).div(balance).mul(mintFee).div(feeDenominator); } /** Returns the amount of TRUNK given numtokens of TRUMPET **/ function estimateRedeemed(uint256 numTokens) public view returns (uint256) { return amountOut(numTokens.mul(sellFee).div(feeDenominator)); } /** Amount Of Underlying To Receive For `numTokens` of TRUMPET */ function amountOut(uint256 numTokens) public view returns (uint256) { return _calculatePrice().mul(numTokens).div(precision); } /** Returns the value of `holder`'s holdings */ function getValueOfHoldings(address holder) public view returns(uint256) { return amountOut(_balances[holder]); } /** Returns basic contract stats **/ function getInfo() public view returns(uint256 users, uint256 txs, uint256 underlyingSupply, uint256 supply, uint256 price){ users = _total_users; txs = _total_txs; underlyingSupply = underlyingBalance(); supply = _totalSupply; price = _calculatePrice(); } /** Withdraws Tokens Incorrectly Sent To TRUMPET */ function withdrawNonStableToken(IERC20 token) external onlyOwner { require(address(token) != address(underlying), 'Cannot Withdraw Underlying Asset'); require(address(token) != address(0), 'Zero Address'); token.transfer(msg.sender, token.balanceOf(address(this))); } /** Events **/ event PriceChange(uint256 previousPrice, uint256 currentPrice, uint256 totalSupply); event Burn(address from, uint256 amountBurned); event GarbageCollected(uint256 amountBurned); event Redeemed(address seller, uint256 amountTRUMPET, uint256 amountTRUNK); event Minted(address recipient, uint256 amountTRUMPET); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountBurned","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBurned","type":"uint256"}],"name":"GarbageCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTRUMPET","type":"uint256"}],"name":"Minted","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":false,"internalType":"uint256","name":"previousPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PriceChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTRUMPET","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTRUNK","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"paused","type":"bool"}],"name":"RunStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"amountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"estimateMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"estimateRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInfo","outputs":[{"internalType":"uint256","name":"users","type":"uint256"},{"internalType":"uint256","name":"txs","type":"uint256"},{"internalType":"uint256","name":"underlyingSupply","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getValueOfHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"mintWithBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sellTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlyingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"updateRunStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawNonStableToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052620173186008556201731860095534801561001e57600080fd5b506000805460ff191660011781556100333390565b60008054610100600160a81b0319166101006001600160a01b038416021781556001805460ff60a01b19169081905560405192935060ff600160a01b909104161515917f2a04a433f4a9e9958a2e686298f452d15ff8cad4449e4517bf21b843f27ceb019190a26040516001600160a01b038216906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35073dd325c38b12903b727d16961e61333f4871a70e0608052608051611c6761012760003960008181610323015281816105470152818161096a015281816112d80152818161149801526116830152611c676000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636f307dc311610104578063a9059cbb116100a2578063e4849b3211610071578063e4849b3214610453578063ed13b25314610466578063f2fde38b14610479578063f542c8671461048c57600080fd5b8063a9059cbb146103ed578063b187bd2614610400578063d348b40914610412578063dd62ed3e1461041a57600080fd5b80637314f109116100de5780637314f1091461038e57806375fe9fba146103a15780638da5cb5b146103b457806395d89b41146103ca57600080fd5b80636f307dc31461031e57806370a082311461035d578063715018a61461038657600080fd5b80632b14ca561161017157806342966c681161014b57806342966c68146102c057806359356c5c146102d35780635a9b0b89146102db5780636b014f831461030b57600080fd5b80632b14ca5614610295578063313ce5671461029e57806340efd24a146102ad57600080fd5b806318160ddd116101ad57806318160ddd146102525780631aa5a82d1461025a5780631f02a29c1461026f57806323b872dd1461028257600080fd5b806306fdde03146101d4578063095ea7b31461021857806313966db51461023b575b600080fd5b604080518082019091526016815275115b195c1a185b9d08135bdb995e48151c9d5b5c195d60521b60208201525b60405161020f9190611988565b60405180910390f35b61022b6102263660046119ee565b61049f565b604051901515815260200161020f565b61024460085481565b60405190815260200161020f565b600454610244565b61026d610268366004611a1a565b61050c565b005b61024461027d366004611a1a565b6106f0565b61022b610290366004611a37565b610712565b61024460095481565b6040516012815260200161020f565b61026d6102bb366004611a86565b6107e1565b61026d6102ce366004611aa3565b61085c565b610244610952565b6102e36109e2565b604080519586526020860194909452928401919091526060830152608082015260a00161020f565b610244610319366004611aa3565b610a0c565b6103457f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020f565b61024461036b366004611a1a565b6001600160a01b031660009081526005602052604090205490565b61026d610a7d565b61024461039c366004611abc565b610afc565b6102446103af366004611aa3565b610b58565b60005461010090046001600160a01b0316610345565b6040805180820190915260078152661514955354115560ca1b6020820152610202565b61022b6103fb3660046119ee565b610b72565b600154600160a01b900460ff1661022b565b610244610bb1565b610244610428366004611aec565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b610244610461366004611aa3565b610bbb565b610244610474366004611aa3565b610c0e565b61026d610487366004611a1a565b610c2f565b61024461049a366004611abc565b610d2a565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104fa9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b036101009091041633146105455760405162461bcd60e51b815260040161053c90611b1a565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036105c65760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420576974686472617720556e6465726c79696e67204173736574604482015260640161053c565b6001600160a01b03811661060b5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b604482015260640161053c565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067d9190611b4f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190611b68565b5050565b6001600160a01b03811660009081526005602052604081205461050690610b58565b6000805460ff16600119016107395760405162461bcd60e51b815260040161053c90611b85565b6000805460ff191660021781556040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038816845260078152828420338552905291205461079c918490610d69565b6001600160a01b03851660009081526007602090815260408083203384529091529020556107cb848484610da3565b90506000805460ff191660011790559392505050565b6000546001600160a01b036101009091041633146108115760405162461bcd60e51b815260040161053c90611b1a565b604051811515907f2a04a433f4a9e9958a2e686298f452d15ff8cad4449e4517bf21b843f27ceb0190600090a260018054911515600160a01b0260ff60a01b19909216919091179055565b60005460ff16600119016108825760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002178155338152600560205260409020548181108015906108ac5750600081115b6108e85760405162461bcd60e51b815260206004820152600d60248201526c5a65726f20486f6c64696e677360981b604482015260640161053c565b60006108f2610f7d565b90506108fe3384610fb0565b6109078161109f565b60408051338152602081018590527fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5910160405180910390a150506000805460ff1916600117905550565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190611b4f565b905090565b600254600354600080806109f4610952565b92506004549150610a03610f7d565b90509091929394565b600080610a17610952565b9050600454600014610a5a57610a55620186a0610a49600854610a4f85610a498960045461113690919063ffffffff16565b906111b8565b90611136565b610a76565b610a76620186a0610a496008548661113690919063ffffffff16565b9392505050565b6000546001600160a01b03610100909104163314610aad5760405162461bcd60e51b815260040161053c90611b1a565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000805460ff1660011901610b235760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610b39306111fa565b610b4383836112b6565b90506000805460ff1916600117905592915050565b6000610506670de0b6b3a7640000610a4984610a4f610f7d565b6000805460ff1660011901610b995760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610b43338484610da3565b60006109dd610f7d565b6000805460ff1660011901610be25760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610bfa3383816113d4565b90506000805460ff19166001179055919050565b60006105066103af620186a0610a496009548661113690919063ffffffff16565b6000546001600160a01b03610100909104163314610c5f5760405162461bcd60e51b815260040161053c90611b1a565b6001600160a01b038116610cc45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161053c565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000805460ff1660011901610d515760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610b433384846113d4565b60008184841115610d8d5760405162461bcd60e51b815260040161053c9190611988565b506000610d9a8486611bd2565b95945050505050565b60006001600160a01b03831615801590610dc557506001600160a01b03841615155b610e045760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220546f205a65726f60801b604482015260640161053c565b60008211610e485760405162461bcd60e51b81526020600482015260116024820152705472616e7366657220416d74205a65726f60781b604482015260640161053c565b6000610e52610f7d565b9050610eba8360405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b81525060056000896001600160a01b03166001600160a01b0316815260200190815260200160002054610d699092919063ffffffff16565b6001600160a01b038087166000908152600560205260408082209390935590861681522054610ee990846115c6565b6001600160a01b038516600090815260056020526040902055610f0b8161109f565b600160036000828254610f1e9190611be5565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610f6a91815260200190565b60405180910390a3506001949350505050565b6000600454600014610fa3576109dd600454610a49670de0b6b3a7640000610a4f610952565b50670de0b6b3a764000090565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038516600090815260059091529190912054611002918390610d69565b6001600160a01b038316600090815260056020908152604091829020929092558051808201909152600f81526e4e6567617469766520537570706c7960881b91810191909152600454611056918390610d69565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60006110a9610f7d565b9050818110156110ef5760405162461bcd60e51b8152602060048201526011602482015270141c9a58d94810d85b9b9bdd0811985b1b607a1b604482015260640161053c565b600454604080518481526020810184905280820192909252517f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed19181900360600190a15050565b60008260000361114857506000610506565b60006111548385611bf8565b9050826111618583611c0f565b14610a765760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161053c565b6000610a7683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611625565b6001600160a01b0381166000908152600560205260409020546103e88111156106ec576000611227610f7d565b90506112338383610fb0565b6040518281527f8a1c945864c85a9dee42b8734075761f7a16095a8384ab751f2417c5767e227e9060200160405180910390a17f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed181611290610f7d565b6004546040805193845260208401929092529082015260600160405180910390a1505050565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561131f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113439190611b4f565b90506000811180156113555750808411155b6113985760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161053c565b60006113a2610f7d565b905060006113ae610952565b905060006113bb87611653565b90506113c986828486611799565b979650505050505050565b600080831180156113fd57506001600160a01b0384166000908152600560205260409020548311155b61140657600080fd5b6001600160a01b0384161580159061142657506001600160a01b03821615155b61142f57600080fd5b6000611439610f7d565b90506000611459620186a0610a496009548861113690919063ffffffff16565b9050600061146682610b58565b90506114728787610fb0565b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190611b68565b6115515760405162461bcd60e51b815260206004820152601b60248201527f556e6465726c79696e67205472616e73666572204661696c7572650000000000604482015260640161053c565b61155a8361109f565b60016003600082825461156d9190611be5565b9091555050604080516001600160a01b0389168152602081018890529081018290527ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2629060600160405180910390a19695505050505050565b6000806115d38385611be5565b905083811015610a765760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161053c565b600081836116465760405162461bcd60e51b815260040161053c9190611988565b506000610d9a8486611c0f565b60008061165e610952565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190611b68565b61173c5760405162461bcd60e51b81526020600482015260156024820152744661696c757265205472616e736665722046726f6d60581b604482015260640161053c565b6000611746610952565b90508181116117875760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b604482015260640161053c565b6117918282611bd2565b949350505050565b6000806004546000146117c4576117bf84610a498760045461113690919063ffffffff16565b6117c6565b845b905060006117e6620186a0610a496008548561113690919063ffffffff16565b9050600081116118265760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b604482015260640161053c565b611830878261189d565b6118398461109f565b60016003600082825461184c9190611be5565b9091555050604080516001600160a01b0389168152602081018390527f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe910160405180910390a19695505050505050565b6001600160a01b03821660009081526006602052604081205460ff1690036118fe576001600160a01b0382166000908152600660205260408120805460ff1916600190811790915560028054919290916118f8908490611be5565b90915550505b6001600160a01b03821660009081526005602052604090205461192190826115c6565b6001600160a01b03831660009081526005602052604090205560045461194790826115c6565b6004556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611093565b600060208083528351808285015260005b818110156119b557858101830151858201604001528201611999565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119eb57600080fd5b50565b60008060408385031215611a0157600080fd5b8235611a0c816119d6565b946020939093013593505050565b600060208284031215611a2c57600080fd5b8135610a76816119d6565b600080600060608486031215611a4c57600080fd5b8335611a57816119d6565b92506020840135611a67816119d6565b929592945050506040919091013590565b80151581146119eb57600080fd5b600060208284031215611a9857600080fd5b8135610a7681611a78565b600060208284031215611ab557600080fd5b5035919050565b60008060408385031215611acf57600080fd5b823591506020830135611ae1816119d6565b809150509250929050565b60008060408385031215611aff57600080fd5b8235611b0a816119d6565b91506020830135611ae1816119d6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611b6157600080fd5b5051919050565b600060208284031215611b7a57600080fd5b8151610a7681611a78565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050657610506611bbc565b8082018082111561050657610506611bbc565b808202811582820484141761050657610506611bbc565b600082611c2c57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122063cd15a8252d3f2c6b254ecbda3a9ab47d564f8e317008c62112fb1cc57ac7d764736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636f307dc311610104578063a9059cbb116100a2578063e4849b3211610071578063e4849b3214610453578063ed13b25314610466578063f2fde38b14610479578063f542c8671461048c57600080fd5b8063a9059cbb146103ed578063b187bd2614610400578063d348b40914610412578063dd62ed3e1461041a57600080fd5b80637314f109116100de5780637314f1091461038e57806375fe9fba146103a15780638da5cb5b146103b457806395d89b41146103ca57600080fd5b80636f307dc31461031e57806370a082311461035d578063715018a61461038657600080fd5b80632b14ca561161017157806342966c681161014b57806342966c68146102c057806359356c5c146102d35780635a9b0b89146102db5780636b014f831461030b57600080fd5b80632b14ca5614610295578063313ce5671461029e57806340efd24a146102ad57600080fd5b806318160ddd116101ad57806318160ddd146102525780631aa5a82d1461025a5780631f02a29c1461026f57806323b872dd1461028257600080fd5b806306fdde03146101d4578063095ea7b31461021857806313966db51461023b575b600080fd5b604080518082019091526016815275115b195c1a185b9d08135bdb995e48151c9d5b5c195d60521b60208201525b60405161020f9190611988565b60405180910390f35b61022b6102263660046119ee565b61049f565b604051901515815260200161020f565b61024460085481565b60405190815260200161020f565b600454610244565b61026d610268366004611a1a565b61050c565b005b61024461027d366004611a1a565b6106f0565b61022b610290366004611a37565b610712565b61024460095481565b6040516012815260200161020f565b61026d6102bb366004611a86565b6107e1565b61026d6102ce366004611aa3565b61085c565b610244610952565b6102e36109e2565b604080519586526020860194909452928401919091526060830152608082015260a00161020f565b610244610319366004611aa3565b610a0c565b6103457f000000000000000000000000dd325c38b12903b727d16961e61333f4871a70e081565b6040516001600160a01b03909116815260200161020f565b61024461036b366004611a1a565b6001600160a01b031660009081526005602052604090205490565b61026d610a7d565b61024461039c366004611abc565b610afc565b6102446103af366004611aa3565b610b58565b60005461010090046001600160a01b0316610345565b6040805180820190915260078152661514955354115560ca1b6020820152610202565b61022b6103fb3660046119ee565b610b72565b600154600160a01b900460ff1661022b565b610244610bb1565b610244610428366004611aec565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b610244610461366004611aa3565b610bbb565b610244610474366004611aa3565b610c0e565b61026d610487366004611a1a565b610c2f565b61024461049a366004611abc565b610d2a565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104fa9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b036101009091041633146105455760405162461bcd60e51b815260040161053c90611b1a565b60405180910390fd5b7f000000000000000000000000dd325c38b12903b727d16961e61333f4871a70e06001600160a01b0316816001600160a01b0316036105c65760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420576974686472617720556e6465726c79696e67204173736574604482015260640161053c565b6001600160a01b03811661060b5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b604482015260640161053c565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067d9190611b4f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190611b68565b5050565b6001600160a01b03811660009081526005602052604081205461050690610b58565b6000805460ff16600119016107395760405162461bcd60e51b815260040161053c90611b85565b6000805460ff191660021781556040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038816845260078152828420338552905291205461079c918490610d69565b6001600160a01b03851660009081526007602090815260408083203384529091529020556107cb848484610da3565b90506000805460ff191660011790559392505050565b6000546001600160a01b036101009091041633146108115760405162461bcd60e51b815260040161053c90611b1a565b604051811515907f2a04a433f4a9e9958a2e686298f452d15ff8cad4449e4517bf21b843f27ceb0190600090a260018054911515600160a01b0260ff60a01b19909216919091179055565b60005460ff16600119016108825760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002178155338152600560205260409020548181108015906108ac5750600081115b6108e85760405162461bcd60e51b815260206004820152600d60248201526c5a65726f20486f6c64696e677360981b604482015260640161053c565b60006108f2610f7d565b90506108fe3384610fb0565b6109078161109f565b60408051338152602081018590527fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5910160405180910390a150506000805460ff1916600117905550565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000dd325c38b12903b727d16961e61333f4871a70e06001600160a01b0316906370a0823190602401602060405180830381865afa1580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190611b4f565b905090565b600254600354600080806109f4610952565b92506004549150610a03610f7d565b90509091929394565b600080610a17610952565b9050600454600014610a5a57610a55620186a0610a49600854610a4f85610a498960045461113690919063ffffffff16565b906111b8565b90611136565b610a76565b610a76620186a0610a496008548661113690919063ffffffff16565b9392505050565b6000546001600160a01b03610100909104163314610aad5760405162461bcd60e51b815260040161053c90611b1a565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000805460ff1660011901610b235760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610b39306111fa565b610b4383836112b6565b90506000805460ff1916600117905592915050565b6000610506670de0b6b3a7640000610a4984610a4f610f7d565b6000805460ff1660011901610b995760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610b43338484610da3565b60006109dd610f7d565b6000805460ff1660011901610be25760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610bfa3383816113d4565b90506000805460ff19166001179055919050565b60006105066103af620186a0610a496009548661113690919063ffffffff16565b6000546001600160a01b03610100909104163314610c5f5760405162461bcd60e51b815260040161053c90611b1a565b6001600160a01b038116610cc45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161053c565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000805460ff1660011901610d515760405162461bcd60e51b815260040161053c90611b85565b6000805460ff19166002179055610b433384846113d4565b60008184841115610d8d5760405162461bcd60e51b815260040161053c9190611988565b506000610d9a8486611bd2565b95945050505050565b60006001600160a01b03831615801590610dc557506001600160a01b03841615155b610e045760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220546f205a65726f60801b604482015260640161053c565b60008211610e485760405162461bcd60e51b81526020600482015260116024820152705472616e7366657220416d74205a65726f60781b604482015260640161053c565b6000610e52610f7d565b9050610eba8360405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b81525060056000896001600160a01b03166001600160a01b0316815260200190815260200160002054610d699092919063ffffffff16565b6001600160a01b038087166000908152600560205260408082209390935590861681522054610ee990846115c6565b6001600160a01b038516600090815260056020526040902055610f0b8161109f565b600160036000828254610f1e9190611be5565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610f6a91815260200190565b60405180910390a3506001949350505050565b6000600454600014610fa3576109dd600454610a49670de0b6b3a7640000610a4f610952565b50670de0b6b3a764000090565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038516600090815260059091529190912054611002918390610d69565b6001600160a01b038316600090815260056020908152604091829020929092558051808201909152600f81526e4e6567617469766520537570706c7960881b91810191909152600454611056918390610d69565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60006110a9610f7d565b9050818110156110ef5760405162461bcd60e51b8152602060048201526011602482015270141c9a58d94810d85b9b9bdd0811985b1b607a1b604482015260640161053c565b600454604080518481526020810184905280820192909252517f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed19181900360600190a15050565b60008260000361114857506000610506565b60006111548385611bf8565b9050826111618583611c0f565b14610a765760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161053c565b6000610a7683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611625565b6001600160a01b0381166000908152600560205260409020546103e88111156106ec576000611227610f7d565b90506112338383610fb0565b6040518281527f8a1c945864c85a9dee42b8734075761f7a16095a8384ab751f2417c5767e227e9060200160405180910390a17f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed181611290610f7d565b6004546040805193845260208401929092529082015260600160405180910390a1505050565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000dd325c38b12903b727d16961e61333f4871a70e016906370a0823190602401602060405180830381865afa15801561131f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113439190611b4f565b90506000811180156113555750808411155b6113985760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161053c565b60006113a2610f7d565b905060006113ae610952565b905060006113bb87611653565b90506113c986828486611799565b979650505050505050565b600080831180156113fd57506001600160a01b0384166000908152600560205260409020548311155b61140657600080fd5b6001600160a01b0384161580159061142657506001600160a01b03821615155b61142f57600080fd5b6000611439610f7d565b90506000611459620186a0610a496009548861113690919063ffffffff16565b9050600061146682610b58565b90506114728787610fb0565b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390527f000000000000000000000000dd325c38b12903b727d16961e61333f4871a70e0169063a9059cbb906044016020604051808303816000875af11580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190611b68565b6115515760405162461bcd60e51b815260206004820152601b60248201527f556e6465726c79696e67205472616e73666572204661696c7572650000000000604482015260640161053c565b61155a8361109f565b60016003600082825461156d9190611be5565b9091555050604080516001600160a01b0389168152602081018890529081018290527ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2629060600160405180910390a19695505050505050565b6000806115d38385611be5565b905083811015610a765760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161053c565b600081836116465760405162461bcd60e51b815260040161053c9190611988565b506000610d9a8486611c0f565b60008061165e610952565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f000000000000000000000000dd325c38b12903b727d16961e61333f4871a70e06001600160a01b0316906323b872dd906064016020604051808303816000875af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190611b68565b61173c5760405162461bcd60e51b81526020600482015260156024820152744661696c757265205472616e736665722046726f6d60581b604482015260640161053c565b6000611746610952565b90508181116117875760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b604482015260640161053c565b6117918282611bd2565b949350505050565b6000806004546000146117c4576117bf84610a498760045461113690919063ffffffff16565b6117c6565b845b905060006117e6620186a0610a496008548561113690919063ffffffff16565b9050600081116118265760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b604482015260640161053c565b611830878261189d565b6118398461109f565b60016003600082825461184c9190611be5565b9091555050604080516001600160a01b0389168152602081018390527f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe910160405180910390a19695505050505050565b6001600160a01b03821660009081526006602052604081205460ff1690036118fe576001600160a01b0382166000908152600660205260408120805460ff1916600190811790915560028054919290916118f8908490611be5565b90915550505b6001600160a01b03821660009081526005602052604090205461192190826115c6565b6001600160a01b03831660009081526005602052604090205560045461194790826115c6565b6004556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611093565b600060208083528351808285015260005b818110156119b557858101830151858201604001528201611999565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119eb57600080fd5b50565b60008060408385031215611a0157600080fd5b8235611a0c816119d6565b946020939093013593505050565b600060208284031215611a2c57600080fd5b8135610a76816119d6565b600080600060608486031215611a4c57600080fd5b8335611a57816119d6565b92506020840135611a67816119d6565b929592945050506040919091013590565b80151581146119eb57600080fd5b600060208284031215611a9857600080fd5b8135610a7681611a78565b600060208284031215611ab557600080fd5b5035919050565b60008060408385031215611acf57600080fd5b823591506020830135611ae1816119d6565b809150509250929050565b60008060408385031215611aff57600080fd5b8235611b0a816119d6565b91506020830135611ae1816119d6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611b6157600080fd5b5051919050565b600060208284031215611b7a57600080fd5b8151610a7681611a78565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050657610506611bbc565b8082018082111561050657610506611bbc565b808202811582820484141761050657610506611bbc565b600082611c2c57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122063cd15a8252d3f2c6b254ecbda3a9ab47d564f8e317008c62112fb1cc57ac7d764736f6c63430008110033
Deployed Bytecode Sourcemap
13617:13960:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15298:92;15377:5;;;;;;;;;;;;-1:-1:-1;;;15377:5:0;;;;15298:92;;;;;;;:::i;:::-;;;;;;;;15733:216;;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;15733:216:0;1023:187:1;14333:37:0;;;;;;;;;1361:25:1;;;1349:2;1334:18;14333:37:0;1215:177:1;14735:104:0;14818:12;;14735:104;;26911:299;;;;;;:::i;:::-;;:::i;:::-;;26356:127;;;;;;:::i;:::-;;:::i;16196:299::-;;;;;;:::i;:::-;;:::i;14389:37::-;;;;;;15562:92;;;13864:2;2518:36:1;;2506:2;2491:18;15562:92:0;2376:184:1;5824:138:0;;;;;;:::i;:::-;;:::i;18960:505::-;;;;;;:::i;:::-;;:::i;24926:120::-;;;:::i;26533:306::-;;;:::i;:::-;;;;3378:25:1;;;3434:2;3419:18;;3412:34;;;;3462:18;;;3455:34;;;;3520:2;3505:18;;3498:34;3563:3;3548:19;;3541:35;3365:3;3350:19;26533:306:0;3119:463:1;25546:282:0;;;;;;:::i;:::-;;:::i;14022:34::-;;;;;;;;-1:-1:-1;;;;;3765:32:1;;;3747:51;;3735:2;3720:18;14022:34:0;3587:217:1;14907:121:0;;;;;;:::i;:::-;-1:-1:-1;;;;;15001:18:0;14973:7;15001:18;;;:9;:18;;;;;;;14907:121;5097:148;;;:::i;17774:215::-;;;;;;:::i;:::-;;:::i;26154:141::-;;;;;;:::i;:::-;;:::i;4066:79::-;4104:7;4131:6;;;;-1:-1:-1;;;;;4131:6:0;4066:79;;15430:96;15511:7;;;;;;;;;;;;-1:-1:-1;;;15511:7:0;;;;15430:96;;15989:169;;;;;;:::i;:::-;;:::i;4209:80::-;4274:7;;-1:-1:-1;;;4274:7:0;;;;4209:80;;25120:101;;;:::i;15114:149::-;;;;;;:::i;:::-;-1:-1:-1;;;;;15226:19:0;;;15198:7;15226:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15114:149;18174:143;;;;;;:::i;:::-;;:::i;25904:154::-;;;;;;:::i;:::-;;:::i;5400:281::-;;;;;;:::i;:::-;;:::i;18600:163::-;;;;;;:::i;:::-;;:::i;15733:216::-;15837:10;15808:4;15825:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15825:32:0;;;;;;;;;;:41;;;15882:37;15808:4;;15825:32;;15882:37;;;;15860:6;1361:25:1;;1349:2;1334:18;;1215:177;15882:37:0;;;;;;;;-1:-1:-1;15937:4:0;15733:216;;;;;:::o;26911:299::-;4422:6;;-1:-1:-1;;;;;4422:6:0;;;;;2581:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;;;;;;;;;27021:10:::1;-1:-1:-1::0;;;;;26995:37:0::1;27003:5;-1:-1:-1::0;;;;;26995:37:0::1;::::0;26987:82:::1;;;::::0;-1:-1:-1;;;26987:82:0;;5293:2:1;26987:82:0::1;::::0;::::1;5275:21:1::0;;;5312:18;;;5305:30;5371:34;5351:18;;;5344:62;5423:18;;26987:82:0::1;5091:356:1::0;26987:82:0::1;-1:-1:-1::0;;;;;27088:28:0;::::1;27080:53;;;::::0;-1:-1:-1;;;27080:53:0;;5654:2:1;27080:53:0::1;::::0;::::1;5636:21:1::0;5693:2;5673:18;;;5666:30;-1:-1:-1;;;5712:18:1;;;5705:42;5764:18;;27080:53:0::1;5452:336:1::0;27080:53:0::1;27171:30;::::0;-1:-1:-1;;;27171:30:0;;27195:4:::1;27171:30;::::0;::::1;3747:51:1::0;-1:-1:-1;;;;;27144:14:0;::::1;::::0;::::1;::::0;27159:10:::1;::::0;27144:14;;27171:15:::1;::::0;3720:18:1;;27171:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27144:58;::::0;-1:-1:-1;;;;;;27144:58:0::1;::::0;;;;;;-1:-1:-1;;;;;6174:32:1;;;27144:58:0::1;::::0;::::1;6156:51:1::0;6223:18;;;6216:34;6129:18;;27144:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26911:299:::0;:::o;26356:127::-;-1:-1:-1;;;;;26457:17:0;;26420:7;26457:17;;;:9;:17;;;;;;26447:28;;:9;:28::i;16196:299::-;16309:4;2098:7;;:19;:7;-1:-1:-1;;2098:19:0;2090:63;;;;-1:-1:-1;;;2090:63:0;;;;;;;:::i;:::-;2231:7;:18;;-1:-1:-1;;2231:18:0;1502:1;2231:18;;;16360:69:::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;16360:69:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;16360:19:0;::::1;::::0;;:11:::1;:19:::0;;;;;16380:10:::1;16360:31:::0;;;;;;;:69:::1;::::0;16396:6;;16360:35:::1;:69::i;:::-;-1:-1:-1::0;;;;;16326:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;16346:10:::1;16326:31:::0;;;;;;;:103;16447:40:::1;16338:6:::0;16469:9;16480:6;16447:13:::1;:40::i;:::-;16440:47;;2410:7:::0;:22;;-1:-1:-1;;2410:22:0;1460:1;2410:22;;;16196:299;;-1:-1:-1;;;16196:299:0:o;5824:138::-;4422:6;;-1:-1:-1;;;;;4422:6:0;;;;;2581:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;5903:24:::1;::::0;;::::1;;::::0;::::1;::::0;;;::::1;5938:7;:16:::0;;;::::1;;-1:-1:-1::0;;;5938:16:0::1;-1:-1:-1::0;;;;5938:16:0;;::::1;::::0;;;::::1;::::0;;5824:138::o;18960:505::-;2098:7;;:19;:7;-1:-1:-1;;2098:19:0;2090:63;;;;-1:-1:-1;;;2090:63:0;;;;;;;:::i;:::-;2231:7;:18;;-1:-1:-1;;2231:18:0;1502:1;2231:18;;;19081:10:::1;19071:21:::0;;:9:::1;:21;::::0;;;;;19111:13;;::::1;::::0;::::1;::::0;:24:::1;;;19134:1;19128:3;:7;19111:24;19103:50;;;::::0;-1:-1:-1;;;19103:50:0;;7073:2:1;19103:50:0::1;::::0;::::1;7055:21:1::0;7112:2;7092:18;;;7085:30;-1:-1:-1;;;7131:18:1;;;7124:43;7184:18;;19103:50:0::1;6871:337:1::0;19103:50:0::1;19198:16;19217:17;:15;:17::i;:::-;19198:36;;19299:25;19305:10;19317:6;19299:5;:25::i;:::-;19367:28;19386:8;19367:18;:28::i;:::-;19433:24;::::0;;19438:10:::1;6156:51:1::0;;6238:2;6223:18;;6216:34;;;19433:24:0::1;::::0;6129:18:1;19433:24:0::1;;;;;;;-1:-1:-1::0;;2410:7:0;:22;;-1:-1:-1;;2410:22:0;1460:1;2410:22;;;-1:-1:-1;18960:505:0:o;24926:120::-;25003:35;;-1:-1:-1;;;25003:35:0;;25032:4;25003:35;;;3747:51:1;24976:7:0;;25003:10;-1:-1:-1;;;;;25003:20:0;;;;3720:18:1;;25003:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24996:42;;24926:120;:::o;26533:306::-;26675:12;;26704:10;;26572:13;;;26744:19;:17;:19::i;:::-;26725:38;;26783:12;;26774:21;;26814:17;:15;:17::i;:::-;26806:25;;26533:306;;;;;:::o;25546:282::-;25610:7;25630:12;25645:19;:17;:19::i;:::-;25630:34;;25682:12;;25698:1;25682:17;:138;;25747:73;14487:5;25747:53;25792:7;;25747:40;25779:7;25747:27;25764:9;25747:12;;:16;;:27;;;;:::i;:::-;:31;;:40::i;:::-;:44;;:53::i;:73::-;25682:138;;;25702:42;14487:5;25702:22;25716:7;;25702:9;:13;;:22;;;;:::i;:42::-;25675:145;25546:282;-1:-1:-1;;;25546:282:0:o;5097:148::-;4422:6;;-1:-1:-1;;;;;4422:6:0;;;;;2581:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;5204:1:::1;5188:6:::0;;5167:40:::1;::::0;5188:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;5188:6:0::1;::::0;5167:40:::1;::::0;5204:1;;5167:40:::1;5235:1;5218:19:::0;;-1:-1:-1;;;;;;5218:19:0::1;::::0;;5097:148::o;17774:215::-;17868:7;2098;;:19;:7;-1:-1:-1;;2098:19:0;2090:63;;;;-1:-1:-1;;;2090:63:0;;;;;;;:::i;:::-;2231:7;:18;;-1:-1:-1;;2231:18:0;1502:1;2231:18;;;17888:37:::1;17919:4;17888:22;:37::i;:::-;17943:38;17960:9;17971;17943:16;:38::i;:::-;17936:45;;2410:7:::0;:22;;-1:-1:-1;;2410:22:0;1460:1;2410:22;;;17774:215;;-1:-1:-1;;17774:215:0:o;26154:141::-;26213:7;26240:47;13910:6;26240:32;26262:9;26240:17;:15;:17::i;15989:169::-;16082:4;2098:7;;:19;:7;-1:-1:-1;;2098:19:0;2090:63;;;;-1:-1:-1;;;2090:63:0;;;;;;;:::i;:::-;2231:7;:18;;-1:-1:-1;;2231:18:0;1502:1;2231:18;;;16106:44:::1;16120:10;16132:9:::0;16143:6;16106:13:::1;:44::i;25120:101::-:0;25169:7;25196:17;:15;:17::i;18174:143::-;18240:7;2098;;:19;:7;-1:-1:-1;;2098:19:0;2090:63;;;;-1:-1:-1;;;2090:63:0;;;;;;;:::i;:::-;2231:7;:18;;-1:-1:-1;;2231:18:0;1502:1;2231:18;;;18267:42:::1;18273:10;18285:11:::0;18273:10;18267:5:::1;:42::i;:::-;18260:49;;2410:7:::0;:22;;-1:-1:-1;;2410:22:0;1460:1;2410:22;;;18174:143;;-1:-1:-1;18174:143:0:o;25904:154::-;25970:7;25997:53;26007:42;14487:5;26007:22;26021:7;;26007:9;:13;;:22;;;;:::i;5400:281::-;4422:6;;-1:-1:-1;;;;;4422:6:0;;;;;2581:10;4422:22;4414:67;;;;-1:-1:-1;;;4414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5503:22:0;::::1;5481:110;;;::::0;-1:-1:-1;;;5481:110:0;;7415:2:1;5481:110:0::1;::::0;::::1;7397:21:1::0;7454:2;7434:18;;;7427:30;7493:34;7473:18;;;7466:62;-1:-1:-1;;;7544:18:1;;;7537:36;7590:19;;5481:110:0::1;7213:402:1::0;5481:110:0::1;5628:6;::::0;;5607:38:::1;::::0;-1:-1:-1;;;;;5607:38:0;;::::1;::::0;5628:6:::1;::::0;;::::1;;::::0;5607:38:::1;::::0;::::1;5656:6;:17:::0;;-1:-1:-1;;;;;5656:17:0;;::::1;;;-1:-1:-1::0;;;;;;5656:17:0;;::::1;::::0;;;::::1;::::0;;5400:281::o;18600:163::-;18687:7;2098;;:19;:7;-1:-1:-1;;2098:19:0;2090:63;;;;-1:-1:-1;;;2090:63:0;;;;;;;:::i;:::-;2231:7;:18;;-1:-1:-1;;2231:18:0;1502:1;2231:18;;;18714:41:::1;18720:10;18732:11:::0;18745:9;18714:5:::1;:41::i;7231:192::-:0;7317:7;7353:12;7345:6;;;;7337:29;;;;-1:-1:-1;;;7337:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7377:9:0;7389:5;7393:1;7389;:5;:::i;:::-;7377:17;7231:192;-1:-1:-1;;;;;7231:192:0:o;16537:833::-;16629:4;-1:-1:-1;;;;;16687:23:0;;;;;;:47;;-1:-1:-1;;;;;;16714:20:0;;;;16687:47;16679:76;;;;-1:-1:-1;;;16679:76:0;;8087:2:1;16679:76:0;;;8069:21:1;8126:2;8106:18;;;8099:30;-1:-1:-1;;;8145:18:1;;;8138:46;8201:18;;16679:76:0;7885:340:1;16679:76:0;16783:1;16774:6;:10;16766:40;;;;-1:-1:-1;;;16766:40:0;;8432:2:1;16766:40:0;;;8414:21:1;8471:2;8451:18;;;8444:30;-1:-1:-1;;;8490:18:1;;;8483:47;8547:18;;16766:40:0;8230:341:1;16766:40:0;16848:16;16867:17;:15;:17::i;:::-;16848:36;;16958:53;16980:6;16958:53;;;;;;;;;;;;;-1:-1:-1;;;16958:53:0;;;:9;:17;16968:6;-1:-1:-1;;;;;16958:17:0;-1:-1:-1;;;;;16958:17:0;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;-1:-1:-1;;;;;16938:17:0;;;;;;;:9;:17;;;;;;:73;;;;17091:20;;;;;;;:32;;17116:6;17091:24;:32::i;:::-;-1:-1:-1;;;;;17068:20:0;;;;;;:9;:20;;;;;:55;17178:28;17197:8;17178:18;:28::i;:::-;17259:1;17245:10;;:15;;;;;;;:::i;:::-;;;;;;;;17322:9;-1:-1:-1;;;;;17305:35:0;17314:6;-1:-1:-1;;;;;17305:35:0;;17333:6;17305:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;17305:35:0;;;;;;;;-1:-1:-1;17358:4:0;;16537:833;-1:-1:-1;;;;16537:833:0:o;25282:168::-;25332:7;25359:12;;25375:1;25359:17;:83;;25388:54;25429:12;;25389:34;13910:6;25389:19;:17;:19::i;25359:83::-;-1:-1:-1;25379:6:0;;25282:168::o;24075:269::-;24160:54;;;;;;;;;;;-1:-1:-1;;;24160:54:0;;;;;;;;-1:-1:-1;;;;;24160:18:0;;-1:-1:-1;24160:18:0;;;:9;:18;;;;;;;;:54;;24183:6;;24160:22;:54::i;:::-;-1:-1:-1;;;;;24139:18:0;;;;;;:9;:18;;;;;;;;;:75;;;;24240:43;;;;;;;;;;;-1:-1:-1;;;24240:43:0;;;;;;;:12;;:43;;24257:6;;24240:16;:43::i;:::-;24225:12;:58;24299:37;;1361:25:1;;;24325:1:0;;-1:-1:-1;;;;;24299:37:0;;;;;1349:2:1;1334:18;24299:37:0;;;;;;;;24075:269;;:::o;22612:360::-;22724:16;22743:17;:15;:17::i;:::-;22724:36;;22839:8;22827;:20;;22819:50;;;;-1:-1:-1;;;22819:50:0;;8908:2:1;22819:50:0;;;8890:21:1;8947:2;8927:18;;;8920:30;-1:-1:-1;;;8966:18:1;;;8959:47;9023:18;;22819:50:0;8706:341:1;22819:50:0;22951:12;;22919:45;;;9254:25:1;;;9310:2;9295:18;;9288:34;;;9338:18;;;9331:34;;;;22919:45:0;;;;;;9242:2:1;22919:45:0;;;22667:305;22612:360;:::o;7682:471::-;7740:7;7985:1;7990;7985:6;7981:47;;-1:-1:-1;8015:1:0;8008:8;;7981:47;8040:9;8052:5;8056:1;8052;:5;:::i;:::-;8040:17;-1:-1:-1;8085:1:0;8076:5;8080:1;8040:17;8076:5;:::i;:::-;:10;8068:56;;;;-1:-1:-1;;;8068:56:0;;9973:2:1;8068:56:0;;;9955:21:1;10012:2;9992:18;;;9985:30;10051:34;10031:18;;;10024:62;-1:-1:-1;;;10102:18:1;;;10095:31;10143:19;;8068:56:0;9771:397:1;8629:132:0;8687:7;8714:39;8718:1;8721;8714:39;;;;;;;;;;;;;;;;;:3;:39::i;24411:503::-;-1:-1:-1;;;;;24499:23:0;;24485:11;24499:23;;;:9;:23;;;;;;24543:5;24537:11;;24533:374;;;24603:16;24622:17;:15;:17::i;:::-;24603:36;;24686:24;24692:12;24706:3;24686:5;:24::i;:::-;24762:21;;1361:25:1;;;24762:21:0;;1349:2:1;1334:18;24762:21:0;;;;;;;24841:54;24853:8;24863:17;:15;:17::i;:::-;24882:12;;24841:54;;;9254:25:1;;;9310:2;9295:18;;9288:34;;;;9338:18;;;9331:34;9242:2;9227:18;24841:54:0;;;;;;;24550:357;24474:440;24411:503;:::o;19579:705::-;19747:32;;-1:-1:-1;;;19747:32:0;;19768:10;19747:32;;;3747:51:1;19658:7:0;;;;-1:-1:-1;;;;;19747:10:0;:20;;;;3720:18:1;;19747:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19720:59;;19860:1;19841:16;:20;:50;;;;;19875:16;19865:6;:26;;19841:50;19833:83;;;;-1:-1:-1;;;19833:83:0;;10375:2:1;19833:83:0;;;10357:21:1;10414:2;10394:18;;;10387:30;-1:-1:-1;;;10433:18:1;;;10426:50;10493:18;;19833:83:0;10173:344:1;19833:83:0;19964:16;19983:17;:15;:17::i;:::-;19964:36;;20046:24;20073:19;:17;:19::i;:::-;20046:46;;20135:16;20154:19;20166:6;20154:11;:19::i;:::-;20135:38;;20220:56;20228:9;20239:8;20249:16;20267:8;20220:7;:56::i;:::-;20213:63;19579:705;-1:-1:-1;;;;;;;19579:705:0:o;20381:1156::-;20470:7;20512:1;20498:11;:15;:51;;;;-1:-1:-1;;;;;;20517:17:0;;;;;;:9;:17;;;;;;:32;-1:-1:-1;20517:32:0;20498:51;20490:60;;;;;;-1:-1:-1;;;;;20569:20:0;;;;;;:47;;-1:-1:-1;;;;;;20593:23:0;;;;20569:47;20561:56;;;;;;20673:16;20692:17;:15;:17::i;:::-;20673:36;;20779:20;20802:44;14487:5;20802:24;20818:7;;20802:11;:15;;:24;;;;:::i;:44::-;20779:67;;20893:29;20925:23;20935:12;20925:9;:23::i;:::-;20893:55;;21000:26;21006:6;21014:11;21000:5;:26::i;:::-;21095:53;;-1:-1:-1;;;21095:53:0;;-1:-1:-1;;;;;6174:32:1;;;21095:53:0;;;6156:51:1;6223:18;;;6216:34;;;21095:10:0;:19;;;;6129:18:1;;21095:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21073:131;;;;-1:-1:-1;;;21073:131:0;;10724:2:1;21073:131:0;;;10706:21:1;10763:2;10743:18;;;10736:30;10802:29;10782:18;;;10775:57;10849:18;;21073:131:0;10522:351:1;21073:131:0;21249:28;21268:8;21249:18;:28::i;:::-;21330:1;21316:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;21380:52:0;;;-1:-1:-1;;;;;11098:32:1;;11080:51;;11162:2;11147:18;;11140:34;;;11190:18;;;11183:34;;;21380:52:0;;11068:2:1;11053:18;21380:52:0;;;;;;;21508:21;20381:1156;-1:-1:-1;;;;;;20381:1156:0:o;6328:181::-;6386:7;;6418:5;6422:1;6418;:5;:::i;:::-;6406:17;;6447:1;6442;:6;;6434:46;;;;-1:-1:-1;;;6434:46:0;;11430:2:1;6434:46:0;;;11412:21:1;11469:2;11449:18;;;11442:30;11508:29;11488:18;;;11481:57;11555:18;;6434:46:0;11228:351:1;9257:278:0;9343:7;9378:12;9371:5;9363:28;;;;-1:-1:-1;;;9363:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9402:9:0;9414:5;9418:1;9414;:5;:::i;23069:457::-;23131:7;23151:17;23171:19;:17;:19::i;:::-;23223:65;;-1:-1:-1;;;23223:65:0;;23247:10;23223:65;;;11824:34:1;23267:4:0;11874:18:1;;;11867:43;11926:18;;;11919:34;;;23151:39:0;;-1:-1:-1;23223:10:0;-1:-1:-1;;;;;23223:23:0;;;;11759:18:1;;23223:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23201:136;;;;-1:-1:-1;;;23201:136:0;;12166:2:1;23201:136:0;;;12148:21:1;12205:2;12185:18;;;12178:30;-1:-1:-1;;;12224:18:1;;;12217:51;12285:18;;23201:136:0;11964:345:1;23201:136:0;23348:16;23367:19;:17;:19::i;:::-;23348:38;;23430:9;23419:8;:20;23397:83;;;;-1:-1:-1;;;23397:83:0;;12516:2:1;23397:83:0;;;12498:21:1;12555:2;12535:18;;;12528:30;-1:-1:-1;;;12574:18:1;;;12567:43;12627:18;;23397:83:0;12314:337:1;23397:83:0;23498:20;23509:9;23498:8;:20;:::i;:::-;23491:27;23069:457;-1:-1:-1;;;;23069:457:0:o;21601:921::-;21711:7;21828:25;21856:12;;21872:1;21856:17;:102;;21914:44;21945:12;21914:26;21931:8;21914:12;;:16;;:26;;;;:::i;:44::-;21856:102;;;21889:8;21856:102;21828:130;;22060:20;22083:50;14487:5;22083:30;22105:7;;22083:17;:21;;:30;;;;:::i;:50::-;22060:73;;22177:1;22162:12;:16;22154:40;;;;-1:-1:-1;;;22154:40:0;;12858:2:1;22154:40:0;;;12840:21:1;12897:2;12877:18;;;12870:30;-1:-1:-1;;;12916:18:1;;;12909:41;12967:18;;22154:40:0;12656:335:1;22154:40:0;22241:30;22247:9;22258:12;22241:5;:30::i;:::-;22318:28;22337:8;22318:18;:28::i;:::-;22399:1;22385:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;22453:31:0;;;-1:-1:-1;;;;;6174:32:1;;6156:51;;6238:2;6223:18;;6216:34;;;22453:31:0;;6129:18:1;22453:31:0;;;;;;;22502:12;21601:921;-1:-1:-1;;;;;;21601:921:0:o;23588:423::-;-1:-1:-1;;;;;23733:16:0;;;;;;:6;:16;;;;;;;;:21;;23729:105;;-1:-1:-1;;;;;23770:16:0;;;;;;:6;:16;;;;;:20;;-1:-1:-1;;23770:20:0;23789:1;23770:20;;;;;;23805:12;:17;;23789:1;;23805:12;;:17;;23789:1;;23805:17;:::i;:::-;;;;-1:-1:-1;;23729:105:0;-1:-1:-1;;;;;23868:19:0;;;;;;:9;:19;;;;;;:31;;23892:6;23868:23;:31::i;:::-;-1:-1:-1;;;;;23846:19:0;;;;;;:9;:19;;;;;:53;23925:12;;:24;;23942:6;23925:16;:24::i;:::-;23910:12;:39;23965:38;;1361:25:1;;;-1:-1:-1;;;;;23965:38:0;;;23982:1;;23965:38;;1349:2:1;1334:18;23965:38:0;1215:177:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:261::-;1470:6;1523:2;1511:9;1502:7;1498:23;1494:32;1491:52;;;1539:1;1536;1529:12;1491:52;1578:9;1565:23;1597:31;1622:5;1597:31;:::i;1915:456::-;1992:6;2000;2008;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;2116:9;2103:23;2135:31;2160:5;2135:31;:::i;:::-;2185:5;-1:-1:-1;2242:2:1;2227:18;;2214:32;2255:33;2214:32;2255:33;:::i;:::-;1915:456;;2307:7;;-1:-1:-1;;;2361:2:1;2346:18;;;;2333:32;;1915:456::o;2565:118::-;2651:5;2644:13;2637:21;2630:5;2627:32;2617:60;;2673:1;2670;2663:12;2688:241;2744:6;2797:2;2785:9;2776:7;2772:23;2768:32;2765:52;;;2813:1;2810;2803:12;2765:52;2852:9;2839:23;2871:28;2893:5;2871:28;:::i;2934:180::-;2993:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;-1:-1:-1;3085:23:1;;2934:180;-1:-1:-1;2934:180:1:o;3809:315::-;3877:6;3885;3938:2;3926:9;3917:7;3913:23;3909:32;3906:52;;;3954:1;3951;3944:12;3906:52;3990:9;3977:23;3967:33;;4050:2;4039:9;4035:18;4022:32;4063:31;4088:5;4063:31;:::i;:::-;4113:5;4103:15;;;3809:315;;;;;:::o;4337:388::-;4405:6;4413;4466:2;4454:9;4445:7;4441:23;4437:32;4434:52;;;4482:1;4479;4472:12;4434:52;4521:9;4508:23;4540:31;4565:5;4540:31;:::i;:::-;4590:5;-1:-1:-1;4647:2:1;4632:18;;4619:32;4660:33;4619:32;4660:33;:::i;4730:356::-;4932:2;4914:21;;;4951:18;;;4944:30;5010:34;5005:2;4990:18;;4983:62;5077:2;5062:18;;4730:356::o;5793:184::-;5863:6;5916:2;5904:9;5895:7;5891:23;5887:32;5884:52;;;5932:1;5929;5922:12;5884:52;-1:-1:-1;5955:16:1;;5793:184;-1:-1:-1;5793:184:1:o;6261:245::-;6328:6;6381:2;6369:9;6360:7;6356:23;6352:32;6349:52;;;6397:1;6394;6387:12;6349:52;6429:9;6423:16;6448:28;6470:5;6448:28;:::i;6511:355::-;6713:2;6695:21;;;6752:2;6732:18;;;6725:30;6791:33;6786:2;6771:18;;6764:61;6857:2;6842:18;;6511:355::o;7620:127::-;7681:10;7676:3;7672:20;7669:1;7662:31;7712:4;7709:1;7702:15;7736:4;7733:1;7726:15;7752:128;7819:9;;;7840:11;;;7837:37;;;7854:18;;:::i;8576:125::-;8641:9;;;8662:10;;;8659:36;;;8675:18;;:::i;9376:168::-;9449:9;;;9480;;9497:15;;;9491:22;;9477:37;9467:71;;9518:18;;:::i;9549:217::-;9589:1;9615;9605:132;;9659:10;9654:3;9650:20;9647:1;9640:31;9694:4;9691:1;9684:15;9722:4;9719:1;9712:15;9605:132;-1:-1:-1;9751:9:1;;9549:217::o
Swarm Source
ipfs://63cd15a8252d3f2c6b254ecbda3a9ab47d564f8e317008c62112fb1cc57ac7d7
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.