Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 508 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 21522321 | 3 days ago | IN | 0 ETH | 0.00150251 | ||||
Redeem | 21499391 | 6 days ago | IN | 0 ETH | 0.00052439 | ||||
Redeem | 21412056 | 19 days ago | IN | 0 ETH | 0.00131239 | ||||
Redeem | 21406740 | 19 days ago | IN | 0 ETH | 0.00051037 | ||||
Redeem | 21390941 | 21 days ago | IN | 0 ETH | 0.00113175 | ||||
Redeem | 21383979 | 22 days ago | IN | 0 ETH | 0.00138301 | ||||
Mint | 21378658 | 23 days ago | IN | 0 ETH | 0.00150621 | ||||
Mint | 21369679 | 24 days ago | IN | 0 ETH | 0.0016501 | ||||
Redeem | 21354784 | 27 days ago | IN | 0 ETH | 0.00081964 | ||||
Mint | 21353351 | 27 days ago | IN | 0 ETH | 0.001604 | ||||
Redeem | 21352537 | 27 days ago | IN | 0 ETH | 0.00110985 | ||||
Redeem | 21352528 | 27 days ago | IN | 0 ETH | 0.00112503 | ||||
Redeem | 21344490 | 28 days ago | IN | 0 ETH | 0.00352198 | ||||
Mint | 21342511 | 28 days ago | IN | 0 ETH | 0.00298056 | ||||
Mint | 21332833 | 30 days ago | IN | 0 ETH | 0.00234915 | ||||
Mint | 21327206 | 30 days ago | IN | 0 ETH | 0.00236558 | ||||
Redeem | 21312038 | 32 days ago | IN | 0 ETH | 0.00157181 | ||||
Redeem | 21305618 | 33 days ago | IN | 0 ETH | 0.00071389 | ||||
Redeem | 21266087 | 39 days ago | IN | 0 ETH | 0.00221895 | ||||
Mint | 21196279 | 49 days ago | IN | 0 ETH | 0.00172149 | ||||
Redeem | 21188269 | 50 days ago | IN | 0 ETH | 0.00263898 | ||||
Redeem | 21181124 | 51 days ago | IN | 0 ETH | 0.00616528 | ||||
Redeem | 21179357 | 51 days ago | IN | 0 ETH | 0.0083983 | ||||
Redeem | 21159348 | 54 days ago | IN | 0 ETH | 0.00273267 | ||||
Mint | 21153924 | 55 days ago | IN | 0 ETH | 0.00187574 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StakedPepeToken
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-03 */ /* SPDX-License-Identifier: MIT A Bankteller Production Pepe Stake Copyright 2023 */ /* Pepe Stake - decentralized community staking for Pepe - A store of value backed by PEPE that only goes up in value - Mint stPEPE with PEPE ERC20( 0x6982508145454ce325ddbe47a25d4ec3d2311933 ) - 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 - Redeem stPEPE for PEPE anytime Only at https://pepestake.com For more DeFi from BT - ELEPHANT BEP20( 0xE283D0e3B8c102BAdF5E8166B73E02D96d92F688 ) - 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 { require(!_paused, "Ownable: contract is paused"); 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 StakedPepeToken is IERC20, Ownable { using SafeMath for uint256; // token data string private constant _name = "Staked Pepe"; string private constant _symbol = "stPEPE"; 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; PEPE underlying = IERC20( address(0x6982508145454Ce325dDbE47a25d4ec3d2311933) ); } /** 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 stPEPE tokens for sender by depositing PEPE into the contract Requirements: Approval from the PEPE prior to purchase @param numTokens number of PEPE tokens to mint stPEPE with @return tokensMinted number of stPEPE tokens minted */ function mint(uint256 numTokens) external nonReentrant returns (uint256) { _checkGarbageCollector(address(this)); return _mintWithBacking(numTokens, msg.sender); } /** Mint stPEPE tokens for `recipient` by depositing PEPE into the contract Requirements: Approval from the PEPE prior to purchase @param numTokens number of PEPE tokens to mint stPEPE with @param recipient Account to receive minted stPEPE tokens @return tokensMinted number of stPEPE tokens minted */ function mintTo(uint256 numTokens, address recipient) external nonReentrant returns (uint256) { _checkGarbageCollector(address(this)); return _mintWithBacking(numTokens, recipient); } /** Burns sender's stPEPE tokens and redeems their value in PEPE @param tokenAmount number of stPEPE tokens to redeem, must be greater than 0 */ function redeem(uint256 tokenAmount) external nonReentrant returns (uint256) { return _sell(msg.sender, tokenAmount, msg.sender); } /** Burns sender's stPEPE tokens and redeems their value in PEPE for `recipient` @param tokenAmount number of stPEPE tokens to redeem, must be greater than 0 @param recipient Recipient of PEPE transfer, must not be address(0) */ function reedemTo(uint256 tokenAmount, address recipient) external nonReentrant returns (uint256) { return _sell(msg.sender, tokenAmount, recipient); } /** Allows a user to remove their holdings from the supply DOES NOT REDEEM UNDERLYING ASSET FOR USER @param amount number of stPEPE 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 Burned(msg.sender, amount); } /** Stake tokens and deposits stPEPE in sender's address; must have prior approval for PEPE */ 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 stPEPE tokens and deposits PEPE tokens into recipient'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 Tto create new stPEPE */ 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 stPEPE 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 are no native tokens in the 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); } } /** Returns the balance of the underlying asset */ function underlyingBalance() public view returns (uint256) { return underlying.balanceOf(address(this)); } /** Returns the price of stPEPE in PEPE 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 stPEPE given numtokens of PEPE; 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 PEPE given numtokens of stPEPE **/ function estimateRedeemed(uint256 numTokens) public view returns (uint256) { return amountOut(numTokens.mul(sellFee).div(feeDenominator)); } /** Returns amount of underlying to receive for `numTokens` of stPEPE */ 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(); } /** Remove dust / airdrop tokens sent to the contract; Housekeeper can burn or recieve the coins*/ function housekeeping(IERC20 token, bool burnDust) external { require(address(token) != address(underlying), 'Cannot withdraw underlying asset'); require(address(token) != address(0), 'Zero Address'); uint balance = token.balanceOf(address(this)); require(balance > 0, 'Zero balance'); address destination = (burnDust) ? address(0x000000000000000000000000000000000000dEaD) : msg.sender; token.transfer(destination, balance); emit DustCollected(address(token), destination, balance); } /** Events **/ event PriceChange(uint256 previousPrice, uint256 currentPrice, uint256 totalSupply); event Burned(address from, uint256 amount); event GarbageCollected(uint256 amount); event Redeemed(address seller, uint256 amount, uint256 amountUnderlying); event Minted(address recipient, uint256 amount); event DustCollected(address token, address recipient, uint256 amount); }
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":"amount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DustCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GarbageCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","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":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"bool","name":"burnDust","type":"bool"}],"name":"housekeeping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":"mintTo","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":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"reedemTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"}]
Contract Creation Code
60a0604052620173186008556201731860095534801561001e57600080fd5b506000805460ff191660011781556100333390565b60008054610100600160a81b0319166101006001600160a01b038416021781556001805460ff60a01b19169081905560405192935060ff600160a01b909104161515917f2a04a433f4a9e9958a2e686298f452d15ff8cad4449e4517bf21b843f27ceb019190a26040516001600160a01b038216906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350736982508145454ce325ddbe47a25d4ec3d2311933608052608051611dba61012760003960008181610323015281816107a101528181610845015281816113fd015281816115bd01526117a80152611dba6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a9059cbb116100a2578063db006a7511610071578063db006a751461043f578063dd62ed3e14610452578063ed13b2531461048b578063f2fde38b1461049e57600080fd5b8063a9059cbb146103ff578063b187bd2614610412578063b723b34e14610424578063d348b4091461043757600080fd5b80638da5cb5b116100de5780638da5cb5b146103a157806395d89b41146103b7578063a0712d68146103d9578063a7cb7a80146103ec57600080fd5b806370a082311461035d578063715018a61461038657806375fe9fba1461038e57600080fd5b8063313ce5671161017c5780635a9b0b891161014b5780635a9b0b89146102c857806363d0a1e0146102f85780636b014f831461030b5780636f307dc31461031e57600080fd5b8063313ce5671461028957806340efd24a1461029857806342966c68146102ad57806359356c5c146102c057600080fd5b806318160ddd116101b857806318160ddd146102525780631f02a29c1461025a57806323b872dd1461026d5780632b14ca561461028057600080fd5b806306fdde03146101df578063095ea7b31461021857806313966db51461023b575b600080fd5b60408051808201909152600b81526a5374616b6564205065706560a81b60208201525b60405161020f9190611aad565b60405180910390f35b61022b610226366004611b13565b6104b1565b604051901515815260200161020f565b61024460085481565b60405190815260200161020f565b600454610244565b610244610268366004611b3f565b61051e565b61022b61027b366004611b5c565b610540565b61024460095481565b6040516012815260200161020f565b6102ab6102a6366004611bab565b610618565b005b6102ab6102bb366004611bc8565b610693565b610244610789565b6102d0610819565b604080519586526020860194909452928401919091526060830152608082015260a00161020f565b6102ab610306366004611be1565b610843565b610244610319366004611bc8565b610a8f565b6103457f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020f565b61024461036b366004611b3f565b6001600160a01b031660009081526005602052604090205490565b6102ab610b00565b61024461039c366004611bc8565b610bd9565b60005461010090046001600160a01b0316610345565b60408051808201909152600681526573745045504560d01b6020820152610202565b6102446103e7366004611bc8565b610bf3565b6102446103fa366004611c1a565b610c4e565b61022b61040d366004611b13565b610ca2565b600154600160a01b900460ff1661022b565b610244610432366004611c1a565b610ce1565b610244610d28565b61024461044d366004611bc8565b610d32565b610244610460366004611c3f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b610244610499366004611bc8565b610d71565b6102ab6104ac366004611b3f565b610d92565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061050c9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b03811660009081526005602052604081205461051890610bd9565b6000805460ff16600119016105705760405162461bcd60e51b815260040161056790611c6d565b60405180910390fd5b6000805460ff191660021781556040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03881684526007815282842033855290529120546105d3918490610e8d565b6001600160a01b0385166000908152600760209081526040808320338452909152902055610602848484610ec7565b90506000805460ff191660011790559392505050565b6000546001600160a01b036101009091041633146106485760405162461bcd60e51b815260040161056790611ca4565b604051811515907f2a04a433f4a9e9958a2e686298f452d15ff8cad4449e4517bf21b843f27ceb0190600090a260018054911515600160a01b0260ff60a01b19909216919091179055565b60005460ff16600119016106b95760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002178155338152600560205260409020548181108015906106e35750600081115b61071f5760405162461bcd60e51b815260206004820152600d60248201526c5a65726f20486f6c64696e677360981b6044820152606401610567565b60006107296110a1565b905061073533846110d4565b61073e816111c3565b60408051338152602081018590527f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7910160405180910390a150506000805460ff1916600117905550565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108149190611cd9565b905090565b6002546003546000808061082b610789565b9250600454915061083a6110a1565b90509091929394565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036108c45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420776974686472617720756e6465726c79696e672061737365746044820152606401610567565b6001600160a01b0382166109095760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610567565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109749190611cd9565b9050600081116109b55760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2062616c616e636560a01b6044820152606401610567565b6000826109c257336109c6565b61dead5b60405163a9059cbb60e01b81526001600160a01b038083166004830152602482018590529192509085169063a9059cbb906044016020604051808303816000875af1158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d9190611cf2565b50604080516001600160a01b038087168252831660208201529081018390527f4b3832ed948bc80ab35e8cab3a5923e6e1a57696d02c846a8b6f54d39bf9acf09060600160405180910390a150505050565b600080610a9a610789565b9050600454600014610add57610ad8620186a0610acc600854610ad285610acc8960045461125a90919063ffffffff16565b906112dc565b9061125a565b610af9565b610af9620186a0610acc6008548661125a90919063ffffffff16565b9392505050565b6000546001600160a01b03610100909104163314610b305760405162461bcd60e51b815260040161056790611ca4565b600154600160a01b900460ff1615610b8a5760405162461bcd60e51b815260206004820152601b60248201527f4f776e61626c653a20636f6e74726163742069732070617573656400000000006044820152606401610567565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000610518670de0b6b3a7640000610acc84610ad26110a1565b6000805460ff1660011901610c1a5760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c303061131e565b610c3a82336113db565b90506000805460ff19166001179055919050565b6000805460ff1660011901610c755760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c8d3384846114f9565b90506000805460ff1916600117905592915050565b6000805460ff1660011901610cc95760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c8d338484610ec7565b6000805460ff1660011901610d085760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610d1e3061131e565b610c8d83836113db565b60006108146110a1565b6000805460ff1660011901610d595760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c3a3383816114f9565b600061051861039c620186a0610acc6009548661125a90919063ffffffff16565b6000546001600160a01b03610100909104163314610dc25760405162461bcd60e51b815260040161056790611ca4565b6001600160a01b038116610e275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610567565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008184841115610eb15760405162461bcd60e51b81526004016105679190611aad565b506000610ebe8486611d25565b95945050505050565b60006001600160a01b03831615801590610ee957506001600160a01b03841615155b610f285760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220546f205a65726f60801b6044820152606401610567565b60008211610f6c5760405162461bcd60e51b81526020600482015260116024820152705472616e7366657220416d74205a65726f60781b6044820152606401610567565b6000610f766110a1565b9050610fde8360405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b81525060056000896001600160a01b03166001600160a01b0316815260200190815260200160002054610e8d9092919063ffffffff16565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461100d90846116eb565b6001600160a01b03851660009081526005602052604090205561102f816111c3565b6001600360008282546110429190611d38565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161108e91815260200190565b60405180910390a3506001949350505050565b60006004546000146110c757610814600454610acc670de0b6b3a7640000610ad2610789565b50670de0b6b3a764000090565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038516600090815260059091529190912054611126918390610e8d565b6001600160a01b038316600090815260056020908152604091829020929092558051808201909152600f81526e4e6567617469766520537570706c7960881b9181019190915260045461117a918390610e8d565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60006111cd6110a1565b9050818110156112135760405162461bcd60e51b8152602060048201526011602482015270141c9a58d94810d85b9b9bdd0811985b1b607a1b6044820152606401610567565b600454604080518481526020810184905280820192909252517f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed19181900360600190a15050565b60008260000361126c57506000610518565b60006112788385611d4b565b9050826112858583611d62565b14610af95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610567565b6000610af983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061174a565b6001600160a01b0381166000908152600560205260409020546103e88111156113d757600061134b6110a1565b905061135783836110d4565b6040518281527f8a1c945864c85a9dee42b8734075761f7a16095a8384ab751f2417c5767e227e9060200160405180910390a17f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed1816113b46110a1565b6004546040805193845260208401929092529082015260600160405180910390a1505b5050565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190611cd9565b905060008111801561147a5750808411155b6114bd5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610567565b60006114c76110a1565b905060006114d3610789565b905060006114e087611778565b90506114ee868284866118be565b979650505050505050565b6000808311801561152257506001600160a01b0384166000908152600560205260409020548311155b61152b57600080fd5b6001600160a01b0384161580159061154b57506001600160a01b03821615155b61155457600080fd5b600061155e6110a1565b9050600061157e620186a0610acc6009548861125a90919063ffffffff16565b9050600061158b82610bd9565b905061159787876110d4565b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a9190611cf2565b6116765760405162461bcd60e51b815260206004820152601b60248201527f556e6465726c79696e67205472616e73666572204661696c75726500000000006044820152606401610567565b61167f836111c3565b6001600360008282546116929190611d38565b9091555050604080516001600160a01b0389168152602081018890529081018290527ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2629060600160405180910390a19695505050505050565b6000806116f88385611d38565b905083811015610af95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610567565b6000818361176b5760405162461bcd60e51b81526004016105679190611aad565b506000610ebe8486611d62565b600080611783610789565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156117f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181d9190611cf2565b6118615760405162461bcd60e51b81526020600482015260156024820152744661696c757265205472616e736665722046726f6d60581b6044820152606401610567565b600061186b610789565b90508181116118ac5760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b6044820152606401610567565b6118b68282611d25565b949350505050565b6000806004546000146118e9576118e484610acc8760045461125a90919063ffffffff16565b6118eb565b845b9050600061190b620186a0610acc6008548561125a90919063ffffffff16565b90506000811161194b5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b6044820152606401610567565b61195587826119c2565b61195e846111c3565b6001600360008282546119719190611d38565b9091555050604080516001600160a01b0389168152602081018390527f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe910160405180910390a19695505050505050565b6001600160a01b03821660009081526006602052604081205460ff169003611a23576001600160a01b0382166000908152600660205260408120805460ff191660019081179091556002805491929091611a1d908490611d38565b90915550505b6001600160a01b038216600090815260056020526040902054611a4690826116eb565b6001600160a01b038316600090815260056020526040902055600454611a6c90826116eb565b6004556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111b7565b600060208083528351808285015260005b81811015611ada57858101830151858201604001528201611abe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611b1057600080fd5b50565b60008060408385031215611b2657600080fd5b8235611b3181611afb565b946020939093013593505050565b600060208284031215611b5157600080fd5b8135610af981611afb565b600080600060608486031215611b7157600080fd5b8335611b7c81611afb565b92506020840135611b8c81611afb565b929592945050506040919091013590565b8015158114611b1057600080fd5b600060208284031215611bbd57600080fd5b8135610af981611b9d565b600060208284031215611bda57600080fd5b5035919050565b60008060408385031215611bf457600080fd5b8235611bff81611afb565b91506020830135611c0f81611b9d565b809150509250929050565b60008060408385031215611c2d57600080fd5b823591506020830135611c0f81611afb565b60008060408385031215611c5257600080fd5b8235611c5d81611afb565b91506020830135611c0f81611afb565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611ceb57600080fd5b5051919050565b600060208284031215611d0457600080fd5b8151610af981611b9d565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051857610518611d0f565b8082018082111561051857610518611d0f565b808202811582820484141761051857610518611d0f565b600082611d7f57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122073b78a8e7318c2b293b07ad1933bdc69aa48ebd17dd2bf1290c080e224265d8f64736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a9059cbb116100a2578063db006a7511610071578063db006a751461043f578063dd62ed3e14610452578063ed13b2531461048b578063f2fde38b1461049e57600080fd5b8063a9059cbb146103ff578063b187bd2614610412578063b723b34e14610424578063d348b4091461043757600080fd5b80638da5cb5b116100de5780638da5cb5b146103a157806395d89b41146103b7578063a0712d68146103d9578063a7cb7a80146103ec57600080fd5b806370a082311461035d578063715018a61461038657806375fe9fba1461038e57600080fd5b8063313ce5671161017c5780635a9b0b891161014b5780635a9b0b89146102c857806363d0a1e0146102f85780636b014f831461030b5780636f307dc31461031e57600080fd5b8063313ce5671461028957806340efd24a1461029857806342966c68146102ad57806359356c5c146102c057600080fd5b806318160ddd116101b857806318160ddd146102525780631f02a29c1461025a57806323b872dd1461026d5780632b14ca561461028057600080fd5b806306fdde03146101df578063095ea7b31461021857806313966db51461023b575b600080fd5b60408051808201909152600b81526a5374616b6564205065706560a81b60208201525b60405161020f9190611aad565b60405180910390f35b61022b610226366004611b13565b6104b1565b604051901515815260200161020f565b61024460085481565b60405190815260200161020f565b600454610244565b610244610268366004611b3f565b61051e565b61022b61027b366004611b5c565b610540565b61024460095481565b6040516012815260200161020f565b6102ab6102a6366004611bab565b610618565b005b6102ab6102bb366004611bc8565b610693565b610244610789565b6102d0610819565b604080519586526020860194909452928401919091526060830152608082015260a00161020f565b6102ab610306366004611be1565b610843565b610244610319366004611bc8565b610a8f565b6103457f0000000000000000000000006982508145454ce325ddbe47a25d4ec3d231193381565b6040516001600160a01b03909116815260200161020f565b61024461036b366004611b3f565b6001600160a01b031660009081526005602052604090205490565b6102ab610b00565b61024461039c366004611bc8565b610bd9565b60005461010090046001600160a01b0316610345565b60408051808201909152600681526573745045504560d01b6020820152610202565b6102446103e7366004611bc8565b610bf3565b6102446103fa366004611c1a565b610c4e565b61022b61040d366004611b13565b610ca2565b600154600160a01b900460ff1661022b565b610244610432366004611c1a565b610ce1565b610244610d28565b61024461044d366004611bc8565b610d32565b610244610460366004611c3f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b610244610499366004611bc8565b610d71565b6102ab6104ac366004611b3f565b610d92565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061050c9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b03811660009081526005602052604081205461051890610bd9565b6000805460ff16600119016105705760405162461bcd60e51b815260040161056790611c6d565b60405180910390fd5b6000805460ff191660021781556040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03881684526007815282842033855290529120546105d3918490610e8d565b6001600160a01b0385166000908152600760209081526040808320338452909152902055610602848484610ec7565b90506000805460ff191660011790559392505050565b6000546001600160a01b036101009091041633146106485760405162461bcd60e51b815260040161056790611ca4565b604051811515907f2a04a433f4a9e9958a2e686298f452d15ff8cad4449e4517bf21b843f27ceb0190600090a260018054911515600160a01b0260ff60a01b19909216919091179055565b60005460ff16600119016106b95760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002178155338152600560205260409020548181108015906106e35750600081115b61071f5760405162461bcd60e51b815260206004820152600d60248201526c5a65726f20486f6c64696e677360981b6044820152606401610567565b60006107296110a1565b905061073533846110d4565b61073e816111c3565b60408051338152602081018590527f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7910160405180910390a150506000805460ff1916600117905550565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000006982508145454ce325ddbe47a25d4ec3d23119336001600160a01b0316906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108149190611cd9565b905090565b6002546003546000808061082b610789565b9250600454915061083a6110a1565b90509091929394565b7f0000000000000000000000006982508145454ce325ddbe47a25d4ec3d23119336001600160a01b0316826001600160a01b0316036108c45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420776974686472617720756e6465726c79696e672061737365746044820152606401610567565b6001600160a01b0382166109095760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610567565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109749190611cd9565b9050600081116109b55760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2062616c616e636560a01b6044820152606401610567565b6000826109c257336109c6565b61dead5b60405163a9059cbb60e01b81526001600160a01b038083166004830152602482018590529192509085169063a9059cbb906044016020604051808303816000875af1158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d9190611cf2565b50604080516001600160a01b038087168252831660208201529081018390527f4b3832ed948bc80ab35e8cab3a5923e6e1a57696d02c846a8b6f54d39bf9acf09060600160405180910390a150505050565b600080610a9a610789565b9050600454600014610add57610ad8620186a0610acc600854610ad285610acc8960045461125a90919063ffffffff16565b906112dc565b9061125a565b610af9565b610af9620186a0610acc6008548661125a90919063ffffffff16565b9392505050565b6000546001600160a01b03610100909104163314610b305760405162461bcd60e51b815260040161056790611ca4565b600154600160a01b900460ff1615610b8a5760405162461bcd60e51b815260206004820152601b60248201527f4f776e61626c653a20636f6e74726163742069732070617573656400000000006044820152606401610567565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000610518670de0b6b3a7640000610acc84610ad26110a1565b6000805460ff1660011901610c1a5760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c303061131e565b610c3a82336113db565b90506000805460ff19166001179055919050565b6000805460ff1660011901610c755760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c8d3384846114f9565b90506000805460ff1916600117905592915050565b6000805460ff1660011901610cc95760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c8d338484610ec7565b6000805460ff1660011901610d085760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610d1e3061131e565b610c8d83836113db565b60006108146110a1565b6000805460ff1660011901610d595760405162461bcd60e51b815260040161056790611c6d565b6000805460ff19166002179055610c3a3383816114f9565b600061051861039c620186a0610acc6009548661125a90919063ffffffff16565b6000546001600160a01b03610100909104163314610dc25760405162461bcd60e51b815260040161056790611ca4565b6001600160a01b038116610e275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610567565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008184841115610eb15760405162461bcd60e51b81526004016105679190611aad565b506000610ebe8486611d25565b95945050505050565b60006001600160a01b03831615801590610ee957506001600160a01b03841615155b610f285760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220546f205a65726f60801b6044820152606401610567565b60008211610f6c5760405162461bcd60e51b81526020600482015260116024820152705472616e7366657220416d74205a65726f60781b6044820152606401610567565b6000610f766110a1565b9050610fde8360405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b81525060056000896001600160a01b03166001600160a01b0316815260200190815260200160002054610e8d9092919063ffffffff16565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461100d90846116eb565b6001600160a01b03851660009081526005602052604090205561102f816111c3565b6001600360008282546110429190611d38565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161108e91815260200190565b60405180910390a3506001949350505050565b60006004546000146110c757610814600454610acc670de0b6b3a7640000610ad2610789565b50670de0b6b3a764000090565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038516600090815260059091529190912054611126918390610e8d565b6001600160a01b038316600090815260056020908152604091829020929092558051808201909152600f81526e4e6567617469766520537570706c7960881b9181019190915260045461117a918390610e8d565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60006111cd6110a1565b9050818110156112135760405162461bcd60e51b8152602060048201526011602482015270141c9a58d94810d85b9b9bdd0811985b1b607a1b6044820152606401610567565b600454604080518481526020810184905280820192909252517f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed19181900360600190a15050565b60008260000361126c57506000610518565b60006112788385611d4b565b9050826112858583611d62565b14610af95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610567565b6000610af983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061174a565b6001600160a01b0381166000908152600560205260409020546103e88111156113d757600061134b6110a1565b905061135783836110d4565b6040518281527f8a1c945864c85a9dee42b8734075761f7a16095a8384ab751f2417c5767e227e9060200160405180910390a17f046aa811b2923fd55b4ca06375b4045117d4584c66fc40880a8ab8ee32d88ed1816113b46110a1565b6004546040805193845260208401929092529082015260600160405180910390a1505b5050565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f0000000000000000000000006982508145454ce325ddbe47a25d4ec3d231193316906370a0823190602401602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190611cd9565b905060008111801561147a5750808411155b6114bd5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610567565b60006114c76110a1565b905060006114d3610789565b905060006114e087611778565b90506114ee868284866118be565b979650505050505050565b6000808311801561152257506001600160a01b0384166000908152600560205260409020548311155b61152b57600080fd5b6001600160a01b0384161580159061154b57506001600160a01b03821615155b61155457600080fd5b600061155e6110a1565b9050600061157e620186a0610acc6009548861125a90919063ffffffff16565b9050600061158b82610bd9565b905061159787876110d4565b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390527f0000000000000000000000006982508145454ce325ddbe47a25d4ec3d2311933169063a9059cbb906044016020604051808303816000875af1158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a9190611cf2565b6116765760405162461bcd60e51b815260206004820152601b60248201527f556e6465726c79696e67205472616e73666572204661696c75726500000000006044820152606401610567565b61167f836111c3565b6001600360008282546116929190611d38565b9091555050604080516001600160a01b0389168152602081018890529081018290527ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2629060600160405180910390a19695505050505050565b6000806116f88385611d38565b905083811015610af95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610567565b6000818361176b5760405162461bcd60e51b81526004016105679190611aad565b506000610ebe8486611d62565b600080611783610789565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f0000000000000000000000006982508145454ce325ddbe47a25d4ec3d23119336001600160a01b0316906323b872dd906064016020604051808303816000875af11580156117f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181d9190611cf2565b6118615760405162461bcd60e51b81526020600482015260156024820152744661696c757265205472616e736665722046726f6d60581b6044820152606401610567565b600061186b610789565b90508181116118ac5760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b6044820152606401610567565b6118b68282611d25565b949350505050565b6000806004546000146118e9576118e484610acc8760045461125a90919063ffffffff16565b6118eb565b845b9050600061190b620186a0610acc6008548561125a90919063ffffffff16565b90506000811161194b5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b6044820152606401610567565b61195587826119c2565b61195e846111c3565b6001600360008282546119719190611d38565b9091555050604080516001600160a01b0389168152602081018390527f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe910160405180910390a19695505050505050565b6001600160a01b03821660009081526006602052604081205460ff169003611a23576001600160a01b0382166000908152600660205260408120805460ff191660019081179091556002805491929091611a1d908490611d38565b90915550505b6001600160a01b038216600090815260056020526040902054611a4690826116eb565b6001600160a01b038316600090815260056020526040902055600454611a6c90826116eb565b6004556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111b7565b600060208083528351808285015260005b81811015611ada57858101830151858201604001528201611abe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611b1057600080fd5b50565b60008060408385031215611b2657600080fd5b8235611b3181611afb565b946020939093013593505050565b600060208284031215611b5157600080fd5b8135610af981611afb565b600080600060608486031215611b7157600080fd5b8335611b7c81611afb565b92506020840135611b8c81611afb565b929592945050506040919091013590565b8015158114611b1057600080fd5b600060208284031215611bbd57600080fd5b8135610af981611b9d565b600060208284031215611bda57600080fd5b5035919050565b60008060408385031215611bf457600080fd5b8235611bff81611afb565b91506020830135611c0f81611b9d565b809150509250929050565b60008060408385031215611c2d57600080fd5b823591506020830135611c0f81611afb565b60008060408385031215611c5257600080fd5b8235611c5d81611afb565b91506020830135611c0f81611afb565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611ceb57600080fd5b5051919050565b600060208284031215611d0457600080fd5b8151610af981611b9d565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051857610518611d0f565b8082018082111561051857610518611d0f565b808202811582820484141761051857610518611d0f565b600082611d7f57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122073b78a8e7318c2b293b07ad1933bdc69aa48ebd17dd2bf1290c080e224265d8f64736f6c63430008110033
Deployed Bytecode Sourcemap
13881:14908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15559:92;15638:5;;;;;;;;;;;;-1:-1:-1;;;15638:5:0;;;;15559:92;;;;;;;:::i;:::-;;;;;;;;15994:216;;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;15994:216:0;1023:187:1;14593:37:0;;;;;;;;;1361:25:1;;;1349:2;1334:18;14593:37:0;1215:177:1;14996:104:0;15079:12;;14996:104;;27185:127;;;;;;:::i;:::-;;:::i;16457:299::-;;;;;;:::i;:::-;;:::i;14649:37::-;;;;;;15823:92;;;14124:2;2252:36:1;;2240:2;2225:18;15823:92:0;2110:184:1;6088:138:0;;;;;;:::i;:::-;;:::i;:::-;;19718:507;;;;;;:::i;:::-;;:::i;25742:120::-;;;:::i;27362:306::-;;;:::i;:::-;;;;3112:25:1;;;3168:2;3153:18;;3146:34;;;;3196:18;;;3189:34;;;;3254:2;3239:18;;3232:34;3297:3;3282:19;;3275:35;3099:3;3084:19;27362:306:0;2853:463:1;27781:584:0;;;;;;:::i;:::-;;:::i;26370:282::-;;;;;;:::i;:::-;;:::i;14282:34::-;;;;;;;;-1:-1:-1;;;;;3900:32:1;;;3882:51;;3870:2;3855:18;14282:34:0;3722:217:1;15168:121:0;;;;;;:::i;:::-;-1:-1:-1;;;;;15262:18:0;15234:7;15262:18;;;:9;:18;;;;;;;15168:121;5302:207;;;:::i;26983:141::-;;;;;;:::i;:::-;;:::i;4271:79::-;4309:7;4336:6;;;;-1:-1:-1;;;;;4336:6:0;4271:79;;15691:96;15772:7;;;;;;;;;;;;-1:-1:-1;;;15772:7:0;;;;15691:96;;17957:186;;;;;;:::i;:::-;;:::i;19352:165::-;;;;;;:::i;:::-;;:::i;16250:169::-;;;;;;:::i;:::-;;:::i;4414:80::-;4479:7;;-1:-1:-1;;;4479:7:0;;;;4414:80;;18540:206;;;;;;:::i;:::-;;:::i;25946:101::-;;;:::i;18928:145::-;;;;;;:::i;:::-;;:::i;15375:149::-;;;;;;:::i;:::-;-1:-1:-1;;;;;15487:19:0;;;15459:7;15487:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15375:149;26726:154;;;;;;:::i;:::-;;:::i;5664:281::-;;;;;;:::i;:::-;;:::i;15994:216::-;16098:10;16069:4;16086:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16086:32:0;;;;;;;;;;:41;;;16143:37;16069:4;;16086:32;;16143:37;;;;16121:6;1361:25:1;;1349:2;1334:18;;1215:177;16143:37:0;;;;;;;;-1:-1:-1;16198:4:0;15994:216;;;;;:::o;27185:127::-;-1:-1:-1;;;;;27286:17:0;;27249:7;27286:17;;;:9;:17;;;;;;27276:28;;:9;:28::i;16457:299::-;16570:4;2303:7;;:19;:7;-1:-1:-1;;2303:19:0;2295:63;;;;-1:-1:-1;;;2295:63:0;;;;;;;:::i;:::-;;;;;;;;;2436:7;:18;;-1:-1:-1;;2436:18:0;1707:1;2436:18;;;16621:69:::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;16621:69:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;16621:19:0;::::1;::::0;;:11:::1;:19:::0;;;;;16641:10:::1;16621:31:::0;;;;;;;:69:::1;::::0;16657:6;;16621:35:::1;:69::i;:::-;-1:-1:-1::0;;;;;16587:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;16607:10:::1;16587:31:::0;;;;;;;:103;16708:40:::1;16599:6:::0;16730:9;16741:6;16708:13:::1;:40::i;:::-;16701:47;;2615:7:::0;:22;;-1:-1:-1;;2615:22:0;1665:1;2615:22;;;16457:299;;-1:-1:-1;;;16457:299:0:o;6088:138::-;4627:6;;-1:-1:-1;;;;;4627:6:0;;;;;2786:10;4627:22;4619:67;;;;-1:-1:-1;;;4619:67:0;;;;;;;:::i;:::-;6167:24:::1;::::0;;::::1;;::::0;::::1;::::0;;;::::1;6202:7;:16:::0;;;::::1;;-1:-1:-1::0;;;6202:16:0::1;-1:-1:-1::0;;;;6202:16:0;;::::1;::::0;;;::::1;::::0;;6088:138::o;19718:507::-;2303:7;;:19;:7;-1:-1:-1;;2303:19:0;2295:63;;;;-1:-1:-1;;;2295:63:0;;;;;;;:::i;:::-;2436:7;:18;;-1:-1:-1;;2436:18:0;1707:1;2436:18;;;19839:10:::1;19829:21:::0;;:9:::1;:21;::::0;;;;;19869:13;;::::1;::::0;::::1;::::0;:24:::1;;;19892:1;19886:3;:7;19869:24;19861:50;;;::::0;-1:-1:-1;;;19861:50:0;;5788:2:1;19861:50:0::1;::::0;::::1;5770:21:1::0;5827:2;5807:18;;;5800:30;-1:-1:-1;;;5846:18:1;;;5839:43;5899:18;;19861:50:0::1;5586:337:1::0;19861:50:0::1;19956:16;19975:17;:15;:17::i;:::-;19956:36;;20057:25;20063:10;20075:6;20057:5;:25::i;:::-;20125:28;20144:8;20125:18;:28::i;:::-;20191:26;::::0;;20198:10:::1;6102:51:1::0;;6184:2;6169:18;;6162:34;;;20191:26:0::1;::::0;6075:18:1;20191:26:0::1;;;;;;;-1:-1:-1::0;;2615:7:0;:22;;-1:-1:-1;;2615:22:0;1665:1;2615:22;;;-1:-1:-1;19718:507:0:o;25742:120::-;25819:35;;-1:-1:-1;;;25819:35:0;;25848:4;25819:35;;;3882:51:1;25792:7:0;;25819:10;-1:-1:-1;;;;;25819:20:0;;;;3855:18:1;;25819:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25812:42;;25742:120;:::o;27362:306::-;27504:12;;27533:10;;27401:13;;;27573:19;:17;:19::i;:::-;27554:38;;27612:12;;27603:21;;27643:17;:15;:17::i;:::-;27635:25;;27362:306;;;;;:::o;27781:584::-;27886:10;-1:-1:-1;;;;;27860:37:0;27868:5;-1:-1:-1;;;;;27860:37:0;;27852:82;;;;-1:-1:-1;;;27852:82:0;;6598:2:1;27852:82:0;;;6580:21:1;;;6617:18;;;6610:30;6676:34;6656:18;;;6649:62;6728:18;;27852:82:0;6396:356:1;27852:82:0;-1:-1:-1;;;;;27953:28:0;;27945:53;;;;-1:-1:-1;;;27945:53:0;;6959:2:1;27945:53:0;;;6941:21:1;6998:2;6978:18;;;6971:30;-1:-1:-1;;;7017:18:1;;;7010:42;7069:18;;27945:53:0;6757:336:1;27945:53:0;28026:30;;-1:-1:-1;;;28026:30:0;;28050:4;28026:30;;;3882:51:1;28011:12:0;;-1:-1:-1;;;;;28026:15:0;;;;;3855:18:1;;28026:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28011:45;;28085:1;28075:7;:11;28067:36;;;;-1:-1:-1;;;28067:36:0;;7300:2:1;28067:36:0;;;7282:21:1;7339:2;7319:18;;;7312:30;-1:-1:-1;;;7358:18:1;;;7351:42;7410:18;;28067:36:0;7098:336:1;28067:36:0;28124:19;28147:8;28146:77;;28213:10;28146:77;;;28167:42;28146:77;28252:36;;-1:-1:-1;;;28252:36:0;;-1:-1:-1;;;;;6120:32:1;;;28252:36:0;;;6102:51:1;6169:18;;;6162:34;;;28124:99:0;;-1:-1:-1;28252:14:0;;;;;;6075:18:1;;28252:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28306:51:0;;;-1:-1:-1;;;;;7947:15:1;;;7929:34;;7999:15;;7994:2;7979:18;;7972:43;8031:18;;;8024:34;;;28306:51:0;;7879:2:1;7864:18;28306:51:0;;;;;;;27841:524;;27781:584;;:::o;26370:282::-;26434:7;26454:12;26469:19;:17;:19::i;:::-;26454:34;;26506:12;;26522:1;26506:17;:138;;26571:73;14747:5;26571:53;26616:7;;26571:40;26603:7;26571:27;26588:9;26571:12;;:16;;:27;;;;:::i;:::-;:31;;:40::i;:::-;:44;;:53::i;:73::-;26506:138;;;26526:42;14747:5;26526:22;26540:7;;26526:9;:13;;:22;;;;:::i;:42::-;26499:145;26370:282;-1:-1:-1;;;26370:282:0:o;5302:207::-;4627:6;;-1:-1:-1;;;;;4627:6:0;;;;;2786:10;4627:22;4619:67;;;;-1:-1:-1;;;4619:67:0;;;;;;;:::i;:::-;5376:7:::1;::::0;-1:-1:-1;;;5376:7:0;::::1;;;5375:8;5367:48;;;::::0;-1:-1:-1;;;5367:48:0;;8271:2:1;5367:48:0::1;::::0;::::1;8253:21:1::0;8310:2;8290:18;;;8283:30;8349:29;8329:18;;;8322:57;8396:18;;5367:48:0::1;8069:351:1::0;5367:48:0::1;5468:1;5452:6:::0;;5431:40:::1;::::0;5452:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;5452:6:0::1;::::0;5431:40:::1;::::0;5468:1;;5431:40:::1;5499:1;5482:19:::0;;-1:-1:-1;;;;;;5482:19:0::1;::::0;;5302:207::o;26983:141::-;27042:7;27069:47;14170:6;27069:32;27091:9;27069:17;:15;:17::i;17957:186::-;18021:7;2303;;:19;:7;-1:-1:-1;;2303:19:0;2295:63;;;;-1:-1:-1;;;2295:63:0;;;;;;;:::i;:::-;2436:7;:18;;-1:-1:-1;;2436:18:0;1707:1;2436:18;;;18041:37:::1;18072:4;18041:22;:37::i;:::-;18096:39;18113:9;18124:10;18096:16;:39::i;:::-;18089:46;;2615:7:::0;:22;;-1:-1:-1;;2615:22:0;1665:1;2615:22;;;17957:186;;-1:-1:-1;17957:186:0:o;19352:165::-;19441:7;2303;;:19;:7;-1:-1:-1;;2303:19:0;2295:63;;;;-1:-1:-1;;;2295:63:0;;;;;;;:::i;:::-;2436:7;:18;;-1:-1:-1;;2436:18:0;1707:1;2436:18;;;19468:41:::1;19474:10;19486:11:::0;19499:9;19468:5:::1;:41::i;:::-;19461:48;;2615:7:::0;:22;;-1:-1:-1;;2615:22:0;1665:1;2615:22;;;19352:165;;-1:-1:-1;;19352:165:0:o;16250:169::-;16343:4;2303:7;;:19;:7;-1:-1:-1;;2303:19:0;2295:63;;;;-1:-1:-1;;;2295:63:0;;;;;;;:::i;:::-;2436:7;:18;;-1:-1:-1;;2436:18:0;1707:1;2436:18;;;16367:44:::1;16381:10;16393:9:::0;16404:6;16367:13:::1;:44::i;18540:206::-:0;18625:7;2303;;:19;:7;-1:-1:-1;;2303:19:0;2295:63;;;;-1:-1:-1;;;2295:63:0;;;;;;;:::i;:::-;2436:7;:18;;-1:-1:-1;;2436:18:0;1707:1;2436:18;;;18645:37:::1;18676:4;18645:22;:37::i;:::-;18700:38;18717:9;18728;18700:16;:38::i;25946:101::-:0;25995:7;26022:17;:15;:17::i;18928:145::-;18996:7;2303;;:19;:7;-1:-1:-1;;2303:19:0;2295:63;;;;-1:-1:-1;;;2295:63:0;;;;;;;:::i;:::-;2436:7;:18;;-1:-1:-1;;2436:18:0;1707:1;2436:18;;;19023:42:::1;19029:10;19041:11:::0;19029:10;19023:5:::1;:42::i;26726:154::-:0;26792:7;26819:53;26829:42;14747:5;26829:22;26843:7;;26829:9;:13;;:22;;;;:::i;5664:281::-;4627:6;;-1:-1:-1;;;;;4627:6:0;;;;;2786:10;4627:22;4619:67;;;;-1:-1:-1;;;4619:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5767:22:0;::::1;5745:110;;;::::0;-1:-1:-1;;;5745:110:0;;8627:2:1;5745:110:0::1;::::0;::::1;8609:21:1::0;8666:2;8646:18;;;8639:30;8705:34;8685:18;;;8678:62;-1:-1:-1;;;8756:18:1;;;8749:36;8802:19;;5745:110:0::1;8425:402:1::0;5745:110:0::1;5892:6;::::0;;5871:38:::1;::::0;-1:-1:-1;;;;;5871:38:0;;::::1;::::0;5892:6:::1;::::0;;::::1;;::::0;5871:38:::1;::::0;::::1;5920:6;:17:::0;;-1:-1:-1;;;;;5920:17:0;;::::1;;;-1:-1:-1::0;;;;;;5920:17:0;;::::1;::::0;;;::::1;::::0;;5664:281::o;7495:192::-;7581:7;7617:12;7609:6;;;;7601:29;;;;-1:-1:-1;;;7601:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7641:9:0;7653:5;7657:1;7653;:5;:::i;:::-;7641:17;7495:192;-1:-1:-1;;;;;7495:192:0:o;16798:833::-;16890:4;-1:-1:-1;;;;;16948:23:0;;;;;;:47;;-1:-1:-1;;;;;;16975:20:0;;;;16948:47;16940:76;;;;-1:-1:-1;;;16940:76:0;;9299:2:1;16940:76:0;;;9281:21:1;9338:2;9318:18;;;9311:30;-1:-1:-1;;;9357:18:1;;;9350:46;9413:18;;16940:76:0;9097:340:1;16940:76:0;17044:1;17035:6;:10;17027:40;;;;-1:-1:-1;;;17027:40:0;;9644:2:1;17027:40:0;;;9626:21:1;9683:2;9663:18;;;9656:30;-1:-1:-1;;;9702:18:1;;;9695:47;9759:18;;17027:40:0;9442:341:1;17027:40:0;17109:16;17128:17;:15;:17::i;:::-;17109:36;;17219:53;17241:6;17219:53;;;;;;;;;;;;;-1:-1:-1;;;17219:53:0;;;:9;:17;17229:6;-1:-1:-1;;;;;17219:17:0;-1:-1:-1;;;;;17219:17:0;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;-1:-1:-1;;;;;17199:17:0;;;;;;;:9;:17;;;;;;:73;;;;17352:20;;;;;;;:32;;17377:6;17352:24;:32::i;:::-;-1:-1:-1;;;;;17329:20:0;;;;;;:9;:20;;;;;:55;17439:28;17458:8;17439:18;:28::i;:::-;17520:1;17506:10;;:15;;;;;;;:::i;:::-;;;;;;;;17583:9;-1:-1:-1;;;;;17566:35:0;17575:6;-1:-1:-1;;;;;17566:35:0;;17594:6;17566:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;17566:35:0;;;;;;;;-1:-1:-1;17619:4:0;;16798:833;-1:-1:-1;;;;16798:833:0:o;26108:168::-;26158:7;26185:12;;26201:1;26185:17;:83;;26214:54;26255:12;;26215:34;14170:6;26215:19;:17;:19::i;26185:83::-;-1:-1:-1;26205:6:0;;26108:168::o;24829:269::-;24914:54;;;;;;;;;;;-1:-1:-1;;;24914:54:0;;;;;;;;-1:-1:-1;;;;;24914:18:0;;-1:-1:-1;24914:18:0;;;:9;:18;;;;;;;;:54;;24937:6;;24914:22;:54::i;:::-;-1:-1:-1;;;;;24893:18:0;;;;;;:9;:18;;;;;;;;;:75;;;;24994:43;;;;;;;;;;;-1:-1:-1;;;24994:43:0;;;;;;;:12;;:43;;25011:6;;24994:16;:43::i;:::-;24979:12;:58;25053:37;;1361:25:1;;;25079:1:0;;-1:-1:-1;;;;;25053:37:0;;;;;1349:2:1;1334:18;25053:37:0;;;;;;;;24829:269;;:::o;23366:360::-;23478:16;23497:17;:15;:17::i;:::-;23478:36;;23593:8;23581;:20;;23573:50;;;;-1:-1:-1;;;23573:50:0;;10120:2:1;23573:50:0;;;10102:21:1;10159:2;10139:18;;;10132:30;-1:-1:-1;;;10178:18:1;;;10171:47;10235:18;;23573:50:0;9918:341:1;23573:50:0;23705:12;;23673:45;;;10466:25:1;;;10522:2;10507:18;;10500:34;;;10550:18;;;10543:34;;;;23673:45:0;;;;;;10454:2:1;23673:45:0;;;23421:305;23366:360;:::o;7946:471::-;8004:7;8249:1;8254;8249:6;8245:47;;-1:-1:-1;8279:1:0;8272:8;;8245:47;8304:9;8316:5;8320:1;8316;:5;:::i;:::-;8304:17;-1:-1:-1;8349:1:0;8340:5;8344:1;8304:17;8340:5;:::i;:::-;:10;8332:56;;;;-1:-1:-1;;;8332:56:0;;11185:2:1;8332:56:0;;;11167:21:1;11224:2;11204:18;;;11197:30;11263:34;11243:18;;;11236:62;-1:-1:-1;;;11314:18:1;;;11307:31;11355:19;;8332:56:0;10983:397:1;8893:132:0;8951:7;8978:39;8982:1;8985;8978:39;;;;;;;;;;;;;;;;;:3;:39::i;25171:503::-;-1:-1:-1;;;;;25259:23:0;;25245:11;25259:23;;;:9;:23;;;;;;25303:5;25297:11;;25293:374;;;25363:16;25382:17;:15;:17::i;:::-;25363:36;;25446:24;25452:12;25466:3;25446:5;:24::i;:::-;25522:21;;1361:25:1;;;25522:21:0;;1349:2:1;1334:18;25522:21:0;;;;;;;25601:54;25613:8;25623:17;:15;:17::i;:::-;25642:12;;25601:54;;;10466:25:1;;;10522:2;10507:18;;10500:34;;;;10550:18;;;10543:34;10454:2;10439:18;25601:54:0;;;;;;;25310:357;25293:374;25234:440;25171:503;:::o;20337:705::-;20505:32;;-1:-1:-1;;;20505:32:0;;20526:10;20505:32;;;3882:51:1;20416:7:0;;;;-1:-1:-1;;;;;20505:10:0;:20;;;;3855:18:1;;20505:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20478:59;;20618:1;20599:16;:20;:50;;;;;20633:16;20623:6;:26;;20599:50;20591:83;;;;-1:-1:-1;;;20591:83:0;;11587:2:1;20591:83:0;;;11569:21:1;11626:2;11606:18;;;11599:30;-1:-1:-1;;;11645:18:1;;;11638:50;11705:18;;20591:83:0;11385:344:1;20591:83:0;20722:16;20741:17;:15;:17::i;:::-;20722:36;;20804:24;20831:19;:17;:19::i;:::-;20804:46;;20893:16;20912:19;20924:6;20912:11;:19::i;:::-;20893:38;;20978:56;20986:9;20997:8;21007:16;21025:8;20978:7;:56::i;:::-;20971:63;20337:705;-1:-1:-1;;;;;;;20337:705:0:o;21136:1156::-;21225:7;21267:1;21253:11;:15;:51;;;;-1:-1:-1;;;;;;21272:17:0;;;;;;:9;:17;;;;;;:32;-1:-1:-1;21272:32:0;21253:51;21245:60;;;;;;-1:-1:-1;;;;;21324:20:0;;;;;;:47;;-1:-1:-1;;;;;;21348:23:0;;;;21324:47;21316:56;;;;;;21428:16;21447:17;:15;:17::i;:::-;21428:36;;21534:20;21557:44;14747:5;21557:24;21573:7;;21557:11;:15;;:24;;;;:::i;:44::-;21534:67;;21648:29;21680:23;21690:12;21680:9;:23::i;:::-;21648:55;;21755:26;21761:6;21769:11;21755:5;:26::i;:::-;21850:53;;-1:-1:-1;;;21850:53:0;;-1:-1:-1;;;;;6120:32:1;;;21850:53:0;;;6102:51:1;6169:18;;;6162:34;;;21850:10:0;:19;;;;6075:18:1;;21850:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21828:131;;;;-1:-1:-1;;;21828:131:0;;11936:2:1;21828:131:0;;;11918:21:1;11975:2;11955:18;;;11948:30;12014:29;11994:18;;;11987:57;12061:18;;21828:131:0;11734:351:1;21828:131:0;22004:28;22023:8;22004:18;:28::i;:::-;22085:1;22071:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;22135:52:0;;;-1:-1:-1;;;;;12310:32:1;;12292:51;;12374:2;12359:18;;12352:34;;;12402:18;;;12395:34;;;22135:52:0;;12280:2:1;12265:18;22135:52:0;;;;;;;22263:21;21136:1156;-1:-1:-1;;;;;;21136:1156:0:o;6592:181::-;6650:7;;6682:5;6686:1;6682;:5;:::i;:::-;6670:17;;6711:1;6706;:6;;6698:46;;;;-1:-1:-1;;;6698:46:0;;12642:2:1;6698:46:0;;;12624:21:1;12681:2;12661:18;;;12654:30;12720:29;12700:18;;;12693:57;12767:18;;6698:46:0;12440:351:1;9521:278:0;9607:7;9642:12;9635:5;9627:28;;;;-1:-1:-1;;;9627:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9666:9:0;9678:5;9682:1;9678;:5;:::i;23823:457::-;23885:7;23905:17;23925:19;:17;:19::i;:::-;23977:65;;-1:-1:-1;;;23977:65:0;;24001:10;23977:65;;;7929:34:1;24021:4:0;7979:18:1;;;7972:43;8031:18;;;8024:34;;;23905:39:0;;-1:-1:-1;23977:10:0;-1:-1:-1;;;;;23977:23:0;;;;7864:18:1;;23977:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23955:136;;;;-1:-1:-1;;;23955:136:0;;12998:2:1;23955:136:0;;;12980:21:1;13037:2;13017:18;;;13010:30;-1:-1:-1;;;13056:18:1;;;13049:51;13117:18;;23955:136:0;12796:345:1;23955:136:0;24102:16;24121:19;:17;:19::i;:::-;24102:38;;24184:9;24173:8;:20;24151:83;;;;-1:-1:-1;;;24151:83:0;;13348:2:1;24151:83:0;;;13330:21:1;13387:2;13367:18;;;13360:30;-1:-1:-1;;;13406:18:1;;;13399:43;13459:18;;24151:83:0;13146:337:1;24151:83:0;24252:20;24263:9;24252:8;:20;:::i;:::-;24245:27;23823:457;-1:-1:-1;;;;23823:457:0:o;22356:921::-;22466:7;22583:25;22611:12;;22627:1;22611:17;:102;;22669:44;22700:12;22669:26;22686:8;22669:12;;:16;;:26;;;;:::i;:44::-;22611:102;;;22644:8;22611:102;22583:130;;22815:20;22838:50;14747:5;22838:30;22860:7;;22838:17;:21;;:30;;;;:::i;:50::-;22815:73;;22932:1;22917:12;:16;22909:40;;;;-1:-1:-1;;;22909:40:0;;13690:2:1;22909:40:0;;;13672:21:1;13729:2;13709:18;;;13702:30;-1:-1:-1;;;13748:18:1;;;13741:41;13799:18;;22909:40:0;13488:335:1;22909:40:0;22996:30;23002:9;23013:12;22996:5;:30::i;:::-;23073:28;23092:8;23073:18;:28::i;:::-;23154:1;23140:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;23208:31:0;;;-1:-1:-1;;;;;6120:32:1;;6102:51;;6184:2;6169:18;;6162:34;;;23208:31:0;;6075:18:1;23208:31:0;;;;;;;23257:12;22356:921;-1:-1:-1;;;;;;22356:921:0:o;24342:423::-;-1:-1:-1;;;;;24487:16:0;;;;;;:6;:16;;;;;;;;:21;;24483:105;;-1:-1:-1;;;;;24524:16:0;;;;;;:6;:16;;;;;:20;;-1:-1:-1;;24524:20:0;24543:1;24524:20;;;;;;24559:12;:17;;24543:1;;24559:12;;:17;;24543:1;;24559:17;:::i;:::-;;;;-1:-1:-1;;24483:105:0;-1:-1:-1;;;;;24622:19:0;;;;;;:9;:19;;;;;;:31;;24646:6;24622:23;:31::i;:::-;-1:-1:-1;;;;;24600:19:0;;;;;;:9;:19;;;;;:53;24679:12;;:24;;24696:6;24679:16;:24::i;:::-;24664:12;:39;24719:38;;1361:25:1;;;-1:-1:-1;;;;;24719:38:0;;;24736:1;;24719:38;;1349:2:1;1334:18;24719: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:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1649:456::-;1726:6;1734;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:31;1894:5;1869:31;:::i;:::-;1919:5;-1:-1:-1;1976:2:1;1961:18;;1948:32;1989:33;1948:32;1989:33;:::i;:::-;1649:456;;2041:7;;-1:-1:-1;;;2095:2:1;2080:18;;;;2067:32;;1649:456::o;2299:118::-;2385:5;2378:13;2371:21;2364:5;2361:32;2351:60;;2407:1;2404;2397:12;2422:241;2478:6;2531:2;2519:9;2510:7;2506:23;2502:32;2499:52;;;2547:1;2544;2537:12;2499:52;2586:9;2573:23;2605:28;2627:5;2605:28;:::i;2668:180::-;2727:6;2780:2;2768:9;2759:7;2755:23;2751:32;2748:52;;;2796:1;2793;2786:12;2748:52;-1:-1:-1;2819:23:1;;2668:180;-1:-1:-1;2668:180:1:o;3321:396::-;3400:6;3408;3461:2;3449:9;3440:7;3436:23;3432:32;3429:52;;;3477:1;3474;3467:12;3429:52;3516:9;3503:23;3535:31;3560:5;3535:31;:::i;:::-;3585:5;-1:-1:-1;3642:2:1;3627:18;;3614:32;3655:30;3614:32;3655:30;:::i;:::-;3704:7;3694:17;;;3321:396;;;;;:::o;4152:315::-;4220:6;4228;4281:2;4269:9;4260:7;4256:23;4252:32;4249:52;;;4297:1;4294;4287:12;4249:52;4333:9;4320:23;4310:33;;4393:2;4382:9;4378:18;4365:32;4406:31;4431:5;4406:31;:::i;4472:388::-;4540:6;4548;4601:2;4589:9;4580:7;4576:23;4572:32;4569:52;;;4617:1;4614;4607:12;4569:52;4656:9;4643:23;4675:31;4700:5;4675:31;:::i;:::-;4725:5;-1:-1:-1;4782:2:1;4767:18;;4754:32;4795:33;4754:32;4795:33;:::i;4865:355::-;5067:2;5049:21;;;5106:2;5086:18;;;5079:30;5145:33;5140:2;5125:18;;5118:61;5211:2;5196:18;;4865:355::o;5225:356::-;5427:2;5409:21;;;5446:18;;;5439:30;5505:34;5500:2;5485:18;;5478:62;5572:2;5557:18;;5225:356::o;6207:184::-;6277:6;6330:2;6318:9;6309:7;6305:23;6301:32;6298:52;;;6346:1;6343;6336:12;6298:52;-1:-1:-1;6369:16:1;;6207:184;-1:-1:-1;6207:184:1:o;7439:245::-;7506:6;7559:2;7547:9;7538:7;7534:23;7530:32;7527:52;;;7575:1;7572;7565:12;7527:52;7607:9;7601:16;7626:28;7648:5;7626:28;:::i;8832:127::-;8893:10;8888:3;8884:20;8881:1;8874:31;8924:4;8921:1;8914:15;8948:4;8945:1;8938:15;8964:128;9031:9;;;9052:11;;;9049:37;;;9066:18;;:::i;9788:125::-;9853:9;;;9874:10;;;9871:36;;;9887:18;;:::i;10588:168::-;10661:9;;;10692;;10709:15;;;10703:22;;10689:37;10679:71;;10730:18;;:::i;10761:217::-;10801:1;10827;10817:132;;10871:10;10866:3;10862:20;10859:1;10852:31;10906:4;10903:1;10896:15;10934:4;10931:1;10924:15;10817:132;-1:-1:-1;10963:9:1;;10761:217::o
Swarm Source
ipfs://73b78a8e7318c2b293b07ad1933bdc69aa48ebd17dd2bf1290c080e224265d8f
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.