ERC-20
Blockchain
Overview
Max Total Supply
1,000,000,000 TRIBE
Holders
345 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$55,770.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
289,739.316092195732459885 TRIBEValue
$16.16 ( ~0.00468196694496246 Eth) [0.0290%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheTribe
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ERC20UniswapV2InternalSwaps} from "./ERC20UniswapV2InternalSwaps.sol"; contract TheTribe is ERC20, Ownable, ERC20UniswapV2InternalSwaps { /** @notice The presale states. */ enum PresaleState { NONE, OPEN, CLOSED, COMPLETED } /** @notice Percentage of supply allocated for presale participants (60%). */ uint256 public constant SHARE_PRESALE = 60_00; /** @notice Percentage of supply allocated for initial liquidity (28.5%).*/ uint256 public constant SHARE_LIQUIDITY = 28_50; /** @notice Percentage of supply allocated for team, marketing, cex listings, etc. (11.5%). */ uint256 public constant SHARE_OTHER = 11_50; /** @notice Per account limit in ETH for presale (1 ETH). */ uint256 public constant PRESALE_ACCOUNT_LIMIT = 1 ether; /** @notice Minimum threshold in ETH to trigger #_swapTokens. */ uint256 public constant SWAP_THRESHOLD_ETH_MIN = 0.005 ether; /** @notice Maximum threshold in ETH to trigger #_swapTokens. */ uint256 public constant SWAP_THRESHOLD_ETH_MAX = 50 ether; /** @notice Maximum tax (0.25%) */ uint256 public constant MAX_TAX = 25; uint256 private constant _MAX_SUPPLY = 1_000_000_000 ether; uint256 private constant _SUPPLY_PRESALE = (_MAX_SUPPLY * SHARE_PRESALE) / 100_00; uint256 private constant _SUPPLY_LIQUIDITY = (_MAX_SUPPLY * SHARE_LIQUIDITY) / 100_00; uint256 private constant _SUPPLY_OTHER = _MAX_SUPPLY - _SUPPLY_PRESALE - _SUPPLY_LIQUIDITY; uint256 private constant _LAUNCH_BUY_TAX = 3_00; uint256 private constant _LAUNCH_SELL_TAX = 50_00; uint256 private constant _LAUNCH_TAX_WINDOW = 20 minutes; /** @notice Tax recipient wallet. */ address public taxRecipient; /** @notice Whether address is extempt from transfer tax. */ mapping(address => bool) public taxFreeAccount; /** @notice Whether address is an exchange pool. */ mapping(address => bool) public isExchangePool; /** @notice Threshold in ETH of tokens to collect before triggering #_swapTokens. */ uint256 public swapThresholdEth = 0.1 ether; /** @notice Tax manager. */ address public taxManager; /** @notice Buy tax in bps (0%). In first 20 minutes after adding liquidity, buy tax will be 3%. */ uint256 public buyTax = 0; /** @notice Sell tax in bps (0.25%). In first 20 minutes after adding liquidity, sell tax will be 50%. */ uint256 public sellTax = 25; /** @notice Presale commitment in ETH per address. */ mapping(address => uint256) public commitment; /** @notice Presale amount of claimed tokens per address. */ mapping(address => uint256) public claimedTokens; /** @notice Presale total commitment in ETH. */ uint256 public totalCommitments; /** @notice Presale total amount of claimed tokens. */ uint256 public totalClaimed; /** @notice Current presale state. */ PresaleState public presaleState; uint256 private _launchTaxEndsAt = type(uint256).max; event CommitedToPresale(address indexed account, uint256 amount); event PresaleOpened(); event PresaleClosed(uint256 totalCommitments); event PresaleCompleted(uint256 totalCommitments); event PresaleClaimed(address indexed account, uint256 amount); event TaxRecipientChanged(address indexed taxRecipient); event SwapThresholdChanged(uint256 swapThresholdEth); event TaxFreeStateChanged(address indexed account, bool indexed taxFree); event ExchangePoolStateChanged( address indexed account, bool indexed isExchangePool ); event TaxManagerChanged(address indexed taxManager); event TaxesChanged(uint256 newBuyTax, uint256 newSellTax); event TaxesWithdrawn(uint256 amount); error MaxAccountLimitExceeded(); error PresaleIsClosed(); error PresaleNotCompleted(); error AlreadyClaimed(); error NoCommittments(); error NothingCommitted(); error Unauthorized(); error InvalidParameters(); error InvalidSwapThreshold(); error InvalidTax(); error NoContract(); error InvalidState(); modifier onlyTaxManager() { if (msg.sender != taxManager) { revert Unauthorized(); } _; } constructor( address _owner, address _taxRecipient, address _taxManager ) ERC20("The Tribe", "TRIBE") Ownable(_owner) { taxManager = _taxManager; emit TaxManagerChanged(_taxManager); taxRecipient = _taxRecipient; emit TaxRecipientChanged(_taxRecipient); taxFreeAccount[address(0)] = true; emit TaxFreeStateChanged(address(0), true); taxFreeAccount[_taxRecipient] = true; emit TaxFreeStateChanged(_taxRecipient, true); taxFreeAccount[address(this)] = true; emit TaxFreeStateChanged(address(this), true); isExchangePool[pair] = true; emit ExchangePoolStateChanged(pair, true); emit TaxesChanged(buyTax, sellTax); _mint(address(this), _SUPPLY_PRESALE + _SUPPLY_LIQUIDITY); _mint(_taxRecipient, _SUPPLY_OTHER); } /** @dev Users can send ETH directly to **this** contract to participate */ receive() external payable { commitToPresale(); } // *** User Interface *** /** * @notice Commit ETH to presale. * Presale supply is claimable proportionally for all presale participants. * Presale has no hardcap and 1 ETH per wallet limit. * Users can also send ETH directly to **this** contract to participate. * @dev Callable once presaleOpen. */ function commitToPresale() public payable { address account = msg.sender; if (_isContract(account)) { revert NoContract(); } if ( presaleState != PresaleState.OPEN ) { revert PresaleIsClosed(); } commitment[account] += msg.value; totalCommitments += msg.value; if (commitment[account] > PRESALE_ACCOUNT_LIMIT) { revert MaxAccountLimitExceeded(); } emit CommitedToPresale(account, msg.value); } /** * @notice Claim callers presale tokens. * @dev Callable once presaleCompleted. */ function claimPresale() external { address account = msg.sender; if (_isContract(account)) { revert NoContract(); } if (presaleState != PresaleState.COMPLETED) { revert PresaleNotCompleted(); } if (commitment[account] == 0) { revert NothingCommitted(); } if (claimedTokens[account] != 0) { revert AlreadyClaimed(); } uint256 amountTokens = (_SUPPLY_PRESALE * commitment[account]) / totalCommitments; claimedTokens[account] = amountTokens; totalClaimed += amountTokens; _transferFromContractBalance(account, amountTokens); emit PresaleClaimed(account, amountTokens); } /** @notice Returns amount of tokens to be claimed by presale participants. */ function unclaimedSupply() external view returns (uint256) { return _SUPPLY_PRESALE - totalClaimed; } // *** Owner Interface *** /** * @notice Open presale for all users. */ function openPresale() external onlyOwner { if (presaleState != PresaleState.NONE) { revert InvalidState(); } presaleState = PresaleState.OPEN; emit PresaleOpened(); } /** * @notice Close the presale. * Called after #openPresale. */ function closePresale() external onlyOwner { if (presaleState != PresaleState.OPEN) { revert InvalidState(); } if (totalCommitments == 0) { revert NoCommittments(); } presaleState = PresaleState.CLOSED; emit PresaleClosed(totalCommitments); } /** * @notice Complete the presale. * @dev Adds 47.5% of collected ETH with 28.5% of totalSupply to Liquidity. * Sends the remaining 52.5% of collected ETH to current owner. * Renounces ownership. * Called after #closePresale. */ function completePresale() external onlyOwner { if (presaleState != PresaleState.CLOSED) { revert InvalidState(); } uint256 amountEthForLiquidity = (totalCommitments * _SUPPLY_LIQUIDITY) / _SUPPLY_PRESALE; _addInitialLiquidityEth( _SUPPLY_LIQUIDITY, amountEthForLiquidity, taxRecipient ); _sweepEth(taxRecipient); _launchTaxEndsAt = block.timestamp + _LAUNCH_TAX_WINDOW; renounceOwnership(); presaleState = PresaleState.COMPLETED; emit PresaleCompleted(totalCommitments); } // *** Tax Manager Interface *** /** * @notice Set `taxFree` state of `account`. * @param account account * @param taxFree true if `account` should be extempt from transfer taxes. * @dev Only callable by taxManager. */ function setTaxFreeAccount( address account, bool taxFree ) external onlyTaxManager { if (taxFreeAccount[account] == taxFree) { revert InvalidParameters(); } taxFreeAccount[account] = taxFree; emit TaxFreeStateChanged(account, taxFree); } /** * @notice Set `exchangePool` state of `account` * @param account account * @param exchangePool whether `account` is an exchangePool * @dev ExchangePool state is used to decide if transfer is a swap * and should trigger #_swapTokens. */ function setExchangePool( address account, bool exchangePool ) external onlyTaxManager { if (isExchangePool[account] == exchangePool) { revert InvalidParameters(); } isExchangePool[account] = exchangePool; emit ExchangePoolStateChanged(account, exchangePool); } /** * @notice Transfer taxManager role to `newTaxManager`. * @param newTaxManager new taxManager * @dev Only callable by taxManager. */ function transferTaxManager(address newTaxManager) external onlyTaxManager { if (newTaxManager == taxManager) { revert InvalidParameters(); } taxManager = newTaxManager; emit TaxManagerChanged(newTaxManager); } /** * @notice Set taxRecipient address to `newTaxRecipient`. * @param newTaxRecipient new taxRecipient * @dev Only callable by taxManager. */ function setTaxRecipient(address newTaxRecipient) external onlyTaxManager { if (newTaxRecipient == taxRecipient) { revert InvalidParameters(); } taxRecipient = newTaxRecipient; emit TaxRecipientChanged(newTaxRecipient); } /** * @notice Withdraw tax collected (which would usually be automatically swapped to weth) to taxRecipient * @dev Only callable by taxManager. */ function withdrawTaxes() external onlyTaxManager { uint256 balance = balanceOf(address(this)); if (balance > 0) { super._transfer(address(this), taxRecipient, balance); emit TaxesWithdrawn(balance); } } /** * @notice Change the amount of tokens collected via tax before a swap is triggered. * @param newSwapThresholdEth new threshold received in ETH * @dev Only callable by taxManager */ function setSwapThresholdEth( uint256 newSwapThresholdEth ) external onlyTaxManager { if ( newSwapThresholdEth < SWAP_THRESHOLD_ETH_MIN || newSwapThresholdEth > SWAP_THRESHOLD_ETH_MAX || newSwapThresholdEth == swapThresholdEth ) { revert InvalidSwapThreshold(); } swapThresholdEth = newSwapThresholdEth; emit SwapThresholdChanged(newSwapThresholdEth); } /** * @notice Set tax for buying and selling the token * @param newBuyTax new buy tax in bps * @param newSellTax new sell tax in bps * @dev Only callable by taxManager */ function changeTaxes( uint256 newBuyTax, uint256 newSellTax ) external onlyTaxManager { if (newBuyTax > MAX_TAX || newSellTax > MAX_TAX) { revert InvalidTax(); } buyTax = newBuyTax; sellTax = newSellTax; emit TaxesChanged(newBuyTax, newSellTax); } /** * @notice Threshold of how many tokens to collect from tax before calling #swapTokens. * @dev Depends on swapThresholdEth which can be configured by taxManager. * Restricted to 5% of liquidity. */ function swapThresholdToken() public view returns (uint256) { (uint reserveToken, uint reserveWeth) = _getReserve(); uint256 maxSwapEth = (reserveWeth * 5) / 100; return _getAmountToken( swapThresholdEth > maxSwapEth ? maxSwapEth : swapThresholdEth, reserveToken, reserveWeth ); } /** @notice Get current buy tax depending on current timestamp. */ function currentBuyTax() public view returns (uint256) { return _getTax(true); } /** @notice Get current buy tax depending on current timestamp. */ function currentSellTax() public view returns (uint256) { return _getTax(false); } // *** Internal Interface *** /** @notice IERC20#_transfer */ function _update( address from, address to, uint256 amount ) internal virtual override { if ( !taxFreeAccount[from] && !taxFreeAccount[to] && !taxFreeAccount[msg.sender] ) { uint256 fee = amount * _getTax(isExchangePool[from]) / 100_00; super._update(from, address(this), fee); unchecked { amount -= fee; } if (isExchangePool[to]) /* selling */ { _swapTokens(swapThresholdToken()); } } super._update(from, to, amount); } /** @dev Get transfer tax depending on current timestamp and `isBuy`. */ function _getTax(bool isBuy) private view returns (uint256) { return isBuy ? ( block.timestamp < _launchTaxEndsAt ? _LAUNCH_BUY_TAX : buyTax ) : ( block.timestamp < _launchTaxEndsAt ? _LAUNCH_SELL_TAX : sellTax ); } /** @dev Transfer `amount` tokens from contract balance to `to`. */ function _transferFromContractBalance( address to, uint256 amount ) internal override { super._update(address(this), to, amount); } /** * @notice Swap `amountToken` collected from tax to WETH to add to send to taxRecipient. */ function _swapTokens(uint256 amountToken) internal { if (balanceOf(address(this)) + totalClaimed < amountToken + _SUPPLY_PRESALE) { return; } _swapForWETH(amountToken, taxRecipient); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IUniswapV2Pair { function getReserves() external view returns (uint112 reserve0, uint112 reserve1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function mint(address to) external; } interface IUniswapV2Factory { function createPair( address tokenA, address tokenB ) external returns (address pair); } interface IWETH { function deposit() external payable; } /** * @notice UniswapV2Pair does not allow to receive to token0 or token1. * As a workaround, this contract can receive tokens and has max approval * for the creator. */ contract ERC20HolderWithApproval { constructor(address token) { IERC20(token).approve(msg.sender, type(uint256).max); } } /** * @notice Gas optimized ERC20 token based on solmate's ERC20 contract. * @dev Optimizations assume a UniswapV2 WETH pair as main liquidity. */ abstract contract ERC20UniswapV2InternalSwaps { address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address private constant FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; address private immutable wethReceiver; address public immutable pair; bool private immutable tokenIsToken0; constructor() { tokenIsToken0 = address(this) < WETH; pair = IUniswapV2Factory(FACTORY).createPair(address(this), WETH); wethReceiver = address(new ERC20HolderWithApproval(WETH)); } /** * @dev Swap tokens to WETH directly on pair, to save gas. * No check for minimal return, susceptible to price manipulation! */ function _swapForWETH(uint amountToken, address to) internal { uint amountWeth = _getAmountWeth(amountToken); _transferFromContractBalance(pair, amountToken); // Pair prevents receiving tokens to one of the pairs addresses IUniswapV2Pair(pair).swap(tokenIsToken0 ? 0 : amountWeth, tokenIsToken0 ? amountWeth : 0, wethReceiver, new bytes(0)); IERC20(WETH).transferFrom(wethReceiver, to, amountWeth); } /** * @dev Add tokens and WETH to liquidity, directly on pair, to save gas. * No check for minimal return, susceptible to price manipulation! * Sufficient WETH in contract balancee assumed! */ function _addLiquidity( uint amountToken, address to ) internal returns (uint amountWeth) { amountWeth = _quoteToken(amountToken); _transferFromContractBalance(pair, amountToken); IERC20(WETH).transferFrom(address(this), pair, amountWeth); IUniswapV2Pair(pair).mint(to); } /** * @dev Add tokens and WETH as initial liquidity, directly on pair, to save gas. * No checks performed. Caller has to make sure to have access to the token before public! * Sufficient WETH in contract balancee assumed! */ function _addInitialLiquidity( uint amountToken, uint amountWeth, address to ) internal { _transferFromContractBalance(pair, amountToken); IERC20(WETH).transferFrom(address(this), pair, amountWeth); IUniswapV2Pair(pair).mint(to); } /** * @dev Add tokens and ETH as initial liquidity, directly on pair, to save gas. * No checks performed. Caller has to make sure to have access to the token before public! * Sufficient ETH in contract balancee assumed! */ function _addInitialLiquidityEth( uint amountToken, uint amountEth, address to ) internal { IWETH(WETH).deposit{value: amountEth}(); _addInitialLiquidity(amountToken, amountEth, to); } /** @dev Transfer all WETH from contract balance to `to`. */ function _sweepWeth(address to) internal returns (uint amountWeth) { amountWeth = IERC20(WETH).balanceOf(address(this)); IERC20(WETH).transferFrom(address(this), to, amountWeth); } /** @dev Transfer all ETH from contract balance to `to`. */ function _sweepEth(address to) internal { _safeTransferETH(to, address(this).balance); } /** @dev Quote `amountToken` in ETH, assuming no fees (used for liquidity). */ function _quoteToken( uint amountToken ) internal view returns (uint amountEth) { (uint reserveToken, uint reserveEth) = _getReserve(); amountEth = (amountToken * reserveEth) / reserveToken; } /** @dev Quote `amountToken` in WETH, assuming 0.3% uniswap fees (used for swap). */ function _getAmountWeth( uint amounToken ) internal view returns (uint amountWeth) { (uint reserveToken, uint reserveWeth) = _getReserve(); uint amountTokenWithFee = amounToken * 997; uint numerator = amountTokenWithFee * reserveWeth; uint denominator = (reserveToken * 1000) + amountTokenWithFee; amountWeth = numerator / denominator; } /** @dev Quote `amountWeth` in tokens, assuming 0.3% uniswap fees (used for swap). */ function _getAmountToken( uint amounWeth, uint reserveToken, uint reserveWeth ) internal pure returns (uint amountToken) { uint numerator = reserveToken * amounWeth * 1000; uint denominator = (reserveWeth - amounWeth) * 997; amountToken = (numerator / denominator) + 1; } /** @dev Get reserves of pair. */ function _getReserve() internal view returns (uint reserveToken, uint reserveWeth) { (uint112 reserveToken0, uint112 reserveToken1) = IUniswapV2Pair(pair).getReserves(); (reserveToken, reserveWeth) = tokenIsToken0 ? (reserveToken0, reserveToken1) : (reserveToken1, reserveToken0); } /** @dev Transfer `amount` ETH to `to` gas efficiently. */ function _safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // solhint-disable-line no-inline-assembly // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /** @dev Returns true if `_address` is a contract. */ function _isContract(address _address) internal view returns (bool) { uint32 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(_address) } return (size > 0); } /** @dev Transfeer `amount` tokens from contract balance to `to`. */ function _transferFromContractBalance( address to, uint256 amount ) internal virtual; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "./IERC20.sol"; import {IERC20Metadata} from "./extensions/IERC20Metadata.sol"; import {Context} from "../../utils/Context.sol"; import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); }
{ "optimizer": { "enabled": true, "runs": 20000 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_taxRecipient","type":"address"},{"internalType":"address","name":"_taxManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"InvalidParameters","type":"error"},{"inputs":[],"name":"InvalidState","type":"error"},{"inputs":[],"name":"InvalidSwapThreshold","type":"error"},{"inputs":[],"name":"InvalidTax","type":"error"},{"inputs":[],"name":"MaxAccountLimitExceeded","type":"error"},{"inputs":[],"name":"NoCommittments","type":"error"},{"inputs":[],"name":"NoContract","type":"error"},{"inputs":[],"name":"NothingCommitted","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PresaleIsClosed","type":"error"},{"inputs":[],"name":"PresaleNotCompleted","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CommitedToPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExchangePool","type":"bool"}],"name":"ExchangePoolStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PresaleClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalCommitments","type":"uint256"}],"name":"PresaleClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalCommitments","type":"uint256"}],"name":"PresaleCompleted","type":"event"},{"anonymous":false,"inputs":[],"name":"PresaleOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapThresholdEth","type":"uint256"}],"name":"SwapThresholdChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"taxFree","type":"bool"}],"name":"TaxFreeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"taxManager","type":"address"}],"name":"TaxManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"taxRecipient","type":"address"}],"name":"TaxRecipientChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"TaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_ACCOUNT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHARE_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHARE_OTHER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHARE_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_THRESHOLD_ETH_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_THRESHOLD_ETH_MIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyTax","type":"uint256"},{"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"changeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"commitToPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"commitment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"completePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExchangePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleState","outputs":[{"internalType":"enum TheTribe.PresaleState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exchangePool","type":"bool"}],"name":"setExchangePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapThresholdEth","type":"uint256"}],"name":"setSwapThresholdEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"taxFree","type":"bool"}],"name":"setTaxFreeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxRecipient","type":"address"}],"name":"setTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThresholdEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThresholdToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxFreeAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCommitments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxManager","type":"address"}],"name":"transferTaxManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405267016345785d8a00006009556000600b556019600c556000196012553480156200002d57600080fd5b5060405162003c1538038062003c15833981016040819052620000509162000ba4565b826040518060400160405280600981526020016854686520547269626560b81b81525060405180604001604052806005815260200164545249424560d81b8152508160039081620000a2919062000c92565b506004620000b1828262000c92565b5050506001600160a01b038116620000e457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000ef81620004cb565b5073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23081811060c0526040516364e329cb60e11b815260048101919091526024810191909152735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063c9c65396906044016020604051808303816000875af115801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000d5e565b6001600160a01b031660a05260405173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290620001be9062000b79565b6001600160a01b039091168152602001604051809103906000f080158015620001eb573d6000803e3d6000fd5b506001600160a01b03908116608052600a80546001600160a01b03191691831691821790556040517f4f06221442f29c68561a21b361dae6cd59eeb67b7cded6395d590a4e1d2fd3a290600090a2600680546001600160a01b0319166001600160a01b0384169081179091556040517f252e37823f8325a28d11c9bfaa110c2e0587d3e41cf2a02d5de57536c058e68990600090a2600080805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df805460ff1916600190811790915560405190919060008051602062003bf5833981519152908290a36001600160a01b038216600081815260076020526040808220805460ff19166001908117909155905190929160008051602062003bf583398151915291a330600081815260076020526040808220805460ff19166001908117909155905190929160008051602062003bf583398151915291a360a0516001600160a01b0316600081815260086020526040808220805460ff1916600190811790915590519092917fd3763f1074087e38245af8391cfa3acdb23e0553090104fd7b85667d7328752991a37f5eee0b95930ee59011f34615b0b7dc6cc58c01d1f07d04a01a3a1e70d2554cf0600b54600c54604051620003d6929190918252602082015260400190565b60405180910390a1620004473061271062000400610b226b033b2e3c9fd0803ce800000062000d99565b6200040c919062000db3565b612710620004296117706b033b2e3c9fd0803ce800000062000d99565b62000435919062000db3565b62000441919062000dd6565b6200051d565b620004c28261271062000469610b226b033b2e3c9fd0803ce800000062000d99565b62000475919062000db3565b612710620004926117706b033b2e3c9fd0803ce800000062000d99565b6200049e919062000db3565b620004b6906b033b2e3c9fd0803ce800000062000dec565b62000441919062000dec565b50505062000ee4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620005495760405163ec442f0560e01b815260006004820152602401620000db565b62000557600083836200055b565b5050565b6001600160a01b03831660009081526007602052604090205460ff161580156200059e57506001600160a01b03821660009081526007602052604090205460ff16155b8015620005bb57503360009081526007602052604090205460ff16155b1562000650576001600160a01b03831660009081526008602052604081205461271090620005ec9060ff1662000662565b620005f8908462000d99565b62000604919062000db3565b905062000613843083620006a3565b6001600160a01b038316600090815260086020526040902054918190039160ff16156200064e576200064e62000648620007d6565b62000831565b505b6200065d838383620006a3565b505050565b600081620006865760125442106200067d57600c546200069d565b6113886200069d565b60125442106200069957600b546200069d565b61012c5b92915050565b6001600160a01b038316620006d2578060026000828254620006c6919062000dd6565b90915550620007469050565b6001600160a01b03831660009081526020819052604090205481811015620007275760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000db565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620007645760028054829003905562000783565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007c991815260200190565b60405180910390a3505050565b60008080620007e4620008ab565b909250905060006064620007fa83600562000d99565b62000806919062000db3565b90506200082981600954116200081f5760095462000821565b815b848462000944565b935050505090565b6127106200084e6117706b033b2e3c9fd0803ce800000062000d99565b6200085a919062000db3565b62000866908262000dd6565b6010543060009081526020819052604090205462000885919062000dd6565b10156200088f5750565b600654620008a89082906001600160a01b0316620009a4565b50565b60008060008060a0516001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa158015620008f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000917919062000e1a565b9150915060c0516200092b5780826200092e565b81815b6001600160701b03918216969116945092505050565b60008062000953858562000d99565b62000961906103e862000d99565b9050600062000971868562000dec565b6200097f906103e562000d99565b90506200098d818362000db3565b6200099a90600162000dd6565b9695505050505050565b6000620009b18362000b01565b9050620009c760a0518462000b6c60201b60201c565b60a0516001600160a01b031663022c0d9f60c051620009e75782620009ea565b60005b60c051620009fa576000620009fc565b835b608051604080516000815260208101918290526001600160e01b031960e087901b1690915262000a33939291906024810162000e52565b600060405180830381600087803b15801562000a4e57600080fd5b505af115801562000a63573d6000803e3d6000fd5b50506080516040516323b872dd60e01b81526001600160a01b03918216600482015290851660248201526044810184905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292506323b872dd91506064016020604051808303816000875af115801562000ad5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afb919062000ec0565b50505050565b6000808062000b0f620008ab565b9092509050600062000b24856103e562000d99565b9050600062000b34838362000d99565b905060008262000b47866103e862000d99565b62000b53919062000dd6565b905062000b61818362000db3565b979650505050505050565b62000557308383620006a3565b6101478062003aae83390190565b80516001600160a01b038116811462000b9f57600080fd5b919050565b60008060006060848603121562000bba57600080fd5b62000bc58462000b87565b925062000bd56020850162000b87565b915062000be56040850162000b87565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c1957607f821691505b60208210810362000c3a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065d57600081815260208120601f850160051c8101602086101562000c695750805b601f850160051c820191505b8181101562000c8a5782815560010162000c75565b505050505050565b81516001600160401b0381111562000cae5762000cae62000bee565b62000cc68162000cbf845462000c04565b8462000c40565b602080601f83116001811462000cfe576000841562000ce55750858301515b600019600386901b1c1916600185901b17855562000c8a565b600085815260208120601f198616915b8281101562000d2f5788860151825594840194600190910190840162000d0e565b508582101562000d4e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000d7157600080fd5b62000d7c8262000b87565b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200069d576200069d62000d83565b60008262000dd157634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200069d576200069d62000d83565b818103818111156200069d576200069d62000d83565b80516001600160701b038116811462000b9f57600080fd5b6000806040838503121562000e2e57600080fd5b62000e398362000e02565b915062000e496020840162000e02565b90509250929050565b84815260006020858184015260018060a01b038516604084015260806060840152835180608085015260005b8181101562000e9c5785810183015185820160a00152820162000e7e565b50600060a0828601015260a0601f19601f8301168501019250505095945050505050565b60006020828403121562000ed357600080fd5b8151801515811462000d7c57600080fd5b60805160a05160c051612b5b62000f5360003960008181611d6101528181612516015261254401526000818161075d01528181611ccf0152818161221b0152818161228301528181612357015281816124b301526124da0152600081816125b201526126480152612b5b6000f3fe6080604052600436106103175760003560e01c806378bb86d31161019a578063a960c65f116100e1578063ddf4d5191161008a578063f2fde38b11610064578063f2fde38b146108d2578063f5a4fa1e146108f2578063fe2314d61461092257600080fd5b8063ddf4d51914610880578063dfc56b1114610895578063e09d6bc6146108b257600080fd5b8063cc1776d3116100bb578063cc1776d314610801578063d54ad2a114610817578063dd62ed3e1461082d57600080fd5b8063a960c65f1461079f578063b18f0de2146107cc578063bda347be146107f957600080fd5b80638dd9831211610143578063a2aa18ad1161011d578063a2aa18ad1461072b578063a8aa1b311461074b578063a9059cbb1461077f57600080fd5b80638dd98312146106eb57806395d89b411461070057806399fbde7d1461071557600080fd5b806383e03b341161017457806383e03b341461069657806386a35f25146106ab5780638da5cb5b146106c057600080fd5b806378bb86d31461064557806378e3079e1461065b57806381e172ca1461067b57600080fd5b8063468298311161025e57806367cf6f1011610207578063715018a6116101e1578063715018a6146105ee578063737ea06e14610603578063774378e41461063057600080fd5b806367cf6f101461057a57806370a082311461058f57806370e7c575146105d257600080fd5b806352fd28a61161023857806352fd28a6146105305780635afefc091461055057806363cea4501461056557600080fd5b806346829831146104b35780634d237730146104c85780634f7041a51461051a57600080fd5b806318f60b69116102c05780632cb686fe1161029a5780632cb686fe1461046b578063313ce567146104815780634201ed1b1461049d57600080fd5b806318f60b69146103fb57806323b872dd1461042b578063263b82371461044b57600080fd5b80630d0c31b7116102f15780630d0c31b71461039b5780631465000e146103c257806318160ddd146103e657600080fd5b8063046ef9a51461032b57806306fdde0314610340578063095ea7b31461036b57600080fd5b3661032657610324610942565b005b600080fd5b34801561033757600080fd5b50610324610adf565b34801561034c57600080fd5b50610355610d32565b60405161036291906127a4565b60405180910390f35b34801561037757600080fd5b5061038b6103863660046127e7565b610dc4565b6040519015158152602001610362565b3480156103a757600080fd5b506011546103b59060ff1681565b6040516103629190612840565b3480156103ce57600080fd5b506103d860095481565b604051908152602001610362565b3480156103f257600080fd5b506002546103d8565b34801561040757600080fd5b5061038b610416366004612881565b60086020526000908152604090205460ff1681565b34801561043757600080fd5b5061038b61044636600461289c565b610dde565b34801561045757600080fd5b506103246104663660046128e6565b610e02565b34801561047757600080fd5b506103d861177081565b34801561048d57600080fd5b5060405160128152602001610362565b3480156104a957600080fd5b506103d861047e81565b3480156104bf57600080fd5b50610324610f39565b3480156104d457600080fd5b50600a546104f59073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610362565b34801561052657600080fd5b506103d8600b5481565b34801561053c57600080fd5b5061032461054b3660046128e6565b610ffd565b34801561055c57600080fd5b506103d8611134565b34801561057157600080fd5b5061032461116e565b34801561058657600080fd5b50610324611265565b34801561059b57600080fd5b506103d86105aa366004612881565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156105de57600080fd5b506103d8670de0b6b3a764000081565b3480156105fa57600080fd5b50610324611401565b34801561060f57600080fd5b506006546104f59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561063c57600080fd5b506103d8611415565b34801561065157600080fd5b506103d8600f5481565b34801561066757600080fd5b50610324610676366004612881565b611421565b34801561068757600080fd5b506103d86611c37937e0800081565b3480156106a257600080fd5b506103d8611536565b3480156106b757600080fd5b506103d8601981565b3480156106cc57600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff166104f5565b3480156106f757600080fd5b50610324611542565b34801561070c57600080fd5b506103556115f0565b34801561072157600080fd5b506103d8610b2281565b34801561073757600080fd5b50610324610746366004612881565b6115ff565b34801561075757600080fd5b506104f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561078b57600080fd5b5061038b61079a3660046127e7565b611714565b3480156107ab57600080fd5b506103d86107ba366004612881565b600e6020526000908152604090205481565b3480156107d857600080fd5b506103d86107e7366004612881565b600d6020526000908152604090205481565b610324610942565b34801561080d57600080fd5b506103d8600c5481565b34801561082357600080fd5b506103d860105481565b34801561083957600080fd5b506103d861084836600461291d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561088c57600080fd5b506103d8611722565b3480156108a157600080fd5b506103d86802b5e3af16b188000081565b3480156108be57600080fd5b506103246108cd366004612950565b611774565b3480156108de57600080fd5b506103246108ed366004612881565b61185a565b3480156108fe57600080fd5b5061038b61090d366004612881565b60076020526000908152604090205460ff1681565b34801561092e57600080fd5b5061032461093d366004612969565b6118c0565b33803b63ffffffff1615610982576040517f0c3b563c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160115460ff16600381111561099b5761099b612811565b146109d2576040517f7f9a7e5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d602052604081208054349290610a079084906129ba565b9250508190555034600f6000828254610a2091906129ba565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600d6020526040902054670de0b6b3a76400001015610a8c576040517f1ba602ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f5b32366e01f1031d9eea11f55e693d225ce96b46c3761591c85f4ee8c34baa0834604051610ad491815260200190565b60405180910390a250565b33803b63ffffffff1615610b1f576040517f0c3b563c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360115460ff166003811115610b3857610b38612811565b14610b6f576040517fcebeeca300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d60205260408120549003610bcd576040517f835a24b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600e602052604090205415610c2a576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f5473ffffffffffffffffffffffffffffffffffffffff82166000908152600d6020526040812054909190612710610c716117706b033b2e3c9fd0803ce80000006129cd565b610c7b91906129e4565b610c8591906129cd565b610c8f91906129e4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e60205260408120829055601080549293508392909190610cce9084906129ba565b90915550610cde9050828261199e565b8173ffffffffffffffffffffffffffffffffffffffff167f0352332f702f094a528e3002d331329d6bdab7dfd9b1f45864ca583ea0636ee882604051610d2691815260200190565b60405180910390a25050565b606060038054610d4190612a1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6d90612a1f565b8015610dba5780601f10610d8f57610100808354040283529160200191610dba565b820191906000526020600020905b815481529060010190602001808311610d9d57829003601f168201915b5050505050905090565b600033610dd28185856119ad565b60019150505b92915050565b600033610dec8582856119bf565b610df7858585611a8e565b506001949350505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610e53576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205481151560ff909116151503610eba576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fd3763f1074087e38245af8391cfa3acdb23e0553090104fd7b85667d7328752991a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610f8a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b306000908152602081905260409020548015610ffa57600654610fc590309073ffffffffffffffffffffffffffffffffffffffff1683611a8e565b6040518181527f37cc5ea62b518495d042cabfa45c5e43aeae690552efa3b7341854331e05662f906020015b60405180910390a15b50565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461104e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604090205481151560ff9091161515036110b5576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526007602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917f02ebf20869d52e173b3abfc35a2c8f7efc7901edff0691526afa5d21fa2ce92291a35050565b6010546000906127106111556117706b033b2e3c9fd0803ce80000006129cd565b61115f91906129e4565b6111699190612a72565b905090565b611176611b39565b600160115460ff16600381111561118f5761118f612811565b146111c6576040517fbaf3f0f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54600003611202576040517f725699da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166002179055600f546040519081527f227b593cbecd51a8479fc7c8362590fcba561971b9ecb0d25c4a27178df253e79060200160405180910390a1565b61126d611b39565b600260115460ff16600381111561128657611286612811565b146112bd576040517fbaf3f0f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006127106112da6117706b033b2e3c9fd0803ce80000006129cd565b6112e491906129e4565b6127106112ff610b226b033b2e3c9fd0803ce80000006129cd565b61130991906129e4565b600f5461131691906129cd565b61132091906129e4565b905061136a612710611340610b226b033b2e3c9fd0803ce80000006129cd565b61134a91906129e4565b600654839073ffffffffffffffffffffffffffffffffffffffff16611b8c565b60065461138c9073ffffffffffffffffffffffffffffffffffffffff16611c0c565b6113986104b0426129ba565b6012556113a3611401565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166003179055600f546040519081527f6882b4e9381959c371492b71e5cc926ee0b176e95804510eeac6c20044b5b5a290602001610ff1565b611409611b39565b6114136000611c16565b565b60006111696000611c8d565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611472576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065473ffffffffffffffffffffffffffffffffffffffff908116908216036114c7576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f252e37823f8325a28d11c9bfaa110c2e0587d3e41cf2a02d5de57536c058e68990600090a250565b60006111696001611c8d565b61154a611b39565b600060115460ff16600381111561156357611563612811565b1461159a576040517fbaf3f0f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517fbac8edc4f6a45ce4a46327dbea4b1181366b50f7356984a5e1c92ebe3cb21c1290600090a1565b606060048054610d4190612a1f565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611650576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff908116908216036116a5576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4f06221442f29c68561a21b361dae6cd59eeb67b7cded6395d590a4e1d2fd3a290600090a250565b600033610dd2818585611a8e565b600080600061172f611cc7565b9092509050600060646117438360056129cd565b61174d91906129e4565b905061176c816009541161176357600954611765565b815b8484611dab565b935050505090565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146117c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6611c37937e080008110806117e257506802b5e3af16b188000081115b806117ee575060095481145b15611825576040517fcb9e92ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60098190556040518181527f9ff241d1f1e0c30788ac08c45391c423cc5ef3e67f66a46b95a9a8f394759f3690602001610ff1565b611862611b39565b73ffffffffffffffffffffffffffffffffffffffff81166118b7576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610ffa81611c16565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611911576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60198211806119205750601981115b15611957576040517f37d4ed5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b829055600c81905560408051838152602081018390527f5eee0b95930ee59011f34615b0b7dc6cc58c01d1f07d04a01a3a1e70d2554cf0910160405180910390a15050565b6119a9308383611dff565b5050565b6119ba8383836001611faa565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a885781811015611a79576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064016118ae565b611a8884848484036000611faa565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611ade576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b73ffffffffffffffffffffffffffffffffffffffff8216611b2e576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b6119ba8383836120f2565b60055473ffffffffffffffffffffffffffffffffffffffff163314611413576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016118ae565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611be857600080fd5b505af1158015611bfc573d6000803e3d6000fd5b50505050506119ba838383612216565b610ffa81476123b8565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611cad576012544210611ca557600c54610dd8565b611388610dd8565b6012544210611cbe57600b54610dd8565b61012c92915050565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b9190612aa3565b915091507f0000000000000000000000000000000000000000000000000000000000000000611d8b578082611d8e565b81815b6dffffffffffffffffffffffffffff918216969116945092505050565b600080611db885856129cd565b611dc4906103e86129cd565b90506000611dd28685612a72565b611dde906103e56129cd565b9050611dea81836129e4565b611df59060016129ba565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316611e37578060026000828254611e2c91906129ba565b90915550611ee99050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611ebd576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016118ae565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216611f1257600280548290039055611f3e565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f9d91815260200190565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416611ffa576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b73ffffffffffffffffffffffffffffffffffffffff831661204a576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209387168352929052208290558015611a88578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516120e491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526007602052604090205460ff1615801561214e575073ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604090205460ff16155b801561216a57503360009081526007602052604090205460ff16155b1561220b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040812054612710906121a59060ff16611c8d565b6121af90846129cd565b6121b991906129e4565b90506121c6843083611dff565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054918190039160ff161561220957612209612204611722565b61242d565b505b6119ba838383611dff565b6122407f00000000000000000000000000000000000000000000000000000000000000008461199e565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906323b872dd906064016020604051808303816000875af11580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612acd565b506040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636a62784290602401600060405180830381600087803b15801561239b57600080fd5b505af11580156123af573d6000803e3d6000fd5b50505050505050565b600080600080600085875af19050806119ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016118ae565b6127106124486117706b033b2e3c9fd0803ce80000006129cd565b61245291906129e4565b61245c90826129ba565b6010543060009081526020819052604090205461247991906129ba565b10156124825750565b600654610ffa90829073ffffffffffffffffffffffffffffffffffffffff1660006124ac836126e0565b90506124d87f00000000000000000000000000000000000000000000000000000000000000008461199e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663022c0d9f7f000000000000000000000000000000000000000000000000000000000000000061253f5782612542565b60005b7f000000000000000000000000000000000000000000000000000000000000000061256e576000612570565b835b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b169091526125db9291907f00000000000000000000000000000000000000000000000000000000000000009060248101612aea565b600060405180830381600087803b1580156125f557600080fd5b505af1158015612609573d6000803e3d6000fd5b50506040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152851660248201526044810184905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292506323b872dd91506064016020604051808303816000875af11580156126bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a889190612acd565b60008060006126ed611cc7565b90925090506000612700856103e56129cd565b9050600061270e83836129cd565b905060008261271f866103e86129cd565b61272991906129ba565b905061273581836129e4565b979650505050505050565b6000815180845260005b818110156127665760208185018101518683018201520161274a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006127b76020830184612740565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146127e257600080fd5b919050565b600080604083850312156127fa57600080fd5b612803836127be565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016004831061287b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561289357600080fd5b6127b7826127be565b6000806000606084860312156128b157600080fd5b6128ba846127be565b92506128c8602085016127be565b9150604084013590509250925092565b8015158114610ffa57600080fd5b600080604083850312156128f957600080fd5b612902836127be565b91506020830135612912816128d8565b809150509250929050565b6000806040838503121561293057600080fd5b612939836127be565b9150612947602084016127be565b90509250929050565b60006020828403121561296257600080fd5b5035919050565b6000806040838503121561297c57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610dd857610dd861298b565b8082028115828204841417610dd857610dd861298b565b600082612a1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c90821680612a3357607f821691505b602082108103612a6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b81810381811115610dd857610dd861298b565b80516dffffffffffffffffffffffffffff811681146127e257600080fd5b60008060408385031215612ab657600080fd5b612abf83612a85565b915061294760208401612a85565b600060208284031215612adf57600080fd5b81516127b7816128d8565b84815283602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201526000611df5608083018461274056fea2646970667358221220aa7ff1433d6aee5232f913027d011dac699c6fa92e76ff43493802da0286843864736f6c63430008140033608060405234801561001057600080fd5b5060405161014738038061014783398101604081905261002f916100a8565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af115801561007d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a191906100d8565b50506100fa565b6000602082840312156100ba57600080fd5b81516001600160a01b03811681146100d157600080fd5b9392505050565b6000602082840312156100ea57600080fd5b815180151581146100d157600080fd5b603f806101086000396000f3fe6080604052600080fdfea2646970667358221220785200f3783e1e7f98cc5338d4fc4ca532017957c46ef46db458a4bfb41c27fd64736f6c6343000814003302ebf20869d52e173b3abfc35a2c8f7efc7901edff0691526afa5d21fa2ce9220000000000000000000000000f2bc587ecedf80ccbba5edf9ef94589f0f2a0c60000000000000000000000000a19847c5967007586c6e796feff8f753d46362d0000000000000000000000000a19847c5967007586c6e796feff8f753d46362d
Deployed Bytecode
0x6080604052600436106103175760003560e01c806378bb86d31161019a578063a960c65f116100e1578063ddf4d5191161008a578063f2fde38b11610064578063f2fde38b146108d2578063f5a4fa1e146108f2578063fe2314d61461092257600080fd5b8063ddf4d51914610880578063dfc56b1114610895578063e09d6bc6146108b257600080fd5b8063cc1776d3116100bb578063cc1776d314610801578063d54ad2a114610817578063dd62ed3e1461082d57600080fd5b8063a960c65f1461079f578063b18f0de2146107cc578063bda347be146107f957600080fd5b80638dd9831211610143578063a2aa18ad1161011d578063a2aa18ad1461072b578063a8aa1b311461074b578063a9059cbb1461077f57600080fd5b80638dd98312146106eb57806395d89b411461070057806399fbde7d1461071557600080fd5b806383e03b341161017457806383e03b341461069657806386a35f25146106ab5780638da5cb5b146106c057600080fd5b806378bb86d31461064557806378e3079e1461065b57806381e172ca1461067b57600080fd5b8063468298311161025e57806367cf6f1011610207578063715018a6116101e1578063715018a6146105ee578063737ea06e14610603578063774378e41461063057600080fd5b806367cf6f101461057a57806370a082311461058f57806370e7c575146105d257600080fd5b806352fd28a61161023857806352fd28a6146105305780635afefc091461055057806363cea4501461056557600080fd5b806346829831146104b35780634d237730146104c85780634f7041a51461051a57600080fd5b806318f60b69116102c05780632cb686fe1161029a5780632cb686fe1461046b578063313ce567146104815780634201ed1b1461049d57600080fd5b806318f60b69146103fb57806323b872dd1461042b578063263b82371461044b57600080fd5b80630d0c31b7116102f15780630d0c31b71461039b5780631465000e146103c257806318160ddd146103e657600080fd5b8063046ef9a51461032b57806306fdde0314610340578063095ea7b31461036b57600080fd5b3661032657610324610942565b005b600080fd5b34801561033757600080fd5b50610324610adf565b34801561034c57600080fd5b50610355610d32565b60405161036291906127a4565b60405180910390f35b34801561037757600080fd5b5061038b6103863660046127e7565b610dc4565b6040519015158152602001610362565b3480156103a757600080fd5b506011546103b59060ff1681565b6040516103629190612840565b3480156103ce57600080fd5b506103d860095481565b604051908152602001610362565b3480156103f257600080fd5b506002546103d8565b34801561040757600080fd5b5061038b610416366004612881565b60086020526000908152604090205460ff1681565b34801561043757600080fd5b5061038b61044636600461289c565b610dde565b34801561045757600080fd5b506103246104663660046128e6565b610e02565b34801561047757600080fd5b506103d861177081565b34801561048d57600080fd5b5060405160128152602001610362565b3480156104a957600080fd5b506103d861047e81565b3480156104bf57600080fd5b50610324610f39565b3480156104d457600080fd5b50600a546104f59073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610362565b34801561052657600080fd5b506103d8600b5481565b34801561053c57600080fd5b5061032461054b3660046128e6565b610ffd565b34801561055c57600080fd5b506103d8611134565b34801561057157600080fd5b5061032461116e565b34801561058657600080fd5b50610324611265565b34801561059b57600080fd5b506103d86105aa366004612881565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156105de57600080fd5b506103d8670de0b6b3a764000081565b3480156105fa57600080fd5b50610324611401565b34801561060f57600080fd5b506006546104f59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561063c57600080fd5b506103d8611415565b34801561065157600080fd5b506103d8600f5481565b34801561066757600080fd5b50610324610676366004612881565b611421565b34801561068757600080fd5b506103d86611c37937e0800081565b3480156106a257600080fd5b506103d8611536565b3480156106b757600080fd5b506103d8601981565b3480156106cc57600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff166104f5565b3480156106f757600080fd5b50610324611542565b34801561070c57600080fd5b506103556115f0565b34801561072157600080fd5b506103d8610b2281565b34801561073757600080fd5b50610324610746366004612881565b6115ff565b34801561075757600080fd5b506104f57f00000000000000000000000035ec40bd9ae9179097f06ccbc0e9c3f2d051cc3081565b34801561078b57600080fd5b5061038b61079a3660046127e7565b611714565b3480156107ab57600080fd5b506103d86107ba366004612881565b600e6020526000908152604090205481565b3480156107d857600080fd5b506103d86107e7366004612881565b600d6020526000908152604090205481565b610324610942565b34801561080d57600080fd5b506103d8600c5481565b34801561082357600080fd5b506103d860105481565b34801561083957600080fd5b506103d861084836600461291d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561088c57600080fd5b506103d8611722565b3480156108a157600080fd5b506103d86802b5e3af16b188000081565b3480156108be57600080fd5b506103246108cd366004612950565b611774565b3480156108de57600080fd5b506103246108ed366004612881565b61185a565b3480156108fe57600080fd5b5061038b61090d366004612881565b60076020526000908152604090205460ff1681565b34801561092e57600080fd5b5061032461093d366004612969565b6118c0565b33803b63ffffffff1615610982576040517f0c3b563c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160115460ff16600381111561099b5761099b612811565b146109d2576040517f7f9a7e5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d602052604081208054349290610a079084906129ba565b9250508190555034600f6000828254610a2091906129ba565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600d6020526040902054670de0b6b3a76400001015610a8c576040517f1ba602ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f5b32366e01f1031d9eea11f55e693d225ce96b46c3761591c85f4ee8c34baa0834604051610ad491815260200190565b60405180910390a250565b33803b63ffffffff1615610b1f576040517f0c3b563c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360115460ff166003811115610b3857610b38612811565b14610b6f576040517fcebeeca300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d60205260408120549003610bcd576040517f835a24b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600e602052604090205415610c2a576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f5473ffffffffffffffffffffffffffffffffffffffff82166000908152600d6020526040812054909190612710610c716117706b033b2e3c9fd0803ce80000006129cd565b610c7b91906129e4565b610c8591906129cd565b610c8f91906129e4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e60205260408120829055601080549293508392909190610cce9084906129ba565b90915550610cde9050828261199e565b8173ffffffffffffffffffffffffffffffffffffffff167f0352332f702f094a528e3002d331329d6bdab7dfd9b1f45864ca583ea0636ee882604051610d2691815260200190565b60405180910390a25050565b606060038054610d4190612a1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6d90612a1f565b8015610dba5780601f10610d8f57610100808354040283529160200191610dba565b820191906000526020600020905b815481529060010190602001808311610d9d57829003601f168201915b5050505050905090565b600033610dd28185856119ad565b60019150505b92915050565b600033610dec8582856119bf565b610df7858585611a8e565b506001949350505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610e53576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205481151560ff909116151503610eba576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fd3763f1074087e38245af8391cfa3acdb23e0553090104fd7b85667d7328752991a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610f8a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b306000908152602081905260409020548015610ffa57600654610fc590309073ffffffffffffffffffffffffffffffffffffffff1683611a8e565b6040518181527f37cc5ea62b518495d042cabfa45c5e43aeae690552efa3b7341854331e05662f906020015b60405180910390a15b50565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461104e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604090205481151560ff9091161515036110b5576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526007602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917f02ebf20869d52e173b3abfc35a2c8f7efc7901edff0691526afa5d21fa2ce92291a35050565b6010546000906127106111556117706b033b2e3c9fd0803ce80000006129cd565b61115f91906129e4565b6111699190612a72565b905090565b611176611b39565b600160115460ff16600381111561118f5761118f612811565b146111c6576040517fbaf3f0f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54600003611202576040517f725699da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166002179055600f546040519081527f227b593cbecd51a8479fc7c8362590fcba561971b9ecb0d25c4a27178df253e79060200160405180910390a1565b61126d611b39565b600260115460ff16600381111561128657611286612811565b146112bd576040517fbaf3f0f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006127106112da6117706b033b2e3c9fd0803ce80000006129cd565b6112e491906129e4565b6127106112ff610b226b033b2e3c9fd0803ce80000006129cd565b61130991906129e4565b600f5461131691906129cd565b61132091906129e4565b905061136a612710611340610b226b033b2e3c9fd0803ce80000006129cd565b61134a91906129e4565b600654839073ffffffffffffffffffffffffffffffffffffffff16611b8c565b60065461138c9073ffffffffffffffffffffffffffffffffffffffff16611c0c565b6113986104b0426129ba565b6012556113a3611401565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166003179055600f546040519081527f6882b4e9381959c371492b71e5cc926ee0b176e95804510eeac6c20044b5b5a290602001610ff1565b611409611b39565b6114136000611c16565b565b60006111696000611c8d565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611472576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065473ffffffffffffffffffffffffffffffffffffffff908116908216036114c7576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f252e37823f8325a28d11c9bfaa110c2e0587d3e41cf2a02d5de57536c058e68990600090a250565b60006111696001611c8d565b61154a611b39565b600060115460ff16600381111561156357611563612811565b1461159a576040517fbaf3f0f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517fbac8edc4f6a45ce4a46327dbea4b1181366b50f7356984a5e1c92ebe3cb21c1290600090a1565b606060048054610d4190612a1f565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611650576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff908116908216036116a5576040517fe523909000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4f06221442f29c68561a21b361dae6cd59eeb67b7cded6395d590a4e1d2fd3a290600090a250565b600033610dd2818585611a8e565b600080600061172f611cc7565b9092509050600060646117438360056129cd565b61174d91906129e4565b905061176c816009541161176357600954611765565b815b8484611dab565b935050505090565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146117c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6611c37937e080008110806117e257506802b5e3af16b188000081115b806117ee575060095481145b15611825576040517fcb9e92ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60098190556040518181527f9ff241d1f1e0c30788ac08c45391c423cc5ef3e67f66a46b95a9a8f394759f3690602001610ff1565b611862611b39565b73ffffffffffffffffffffffffffffffffffffffff81166118b7576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610ffa81611c16565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611911576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60198211806119205750601981115b15611957576040517f37d4ed5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b829055600c81905560408051838152602081018390527f5eee0b95930ee59011f34615b0b7dc6cc58c01d1f07d04a01a3a1e70d2554cf0910160405180910390a15050565b6119a9308383611dff565b5050565b6119ba8383836001611faa565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a885781811015611a79576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064016118ae565b611a8884848484036000611faa565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611ade576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b73ffffffffffffffffffffffffffffffffffffffff8216611b2e576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b6119ba8383836120f2565b60055473ffffffffffffffffffffffffffffffffffffffff163314611413576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016118ae565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611be857600080fd5b505af1158015611bfc573d6000803e3d6000fd5b50505050506119ba838383612216565b610ffa81476123b8565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611cad576012544210611ca557600c54610dd8565b611388610dd8565b6012544210611cbe57600b54610dd8565b61012c92915050565b6000806000807f00000000000000000000000035ec40bd9ae9179097f06ccbc0e9c3f2d051cc3073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b9190612aa3565b915091507f0000000000000000000000000000000000000000000000000000000000000000611d8b578082611d8e565b81815b6dffffffffffffffffffffffffffff918216969116945092505050565b600080611db885856129cd565b611dc4906103e86129cd565b90506000611dd28685612a72565b611dde906103e56129cd565b9050611dea81836129e4565b611df59060016129ba565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316611e37578060026000828254611e2c91906129ba565b90915550611ee99050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611ebd576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016118ae565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216611f1257600280548290039055611f3e565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f9d91815260200190565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416611ffa576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b73ffffffffffffffffffffffffffffffffffffffff831661204a576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016118ae565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209387168352929052208290558015611a88578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516120e491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526007602052604090205460ff1615801561214e575073ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604090205460ff16155b801561216a57503360009081526007602052604090205460ff16155b1561220b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040812054612710906121a59060ff16611c8d565b6121af90846129cd565b6121b991906129e4565b90506121c6843083611dff565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054918190039160ff161561220957612209612204611722565b61242d565b505b6119ba838383611dff565b6122407f00000000000000000000000035ec40bd9ae9179097f06ccbc0e9c3f2d051cc308461199e565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000035ec40bd9ae9179097f06ccbc0e9c3f2d051cc301660248201526044810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906323b872dd906064016020604051808303816000875af11580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612acd565b506040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000035ec40bd9ae9179097f06ccbc0e9c3f2d051cc301690636a62784290602401600060405180830381600087803b15801561239b57600080fd5b505af11580156123af573d6000803e3d6000fd5b50505050505050565b600080600080600085875af19050806119ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016118ae565b6127106124486117706b033b2e3c9fd0803ce80000006129cd565b61245291906129e4565b61245c90826129ba565b6010543060009081526020819052604090205461247991906129ba565b10156124825750565b600654610ffa90829073ffffffffffffffffffffffffffffffffffffffff1660006124ac836126e0565b90506124d87f00000000000000000000000035ec40bd9ae9179097f06ccbc0e9c3f2d051cc308461199e565b7f00000000000000000000000035ec40bd9ae9179097f06ccbc0e9c3f2d051cc3073ffffffffffffffffffffffffffffffffffffffff1663022c0d9f7f000000000000000000000000000000000000000000000000000000000000000061253f5782612542565b60005b7f000000000000000000000000000000000000000000000000000000000000000061256e576000612570565b835b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b169091526125db9291907f000000000000000000000000c40efb578bce2145b96bd37be0d7d22963e479aa9060248101612aea565b600060405180830381600087803b1580156125f557600080fd5b505af1158015612609573d6000803e3d6000fd5b50506040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c40efb578bce2145b96bd37be0d7d22963e479aa81166004830152851660248201526044810184905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292506323b872dd91506064016020604051808303816000875af11580156126bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a889190612acd565b60008060006126ed611cc7565b90925090506000612700856103e56129cd565b9050600061270e83836129cd565b905060008261271f866103e86129cd565b61272991906129ba565b905061273581836129e4565b979650505050505050565b6000815180845260005b818110156127665760208185018101518683018201520161274a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006127b76020830184612740565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146127e257600080fd5b919050565b600080604083850312156127fa57600080fd5b612803836127be565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016004831061287b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561289357600080fd5b6127b7826127be565b6000806000606084860312156128b157600080fd5b6128ba846127be565b92506128c8602085016127be565b9150604084013590509250925092565b8015158114610ffa57600080fd5b600080604083850312156128f957600080fd5b612902836127be565b91506020830135612912816128d8565b809150509250929050565b6000806040838503121561293057600080fd5b612939836127be565b9150612947602084016127be565b90509250929050565b60006020828403121561296257600080fd5b5035919050565b6000806040838503121561297c57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610dd857610dd861298b565b8082028115828204841417610dd857610dd861298b565b600082612a1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c90821680612a3357607f821691505b602082108103612a6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b81810381811115610dd857610dd861298b565b80516dffffffffffffffffffffffffffff811681146127e257600080fd5b60008060408385031215612ab657600080fd5b612abf83612a85565b915061294760208401612a85565b600060208284031215612adf57600080fd5b81516127b7816128d8565b84815283602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201526000611df5608083018461274056fea2646970667358221220aa7ff1433d6aee5232f913027d011dac699c6fa92e76ff43493802da0286843864736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000f2bc587ecedf80ccbba5edf9ef94589f0f2a0c60000000000000000000000000a19847c5967007586c6e796feff8f753d46362d0000000000000000000000000a19847c5967007586c6e796feff8f753d46362d
-----Decoded View---------------
Arg [0] : _owner (address): 0x0f2bc587ECedf80CcbbA5EDf9ef94589F0F2a0c6
Arg [1] : _taxRecipient (address): 0x0a19847C5967007586c6E796FeFf8F753d46362d
Arg [2] : _taxManager (address): 0x0a19847C5967007586c6E796FeFf8F753d46362d
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f2bc587ecedf80ccbba5edf9ef94589f0f2a0c6
Arg [1] : 0000000000000000000000000a19847c5967007586c6e796feff8f753d46362d
Arg [2] : 0000000000000000000000000a19847c5967007586c6e796feff8f753d46362d
Deployed Bytecode Sourcemap
275:15170:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5439:17;:15;:17::i;:::-;275:15170;;;;;6455:747;;;;;;;;;;;;;:::i;2074:89:2:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;-1:-1:-1;4293:186:2;;;;;:::i;:::-;;:::i;:::-;;;1351:14:8;;1344:22;1326:41;;1314:2;1299:18;4293:186:2;1186:187:8;3129:32:7;;;;;;;;;;-1:-1:-1;3129:32:7;;;;;;;;;;;;;;;:::i;2288:43::-;;;;;;;;;;;;;;;;;;;2120:25:8;;;2108:2;2093:18;2288:43:7;1974:177:8;3144:97:2;;;;;;;;;;-1:-1:-1;3222:12:2;;3144:97;;2147:46:7;;;;;;;;;;-1:-1:-1;2147:46:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;5039:244:2;;;;;;;;;;-1:-1:-1;5039:244:2;;;;;:::i;:::-;;:::i;9864:329:7:-;;;;;;;;;;-1:-1:-1;9864:329:7;;;;;:::i;:::-;;:::i;560:45::-;;;;;;;;;;;;600:5;560:45;;3002:82:2;;;;;;;;;;-1:-1:-1;3002:82:2;;3075:2;3265:36:8;;3253:2;3238:18;3002:82:2;3123:184:8;843:43:7;;;;;;;;;;;;881:5;843:43;;11230:254;;;;;;;;;;;;;:::i;2369:25::-;;;;;;;;;;-1:-1:-1;2369:25:7;;;;;;;;;;;3488:42:8;3476:55;;;3458:74;;3446:2;3431:18;2369:25:7;3312:226:8;2504:25:7;;;;;;;;;;;;;;;;9278:306;;;;;;;;;;-1:-1:-1;9278:306:7;;;;;:::i;:::-;;:::i;7291:113::-;;;;;;;;;;;;;:::i;7807:320::-;;;;;;;;;;;;;:::i;8397:622::-;;;;;;;;;;;;;:::i;3299:116:2:-;;;;;;;;;;-1:-1:-1;3299:116:2;;;;;:::i;:::-;3390:18;;3364:7;3390:18;;;;;;;;;;;;3299:116;957:55:7;;;;;;;;;;;;1005:7;957:55;;2293:101:0;;;;;;;;;;;;;:::i;1941:27:7:-;;;;;;;;;;-1:-1:-1;1941:27:7;;;;;;;;13542:94;;;;;;;;;;;;;:::i;2958:31::-;;;;;;;;;;;;;;;;10789:269;;;;;;;;;;-1:-1:-1;10789:269:7;;;;;:::i;:::-;;:::i;1087:60::-;;;;;;;;;;;;1136:11;1087:60;;13373:92;;;;;;;;;;;;;:::i;1324:36::-;;;;;;;;;;;;1358:2;1324:36;;1638:85:0;;;;;;;;;;-1:-1:-1;1710:6:0;;;;1638:85;;7502:215:7;;;;;;;;;;;;;:::i;2276:93:2:-;;;;;;;;;;;;;:::i;691:47:7:-;;;;;;;;;;;;733:5;691:47;;10359:258;;;;;;;;;;-1:-1:-1;10359:258:7;;;;;:::i;:::-;;:::i;1381:29:6:-;;;;;;;;;;;;;;;3610:178:2;;;;;;;;;;-1:-1:-1;3610:178:2;;;;;:::i;:::-;;:::i;2852:48:7:-;;;;;;;;;;-1:-1:-1;2852:48:7;;;;;:::i;:::-;;;;;;;;;;;;;;2736:45;;;;;;;;;;-1:-1:-1;2736:45:7;;;;;:::i;:::-;;;;;;;;;;;;;;5808:536;;;:::i;2645:27::-;;;;;;;;;;;;;;;;3054;;;;;;;;;;;;;;;;3846:140:2;;;;;;;;;;-1:-1:-1;3846:140:2;;;;;:::i;:::-;3952:18;;;;3926:7;3952:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3846:140;12916:380:7;;;;;;;;;;;;;:::i;1222:57::-;;;;;;;;;;;;1271:8;1222:57;;11699:457;;;;;;;;;;-1:-1:-1;11699:457:7;;;;;:::i;:::-;;:::i;2543:215:0:-;;;;;;;;;;-1:-1:-1;2543:215:0;;;;;:::i;:::-;;:::i;2039:46:7:-;;;;;;;;;;-1:-1:-1;2039:46:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;12362:323;;;;;;;;;;-1:-1:-1;12362:323:7;;;;;:::i;:::-;;:::i;5808:536::-;5878:10;6587:21:6;;6635:8;;;5898:70:7;;5945:12;;;;;;;;;;;;;;5898:70;6010:17;5994:12;;;;:33;;;;;;;;:::i;:::-;;5977:110;;6059:17;;;;;;;;;;;;;;5977:110;6097:19;;;;;;;:10;:19;;;;;:32;;6120:9;;6097:19;:32;;6120:9;;6097:32;:::i;:::-;;;;;;;;6159:9;6139:16;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;6183:19:7;;;;;;;:10;:19;;;;;;1005:7;-1:-1:-1;6179:106:7;;;6249:25;;;;;;;;;;;;;;6179:106;6318:7;6300:37;;;6327:9;6300:37;;;;2120:25:8;;2108:2;2093:18;;1974:177;6300:37:7;;;;;;;;5850:494;5808:536::o;6455:747::-;6516:10;6587:21:6;;6635:8;;;6537:70:7;;6584:12;;;;;;;;;;;;;;6537:70;6636:22;6620:12;;;;:38;;;;;;;;:::i;:::-;;6616:97;;6681:21;;;;;;;;;;;;;;6616:97;6726:19;;;;;;;:10;:19;;;;;;:24;;6722:80;;6773:18;;;;;;;;;;;;;;6722:80;6815:22;;;;;;;:13;:22;;;;;;:27;6811:81;;6865:16;;;;;;;;;;;;;;6811:81;6979:16;;6944:19;;;6902:20;6944:19;;;:10;:19;;;;;;6902:20;;6979:16;1514:6;1483:27;600:5;1406:19;1483:27;:::i;:::-;1482:38;;;;:::i;:::-;6926:37;;;;:::i;:::-;6925:70;;;;:::i;:::-;7005:22;;;;;;;:13;:22;;;;;:37;;;7052:12;:28;;6902:93;;-1:-1:-1;6902:93:7;;7052:12;;7005:22;7052:28;;6902:93;;7052:28;:::i;:::-;;;;-1:-1:-1;7091:51:7;;-1:-1:-1;7120:7:7;7129:12;7091:28;:51::i;:::-;7173:7;7158:37;;;7182:12;7158:37;;;;2120:25:8;;2108:2;2093:18;;1974:177;7158:37:7;;;;;;;;6488:714;;6455:747::o;2074:89:2:-;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;735:10:5;4420:31:2;735:10:5;4436:7:2;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;;:::o;5039:244::-;5126:4;735:10:5;5182:37:2;5198:4;735:10:5;5213:5:2;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;-1:-1:-1;5272:4:2;;5039:244;-1:-1:-1;;;;5039:244:2:o;9864:329:7:-;4373:10;;;;4359;:24;4355:76;;4406:14;;;;;;;;;;;;;;4355:76;9985:23:::1;::::0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:39;::::1;;:23;::::0;;::::1;:39;;::::0;9981:96:::1;;10047:19;;;;;;;;;;;;;;9981:96;10086:23;::::0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:38;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;10139:47;;10086:38;;:23;10139:47:::1;::::0;::::1;9864:329:::0;;:::o;11230:254::-;4373:10;;;;4359;:24;4355:76;;4406:14;;;;;;;;;;;;;;4355:76;11325:4:::1;11289:15;3390:18:2::0;;;;;;;;;;;11345:11:7;;11341:137:::1;;11403:12;::::0;11372:53:::1;::::0;11396:4:::1;::::0;11403:12:::1;;11417:7:::0;11372:15:::1;:53::i;:::-;11444:23;::::0;2120:25:8;;;11444:23:7::1;::::0;2108:2:8;2093:18;11444:23:7::1;;;;;;;;11341:137;11279:205;11230:254::o:0;9278:306::-;4373:10;;;;4359;:24;4355:76;;4406:14;;;;;;;;;;;;;;4355:76;9396:23:::1;::::0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:34;::::1;;:23;::::0;;::::1;:34;;::::0;9392:91:::1;;9453:19;;;;;;;;;;;;;;9392:91;9492:23;::::0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:33;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;9540:37;;9492:33;;:23;9540:37:::1;::::0;::::1;9278:306:::0;;:::o;7291:113::-;7385:12;;7341:7;;1514:6;1483:27;600:5;1406:19;1483:27;:::i;:::-;1482:38;;;;:::i;:::-;7367:30;;;;:::i;:::-;7360:37;;7291:113;:::o;7807:320::-;1531:13:0;:11;:13::i;:::-;7880:17:7::1;7864:12;::::0;::::1;;:33;::::0;::::1;;;;;;:::i;:::-;;7860:85;;7920:14;;;;;;;;;;;;;;7860:85;7958:16;;7978:1;7958:21:::0;7954:75:::1;;8002:16;;;;;;;;;;;;;;7954:75;8039:12;:34:::0;;;::::1;8054:19;8039:34;::::0;;8103:16:::1;::::0;8089:31:::1;::::0;2120:25:8;;;8089:31:7::1;::::0;2108:2:8;2093:18;8089:31:7::1;;;;;;;7807:320::o:0;8397:622::-;1531:13:0;:11;:13::i;:::-;8473:19:7::1;8457:12;::::0;::::1;;:35;::::0;::::1;;;;;;:::i;:::-;;8453:87;;8515:14;;;;;;;;;;;;;;8453:87;8550:29;1514:6;1483:27;600:5;1406:19;1483:27;:::i;:::-;1482:38;;;;:::i;:::-;1613:6;1580:29;733:5;1406:19;1580:29;:::i;:::-;1579:40;;;;:::i;:::-;8583:16;;:36;;;;:::i;:::-;8582:68;;;;:::i;:::-;8550:100:::0;-1:-1:-1;8660:125:7::1;1613:6;1580:29;733:5;1406:19;1580:29;:::i;:::-;1579:40;;;;:::i;:::-;8763:12;::::0;8728:21;;8763:12:::1;;8660:23;:125::i;:::-;8806:12;::::0;8796:23:::1;::::0;8806:12:::1;;8796:9;:23::i;:::-;8849:36;1883:10;8849:15;:36;:::i;:::-;8830:16;:55:::0;8895:19:::1;:17;:19::i;:::-;8925:12;:37:::0;;;::::1;8940:22;8925:37;::::0;;8995:16:::1;::::0;8978:34:::1;::::0;2120:25:8;;;8978:34:7::1;::::0;2108:2:8;2093:18;8978:34:7::1;1974:177:8::0;2293:101:0;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;13542:94:7:-;13589:7;13615:14;13623:5;13615:7;:14::i;10789:269::-;4373:10;;;;4359;:24;4355:76;;4406:14;;;;;;;;;;;;;;4355:76;10896:12:::1;::::0;::::1;::::0;;::::1;10877:31:::0;;::::1;::::0;10873:88:::1;;10931:19;;;;;;;;;;;;;;10873:88;10970:12;:30:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;11015:36:::1;::::0;::::1;::::0;-1:-1:-1;;11015:36:7::1;10789:269:::0;:::o;13373:92::-;13419:7;13445:13;13453:4;13445:7;:13::i;7502:215::-;1531:13:0;:11;:13::i;:::-;7574:17:7::1;7558:12;::::0;::::1;;:33;::::0;::::1;;;;;;:::i;:::-;;7554:85;;7614:14;;;;;;;;;;;;;;7554:85;7648:12;:32:::0;;;::::1;7663:17;7648:32;::::0;;7695:15:::1;::::0;::::1;::::0;-1:-1:-1;;7695:15:7::1;7502:215::o:0;2276:93:2:-;2323:13;2355:7;2348:14;;;;;:::i;10359:258:7:-;4373:10;;;;4359;:24;4355:76;;4406:14;;;;;;;;;;;;;;4355:76;10465:10:::1;::::0;::::1;::::0;;::::1;10448:27:::0;;::::1;::::0;10444:84:::1;;10498:19;;;;;;;;;;;;;;10444:84;10537:10;:26:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;10578:32:::1;::::0;::::1;::::0;-1:-1:-1;;10578:32:7::1;10359:258:::0;:::o;3610:178:2:-;3679:4;735:10:5;3733:27:2;735:10:5;3750:2:2;3754:5;3733:9;:27::i;12916:380:7:-;12967:7;12987:17;13006:16;13026:13;:11;:13::i;:::-;12986:53;;-1:-1:-1;12986:53:7;-1:-1:-1;13049:18:7;13090:3;13071:15;12986:53;13085:1;13071:15;:::i;:::-;13070:23;;;;:::i;:::-;13049:44;;13122:167;13174:10;13155:16;;:29;:61;;13200:16;;13155:61;;;13187:10;13155:61;13234:12;13264:11;13122:15;:167::i;:::-;13103:186;;;;;12916:380;:::o;11699:457::-;4373:10;;;;4359;:24;4355:76;;4406:14;;;;;;;;;;;;;;4355:76;1136:11:::1;11822:19;:44;:104;;;;1271:8;11882:19;:44;11822:104;:159;;;;11965:16;;11942:19;:39;11822:159;11805:241;;;12013:22;;;;;;;;;;;;;;11805:241;12055:16;:38:::0;;;12108:41:::1;::::0;2120:25:8;;;12108:41:7::1;::::0;2108:2:8;2093:18;12108:41:7::1;1974:177:8::0;2543:215:0;1531:13;:11;:13::i;:::-;2627:22:::1;::::0;::::1;2623:91;;2672:31;::::0;::::1;::::0;;2700:1:::1;2672:31;::::0;::::1;3458:74:8::0;3431:18;;2672:31:0::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;12362:323:7:-:0;4373:10;;;;4359;:24;4355:76;;4406:14;;;;;;;;;;;;;;4355:76;1358:2:::1;12482:9;:19;:43;;;;1358:2;12505:10;:20;12482:43;12478:93;;;12548:12;;;;;;;;;;;;;;12478:93;12580:6;:18:::0;;;12608:7:::1;:20:::0;;;12643:35:::1;::::0;;5766:25:8;;;5822:2;5807:18;;5800:34;;;12643:35:7::1;::::0;5739:18:8;12643:35:7::1;;;;;;;12362:323:::0;;:::o;14940:163::-;15056:40;15078:4;15085:2;15089:6;15056:13;:40::i;:::-;14940:163;;:::o;8989:128:2:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;10663:477::-;3952:18;;;;10762:24;3952:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;10848:17;10828:37;;10824:310;;10904:5;10885:16;:24;10881:130;;;10936:60;;;;;6077:42:8;6065:55;;10936:60:2;;;6047:74:8;6137:18;;;6130:34;;;6180:18;;;6173:34;;;6020:18;;10936:60:2;5845:368:8;10881:130:2;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;:::-;10752:388;10663:477;;;:::o;5656:300::-;5739:18;;;5735:86;;5780:30;;;;;5807:1;5780:30;;;3458:74:8;3431:18;;5780:30:2;3312:226:8;5735:86:2;5834:16;;;5830:86;;5873:32;;;;;5902:1;5873:32;;;3458:74:8;3431:18;;5873:32:2;3312:226:8;5830:86:2;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;1796:162:0:-;1710:6;;1855:23;1710:6;735:10:5;1855:23:0;1851:101;;1901:40;;;;;735:10:5;1901:40:0;;;3458:74:8;3431:18;;1901:40:0;3312:226:8;3614:232:6;1198:42;3742:19;;;3769:9;3742:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3791:48;3812:11;3825:9;3836:2;3791:20;:48::i;4187:100::-;4237:43;4254:2;4258:21;4237:16;:43::i;2912:187:0:-;3004:6;;;;3020:17;;;;;;;;;;;3052:40;;3004:6;;;3020:17;3004:6;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;14423:439:7:-;14474:7;14512:5;:343;;14744:16;;14726:15;:34;:111;;14830:7;;14512:343;;14726:111;1826:5;14512:343;;;14576:16;;14558:15;:34;:109;;14661:6;;14558:109;;;1772:4;14493:362;14423:439;-1:-1:-1;;14423:439:7:o;5555:330:6:-;5625:17;5644:16;5677:21;5700;5740:4;5725:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5676:83;;;;5799:13;:79;;5849:13;5864;5799:79;;;5816:13;5831;5799:79;5769:109;;;;;;;;-1:-1:-1;5555:330:6;-1:-1:-1;;;5555:330:6:o;5184:327::-;5315:16;;5360:24;5375:9;5360:12;:24;:::i;:::-;:31;;5387:4;5360:31;:::i;:::-;5343:48;-1:-1:-1;5401:16:6;5421:23;5435:9;5421:11;:23;:::i;:::-;5420:31;;5448:3;5420:31;:::i;:::-;5401:50;-1:-1:-1;5476:23:6;5401:50;5476:9;:23;:::i;:::-;5475:29;;5503:1;5475:29;:::i;:::-;5461:43;5184:327;-1:-1:-1;;;;;;5184:327:6:o;6271:1107:2:-;6360:18;;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6356:540:2;;-1:-1:-1;6356:540:2;;6570:15;;;6548:19;6570:15;;;;;;;;;;;6603:19;;;6599:115;;;6649:50;;;;;6077:42:8;6065:55;;6649:50:2;;;6047:74:8;6137:18;;;6130:34;;;6180:18;;;6173:34;;;6020:18;;6649:50:2;5845:368:8;6599:115:2;6834:15;;;:9;:15;;;;;;;;;;6852:19;;;;6834:37;;6356:540;6910:16;;;6906:425;;7073:12;:21;;;;;;;6906:425;;;7284:13;;;:9;:13;;;;;;;;;;:22;;;;;;6906:425;7361:2;7346:25;;7355:4;7346:25;;;7365:5;7346:25;;;;2120::8;;2108:2;2093:18;;1974:177;7346:25:2;;;;;;;;6271:1107;;;:::o;9949:432::-;10061:19;;;10057:89;;10103:32;;;;;10132:1;10103:32;;;3458:74:8;3431:18;;10103:32:2;3312:226:8;10057:89:2;10159:21;;;10155:90;;10203:31;;;;;10231:1;10203:31;;;3458:74:8;3431:18;;10203:31:2;3312:226:8;10155:90:2;10254:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10299:76;;;;10349:7;10333:31;;10342:5;10333:31;;;10358:5;10333:31;;;;2120:25:8;;2108:2;2093:18;;1974:177;10333:31:2;;;;;;;;9949:432;;;;:::o;13714:625:7:-;13857:20;;;;;;;:14;:20;;;;;;;;13856:21;:56;;;;-1:-1:-1;13894:18:7;;;;;;;:14;:18;;;;;;;;13893:19;13856:56;:99;;;;-1:-1:-1;13944:10:7;13929:26;;;;:14;:26;;;;;;;;13928:27;13856:99;13839:453;;;14011:20;;;13980:11;14011:20;;;:14;:20;;;;;;14035:6;;14003:29;;14011:20;;14003:7;:29::i;:::-;13994:38;;:6;:38;:::i;:::-;:47;;;;:::i;:::-;13980:61;;14055:39;14069:4;14083;14090:3;14055:13;:39::i;:::-;14182:18;;;;;;;:14;:18;;;;;;14136:13;;;;;14182:18;;14178:104;;;14234:33;14246:20;:18;:20::i;:::-;14234:11;:33::i;:::-;13966:326;13839:453;14301:31;14315:4;14321:2;14325:6;14301:13;:31::i;3074:287:6:-;3200:47;3229:4;3235:11;3200:28;:47::i;:::-;3257:58;;;;;3291:4;3257:58;;;6972:34:8;6921:42;3298:4:6;7042:15:8;7022:18;;;7015:43;7074:18;;;7067:34;;;1198:42:6;;3257:25;;6884:18:8;;3257:58:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3325:29:6;;;;;:25;3476:55:8;;;3325:29:6;;;3458:74:8;3340:4:6;3325:25;;;;3431:18:8;;3325:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3074:287;;;:::o;5954:383::-;6027:12;6269:1;6266;6263;6260;6252:6;6248:2;6241:5;6236:35;6225:46;;6299:7;6291:39;;;;;;;7564:2:8;6291:39:6;;;7546:21:8;7603:2;7583:18;;;7576:30;7642:21;7622:18;;;7615:49;7681:18;;6291:39:6;7362:343:8;15218:225:7;1514:6;1483:27;600:5;1406:19;1483:27;:::i;:::-;1482:38;;;;:::i;:::-;15325:29;;:11;:29;:::i;:::-;15310:12;;15301:4;3364:7:2;3390:18;;;;;;;;;;;15283:39:7;;;;:::i;:::-;:71;15279:108;;;15218:225;:::o;15279:108::-;15423:12;;15397:39;;15410:11;;15423:12;;1895:15:6;1913:27;1928:11;1913:14;:27::i;:::-;1895:45;;1950:47;1979:4;1985:11;1950:28;:47::i;:::-;2094:4;2079:25;;;2105:13;:30;;2125:10;2105:30;;;2121:1;2105:30;2137:13;:30;;2166:1;2137:30;;;2153:10;2137:30;2183:12;;;2193:1;2183:12;;;;;;;;;2079:117;;;;;;;;;;;;;2169:12;;2079:117;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2206:55:6;;;;;6921:42:8;2232:12:6;6990:15:8;;2206:55:6;;;6972:34:8;7042:15;;7022:18;;;7015:43;7074:18;;;7067:34;;;1198:42:6;;-1:-1:-1;2206:25:6;;-1:-1:-1;6884:18:8;;2206:55:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4695:393::-;4773:15;4801:17;4820:16;4840:13;:11;:13::i;:::-;4800:53;;-1:-1:-1;4800:53:6;-1:-1:-1;4863:23:6;4889:16;:10;4902:3;4889:16;:::i;:::-;4863:42;-1:-1:-1;4915:14:6;4932:32;4953:11;4863:42;4932:32;:::i;:::-;4915:49;-1:-1:-1;4974:16:6;5017:18;4994:19;:12;5009:4;4994:19;:::i;:::-;4993:42;;;;:::i;:::-;4974:61;-1:-1:-1;5058:23:6;4974:61;5058:9;:23;:::i;:::-;5045:36;4695:393;-1:-1:-1;;;;;;;4695:393:6:o;14:482:8:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;485:4;415:66;410:2;402:6;398:15;394:88;389:3;385:98;381:109;374:116;;;14:482;;;;:::o;501:220::-;650:2;639:9;632:21;613:4;670:45;711:2;700:9;696:18;688:6;670:45;:::i;:::-;662:53;501:220;-1:-1:-1;;;501:220:8:o;726:196::-;794:20;;854:42;843:54;;833:65;;823:93;;912:1;909;902:12;823:93;726:196;;;:::o;927:254::-;995:6;1003;1056:2;1044:9;1035:7;1031:23;1027:32;1024:52;;;1072:1;1069;1062:12;1024:52;1095:29;1114:9;1095:29;:::i;:::-;1085:39;1171:2;1156:18;;;;1143:32;;-1:-1:-1;;;927:254:8:o;1378:184::-;1430:77;1427:1;1420:88;1527:4;1524:1;1517:15;1551:4;1548:1;1541:15;1567:402;1716:2;1701:18;;1749:1;1738:13;;1728:201;;1785:77;1782:1;1775:88;1886:4;1883:1;1876:15;1914:4;1911:1;1904:15;1728:201;1938:25;;;1567:402;:::o;2156:186::-;2215:6;2268:2;2256:9;2247:7;2243:23;2239:32;2236:52;;;2284:1;2281;2274:12;2236:52;2307:29;2326:9;2307:29;:::i;2347:328::-;2424:6;2432;2440;2493:2;2481:9;2472:7;2468:23;2464:32;2461:52;;;2509:1;2506;2499:12;2461:52;2532:29;2551:9;2532:29;:::i;:::-;2522:39;;2580:38;2614:2;2603:9;2599:18;2580:38;:::i;:::-;2570:48;;2665:2;2654:9;2650:18;2637:32;2627:42;;2347:328;;;;;:::o;2680:118::-;2766:5;2759:13;2752:21;2745:5;2742:32;2732:60;;2788:1;2785;2778:12;2803:315;2868:6;2876;2929:2;2917:9;2908:7;2904:23;2900:32;2897:52;;;2945:1;2942;2935:12;2897:52;2968:29;2987:9;2968:29;:::i;:::-;2958:39;;3047:2;3036:9;3032:18;3019:32;3060:28;3082:5;3060:28;:::i;:::-;3107:5;3097:15;;;2803:315;;;;;:::o;3543:260::-;3611:6;3619;3672:2;3660:9;3651:7;3647:23;3643:32;3640:52;;;3688:1;3685;3678:12;3640:52;3711:29;3730:9;3711:29;:::i;:::-;3701:39;;3759:38;3793:2;3782:9;3778:18;3759:38;:::i;:::-;3749:48;;3543:260;;;;;:::o;3808:180::-;3867:6;3920:2;3908:9;3899:7;3895:23;3891:32;3888:52;;;3936:1;3933;3926:12;3888:52;-1:-1:-1;3959:23:8;;3808:180;-1:-1:-1;3808:180:8:o;3993:248::-;4061:6;4069;4122:2;4110:9;4101:7;4097:23;4093:32;4090:52;;;4138:1;4135;4128:12;4090:52;-1:-1:-1;;4161:23:8;;;4231:2;4216:18;;;4203:32;;-1:-1:-1;3993:248:8:o;4246:184::-;4298:77;4295:1;4288:88;4395:4;4392:1;4385:15;4419:4;4416:1;4409:15;4435:125;4500:9;;;4521:10;;;4518:36;;;4534:18;;:::i;4565:168::-;4638:9;;;4669;;4686:15;;;4680:22;;4666:37;4656:71;;4707:18;;:::i;4738:274::-;4778:1;4804;4794:189;;4839:77;4836:1;4829:88;4940:4;4937:1;4930:15;4968:4;4965:1;4958:15;4794:189;-1:-1:-1;4997:9:8;;4738:274::o;5017:437::-;5096:1;5092:12;;;;5139;;;5160:61;;5214:4;5206:6;5202:17;5192:27;;5160:61;5267:2;5259:6;5256:14;5236:18;5233:38;5230:218;;5304:77;5301:1;5294:88;5405:4;5402:1;5395:15;5433:4;5430:1;5423:15;5230:218;;5017:437;;;:::o;5459:128::-;5526:9;;;5547:11;;;5544:37;;;5561:18;;:::i;6218:188::-;6297:13;;6350:30;6339:42;;6329:53;;6319:81;;6396:1;6393;6386:12;6411:293;6490:6;6498;6551:2;6539:9;6530:7;6526:23;6522:32;6519:52;;;6567:1;6564;6557:12;6519:52;6590:40;6620:9;6590:40;:::i;:::-;6580:50;;6649:49;6694:2;6683:9;6679:18;6649:49;:::i;7112:245::-;7179:6;7232:2;7220:9;7211:7;7207:23;7203:32;7200:52;;;7248:1;7245;7238:12;7200:52;7280:9;7274:16;7299:28;7321:5;7299:28;:::i;7899:482::-;8130:6;8119:9;8112:25;8173:6;8168:2;8157:9;8153:18;8146:34;8228:42;8220:6;8216:55;8211:2;8200:9;8196:18;8189:83;8308:3;8303:2;8292:9;8288:18;8281:31;8093:4;8329:46;8370:3;8359:9;8355:19;8347:6;8329:46;:::i
Swarm Source
ipfs://785200f3783e1e7f98cc5338d4fc4ca532017957c46ef46db458a4bfb41c27fd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.