Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
20,000,000,000,000 SHIP
Holders
116
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
200,000,000,000 SHIPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ShinaPrinter
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/** *Submitted for verification at Etherscan.io on 2022-03-26 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.7; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); } interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IUniswapV2Router02 router; IERC20 public RewardToken; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 30 minutes; uint256 public minDistribution = 50000000 * (10 ** 18); uint256 currentIndex; bool initialized; modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router, address _reflectionToken, address token) { router = IUniswapV2Router02(_router); RewardToken = IERC20(_reflectionToken); _token = token; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken { minPeriod = newMinPeriod; minDistribution = newMinDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 balanceBefore = RewardToken.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(RewardToken); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 iterations = 0; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); RewardToken.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend() external { require(shouldDistribute(msg.sender), "Too soon. Need to wait!"); distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } contract ShinaPrinter is Context, IERC20, IERC20Metadata { using SafeMath for uint256; IDividendDistributor public dividendDistributor; uint256 distributorGas = 500000; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; bool public restrictWhales = true; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isLimitExempt; mapping (address => bool) public isDividendExempt; uint256 public reflectionFee; uint256 public lpFee; uint256 public devFee; uint256 public totalFee; IUniswapV2Router02 public router; address public pair; address public tokenOwner; address payable public devWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _walletMax; uint256 public swapThreshold; constructor(uint256 initialSupply, address reflectionToken, address routerAddress) { tokenOwner = msg.sender; _name = "Shina Printer"; _symbol = "SHIP"; _totalSupply += initialSupply; _balances[tokenOwner] += initialSupply; _walletMax = initialSupply / 100 * 1; swapThreshold = initialSupply / 100 * 1; router = IUniswapV2Router02(routerAddress); pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this)); _allowances[address(this)][address(router)] = type(uint256).max; dividendDistributor = new DividendDistributor(routerAddress, reflectionToken, address(this)); isFeeExempt[address(this)] = true; isFeeExempt[tokenOwner] = true; isLimitExempt[address(this)] = true; isLimitExempt[address(dividendDistributor)] = true; isLimitExempt[pair] = true; isLimitExempt[DEAD] = true; isLimitExempt[ZERO] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; isDividendExempt[ZERO] = true; reflectionFee = 6; lpFee = 2; devFee = 4; totalFee = devFee.add(lpFee).add(reflectionFee); devWallet = payable(tokenOwner); } modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyOwner() { require(tokenOwner == _msgSender(), "Ownable: caller is not the owner"); _; } //Owner functions function changeFees(uint256 initialReflectionFee, uint256 initialLpFee, uint256 initialDevFee) external onlyOwner { reflectionFee = initialReflectionFee; lpFee = initialLpFee; devFee = initialDevFee; totalFee = devFee.add(lpFee).add(reflectionFee); require(totalFee <= 12, "Too high fee"); } function changeWalletLimit(uint256 newLimit) external onlyOwner { _walletMax = newLimit; } function changeRestrictWhales(bool newValue) external onlyOwner { restrictWhales = newValue; } function changeIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setDevWallet(address payable newDevWallet) external onlyOwner { devWallet = payable(newDevWallet); } function setOwnerWallet(address payable newOwnerWallet) external onlyOwner { tokenOwner = newOwnerWallet; } function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external onlyOwner { dividendDistributor.setDistributionCriteria(newMinPeriod, newMinDistribution); } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); } if(!isLimitExempt[recipient] && restrictWhales) { require(_balances[recipient].add(amount) <= _walletMax, "wallet"); } if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, amount) : amount; _balances[recipient] = _balances[recipient].add(finalAmount); // Dividend tracker if(!isDividendExempt[sender]) { try dividendDistributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} } try dividendDistributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function takeFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeAmount = amount.mul(totalFee).div(100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify = tokensToLiquify.mul(lpFee).div(totalFee).div(2); uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; uint256 devBalance = amountETH.mul(devFee).div(totalFee); uint256 amountEthLiquidity = amountETH.mul(lpFee).div(totalFee).div(2); uint256 amountEthReflection = amountETH.sub(devBalance).sub(amountEthLiquidity); if(amountETH > 0){ devWallet.transfer(devBalance); try dividendDistributor.deposit{value: amountEthReflection}() {} catch {} if(amountToLiquify > 0){ router.addLiquidityETH{value: amountEthLiquidity}( address(this), amountToLiquify, 0, 0, DEAD, block.timestamp ); } } } receive() external payable { } }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"reflectionToken","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_walletMax","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialReflectionFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","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":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526207a120600155600780546001600160a01b03191661dead179055600880546001600160a81b031916600160a01b1790556013805460ff60a81b1916600160a81b1790553480156200005557600080fd5b50604051620034a5380380620034a5833981016040819052620000789162000617565b601280546001600160a01b0319163317905560408051808201909152600d8082526c29b434b73090283934b73a32b960991b6020909201918252620000c09160059162000528565b50604080518082019091526004808252630534849560e41b6020909201918252620000ee9160069162000528565b50826004600082825462000103919062000658565b90915550506012546001600160a01b0316600090815260026020526040812080548592906200013490849062000658565b9091555062000147905060648462000673565b6200015490600162000696565b6014556200016460648462000673565b6200017190600162000696565b601555601080546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620001c957600080fd5b505afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002049190620005f9565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026157600080fd5b505afa15801562000276573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029c9190620005f9565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620002e457600080fd5b505af1158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f9190620005f9565b601180546001600160a01b0319166001600160a01b03928316179055306000818152600360209081526040808320601054909516835293905282902060001990559051829184916200037190620005b7565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015620003ae573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392831617815530808252600960209081526040808420805460ff199081166001908117909255601254871686528286208054821683179055848652600a8452828620805482168317905585548716865282862080548216831790556011805488168752838720805483168417905560078054891688528488208054841685179055600880548a1689528589208054851686179055915489168852600b86528488208054841685179055958752838720805483168417905594548716865282862080548216831790559354909516845290922080549091169092179091556006600c8190556002600d8190556004600e819055620004e593620004d1929062000513811b62000e1c17901c565b6200051360201b62000e1c1790919060201c565b600f555050601254601380546001600160a01b0319166001600160a01b03909216919091179055506200070b565b600062000521828462000658565b9392505050565b8280546200053690620006b8565b90600052602060002090601f0160209004810192826200055a5760008555620005a5565b82601f106200057557805160ff1916838001178555620005a5565b82800160010185558215620005a5579182015b82811115620005a557825182559160200191906001019062000588565b50620005b3929150620005c5565b5090565b610fdd80620024c883390190565b5b80821115620005b35760008155600101620005c6565b80516001600160a01b0381168114620005f457600080fd5b919050565b6000602082840312156200060c57600080fd5b6200052182620005dc565b6000806000606084860312156200062d57600080fd5b835192506200063f60208501620005dc565b91506200064f60408501620005dc565b90509250925092565b600082198211156200066e576200066e620006f5565b500190565b6000826200069157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620006b357620006b3620006f5565b500290565b600181811c90821680620006cd57607f821691505b60208210811415620006ef57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b611dad806200071b6000396000f3fe6080604052600436106102535760003560e01c806370a0823111610138578063a457c2d7116100b0578063bad3ea6a1161007f578063dd62ed3e11610064578063dd62ed3e146106a5578063e66b1d1e146106eb578063f887ea401461070b57600080fd5b8063bad3ea6a14610665578063bb542ef01461068557600080fd5b8063a457c2d7146105d5578063a8aa1b31146105f5578063a9059cbb14610615578063b0c150af1461063557600080fd5b806383ad79941161010757806395d89b41116100ec57806395d89b4114610580578063a3a2e89e14610595578063a3e67610146105b557600080fd5b806383ad7994146105325780638ea5220f1461054857600080fd5b806370a08231146104a65780637a319590146104dc5780637db1342c146104fc578063807c2d9c1461051c57600080fd5b8063313ce567116101cb5780634355855a1161019a5780634a74bb021161017f5780634a74bb02146104595780636827e7641461047a578063704ce43e1461049057600080fd5b80634355855a1461040857806344de2e4c1461043857600080fd5b8063313ce5671461037c57806339509351146103985780633dab5269146103b85780633f4218e0146103d857600080fd5b80631df4ccfc1161022257806323b872dd1161020757806323b872dd146103275780632b112e49146103475780632d48e8961461035c57600080fd5b80631df4ccfc146102ef5780631f53ac021461030557600080fd5b80630445b6671461025f57806306fdde0314610288578063095ea7b3146102aa57806318160ddd146102da57600080fd5b3661025a57005b600080fd5b34801561026b57600080fd5b5061027560155481565b6040519081526020015b60405180910390f35b34801561029457600080fd5b5061029d61072b565b60405161027f9190611bc2565b3480156102b657600080fd5b506102ca6102c5366004611aca565b6107bd565b604051901515815260200161027f565b3480156102e657600080fd5b50600454610275565b3480156102fb57600080fd5b50610275600f5481565b34801561031157600080fd5b506103256103203660046119e1565b6107d5565b005b34801561033357600080fd5b506102ca610342366004611a54565b610863565b34801561035357600080fd5b5061027561088a565b34801561036857600080fd5b50610325610377366004611b46565b6108dc565b34801561038857600080fd5b506040516009815260200161027f565b3480156103a457600080fd5b506102ca6103b3366004611aca565b6109b8565b3480156103c457600080fd5b506103256103d3366004611b11565b6109f7565b3480156103e457600080fd5b506102ca6103f33660046119e1565b60096020526000908152604090205460ff1681565b34801561041457600080fd5b506102ca6104233660046119e1565b600b6020526000908152604090205460ff1681565b34801561044457600080fd5b506008546102ca90600160a01b900460ff1681565b34801561046557600080fd5b506013546102ca90600160a81b900460ff1681565b34801561048657600080fd5b50610275600e5481565b34801561049c57600080fd5b50610275600d5481565b3480156104b257600080fd5b506102756104c13660046119e1565b6001600160a01b031660009081526002602052604090205490565b3480156104e857600080fd5b506103256104f7366004611b68565b610a8e565b34801561050857600080fd5b50610325610517366004611b2d565b610b65565b34801561052857600080fd5b5061027560145481565b34801561053e57600080fd5b50610275600c5481565b34801561055457600080fd5b50601354610568906001600160a01b031681565b6040516001600160a01b03909116815260200161027f565b34801561058c57600080fd5b5061029d610bc4565b3480156105a157600080fd5b506103256105b0366004611a95565b610bd3565b3480156105c157600080fd5b50601254610568906001600160a01b031681565b3480156105e157600080fd5b506102ca6105f0366004611aca565b610c58565b34801561060157600080fd5b50601154610568906001600160a01b031681565b34801561062157600080fd5b506102ca610630366004611aca565b610d0d565b34801561064157600080fd5b506102ca6106503660046119e1565b600a6020526000908152604090205460ff1681565b34801561067157600080fd5b50600054610568906001600160a01b031681565b34801561069157600080fd5b506103256106a03660046119e1565b610d1b565b3480156106b157600080fd5b506102756106c0366004611a1b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156106f757600080fd5b50610325610706366004611af6565b610da4565b34801561071757600080fd5b50601054610568906001600160a01b031681565b60606005805461073a90611cf8565b80601f016020809104026020016040519081016040528092919081815260200182805461076690611cf8565b80156107b35780601f10610788576101008083540402835291602001916107b3565b820191906000526020600020905b81548152906001019060200180831161079657829003601f168201915b5050505050905090565b6000336107cb818585610e28565b5060019392505050565b6012546001600160a01b031633146108345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600033610871858285610f80565b61087c858585611012565b5060019150505b9392505050565b6008546001600160a01b03166000908152600260205260408120546108d7906007546001600160a01b03166000908152600260205260409020546108d19060045490611436565b90611436565b905090565b6012546001600160a01b031633146109365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b6000546040517f2d48e89600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561099c57600080fd5b505af11580156109b0573d6000803e3d6000fd5b505050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091906107cb90829086906109f2908790611c88565b610e28565b6012546001600160a01b03163314610a515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b60138054921515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff90931692909217909155601555565b6012546001600160a01b03163314610ae85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b600c839055600d829055600e819055610b0b83610b058385610e1c565b90610e1c565b600f819055600c1015610b605760405162461bcd60e51b815260206004820152600c60248201527f546f6f2068696768206665650000000000000000000000000000000000000000604482015260640161082b565b505050565b6012546001600160a01b03163314610bbf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b601455565b60606006805461073a90611cf8565b6012546001600160a01b03163314610c2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490919083811015610cf55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161082b565b610d028286868403610e28565b506001949350505050565b600033610d02818585611012565b6012546001600160a01b03163314610d755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6012546001600160a01b03163314610dfe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b60088054911515600160a01b0260ff60a01b19909216919091179055565b60006108838284611c88565b6001600160a01b038316610ea35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161082b565b6001600160a01b038216610f1f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161082b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260036020908152604080832093861683529290522054600019811461100c5781811015610fff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161082b565b61100c8484848403610e28565b50505050565b601354600090600160a01b900460ff161561103957611032848484611442565b9050610883565b6001600160a01b0383166000908152600a602052604090205460ff1615801561106b5750600854600160a01b900460ff165b156110e4576014546001600160a01b0384166000908152600260205260409020546110969084610e1c565b11156110e45760405162461bcd60e51b815260206004820152600660248201527f77616c6c65740000000000000000000000000000000000000000000000000000604482015260640161082b565b6011546001600160a01b031633148015906111095750601354600160a01b900460ff16155b801561111e5750601354600160a81b900460ff165b801561113b57506015543060009081526002602052604090205410155b1561114857611148611531565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b0387166000908152600290915291909120546111a39184906118e3565b6001600160a01b038516600090815260026020908152604080832093909355600990529081205460ff161580156111f357506001600160a01b03841660009081526009602052604090205460ff16155b6111fd5782611207565b611207858461190f565b6001600160a01b03851660009081526002602052604090205490915061122d9082610e1c565b6001600160a01b038086166000908152600260209081526040808320949094559188168152600b909152205460ff166112d257600080546001600160a01b038781168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156112bf57600080fd5b505af19250505080156112d0575060015b505b6001600160a01b0384166000908152600b602052604090205460ff1661136457600080546001600160a01b038681168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b15801561135157600080fd5b505af1925050508015611362575060015b505b6000546001546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c479916113b29160040190815260200190565b600060405180830381600087803b1580156113cc57600080fd5b505af19250505080156113dd575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161142391815260200190565b60405180910390a3506001949350505050565b60006108838284611ce1565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b038616600090815260029091529182205461149c9184906118e3565b6001600160a01b0380861660009081526002602052604080822093909355908516815220546114cb9083610e1c565b6001600160a01b0380851660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061151f9086815260200190565b60405180910390a35060019392505050565b6013805460ff60a01b1916600160a01b179055306000908152600260208190526040822054600f54600d5491939261157892909161157291829087906119b4565b906119c0565b905060006115868383611436565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106115c0576115c0611d49565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561162d57600080fd5b505afa158015611641573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166591906119fe565b8160018151811061167857611678611d49565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906116d7908590600090869030904290600401611c17565b600060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506000479050600061172b600f54611572600e54856119b490919063ffffffff16565b9050600061174f6002611572600f54611572600d54886119b490919063ffffffff16565b90506000611761826108d18686611436565b905083156118cc576013546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156117a3573d6000803e3d6000fd5b5060008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117f257600080fd5b505af193505050508015611804575060015b5086156118cc576010546007546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c4016060604051808303818588803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118c89190611b94565b5050505b50506013805460ff60a01b19169055505050505050565b600081848411156119075760405162461bcd60e51b815260040161082b9190611bc2565b505050900390565b60008061192c6064611572600f54866119b490919063ffffffff16565b306000908152600260205260409020549091506119499082610e1c565b30600081815260026020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061199a9085815260200190565b60405180910390a36119ac8382611436565b949350505050565b60006108838284611cc2565b60006108838284611ca0565b803580151581146119dc57600080fd5b919050565b6000602082840312156119f357600080fd5b813561088381611d5f565b600060208284031215611a1057600080fd5b815161088381611d5f565b60008060408385031215611a2e57600080fd5b8235611a3981611d5f565b91506020830135611a4981611d5f565b809150509250929050565b600080600060608486031215611a6957600080fd5b8335611a7481611d5f565b92506020840135611a8481611d5f565b929592945050506040919091013590565b60008060408385031215611aa857600080fd5b8235611ab381611d5f565b9150611ac1602084016119cc565b90509250929050565b60008060408385031215611add57600080fd5b8235611ae881611d5f565b946020939093013593505050565b600060208284031215611b0857600080fd5b610883826119cc565b60008060408385031215611b2457600080fd5b611ae8836119cc565b600060208284031215611b3f57600080fd5b5035919050565b60008060408385031215611b5957600080fd5b50508035926020909101359150565b600080600060608486031215611b7d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611ba957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015611bef57858101830151858201604001528201611bd3565b81811115611c01576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c675784516001600160a01b031683529383019391830191600101611c42565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611c9b57611c9b611d33565b500190565b600082611cbd57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611cdc57611cdc611d33565b500290565b600082821015611cf357611cf3611d33565b500390565b600181811c90821680611d0c57607f821691505b60208210811415611d2d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611d7457600080fd5b5056fea2646970667358221220c969026d7f7d46640c20e91ec895f3b5545c010d9247d2a606091fddfcffc60664736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600b55610708600c556a295be96e64066972000000600d5534801561003857600080fd5b50604051610fdd380380610fdd833981016040819052610057916100b5565b600180546001600160a01b039485166001600160a01b0319918216179091556002805493851693821693909317909255600080549190931691161790556100f8565b80516001600160a01b03811681146100b057600080fd5b919050565b6000806000606084860312156100ca57600080fd5b6100d384610099565b92506100e160208501610099565b91506100ef60408501610099565b90509250925092565b610ed6806101076000396000f3fe6080604052600436106100e85760003560e01c8063ce7c2ac21161008a578063f0fc6bca11610059578063f0fc6bca14610245578063f1e9f1e51461025a578063ffb2c47914610292578063ffd49c84146102b257600080fd5b8063ce7c2ac2146101ba578063d0e30db014610211578063e2d2e21914610219578063efca2eed1461022f57600080fd5b80632d48e896116100c65780632d48e896146101585780633a98ef39146101785780634fab0ae81461018e578063997664d7146101a457600080fd5b806311ce023d146100ed57806314b6ca961461011657806328fd319814610138575b600080fd5b3480156100f957600080fd5b50610103600b5481565b6040519081526020015b60405180910390f35b34801561012257600080fd5b50610136610131366004610cb2565b6102c8565b005b34801561014457600080fd5b50610103610153366004610c78565b61044d565b34801561016457600080fd5b50610136610173366004610d32565b6104d6565b34801561018457600080fd5b5061010360075481565b34801561019a57600080fd5b50610103600d5481565b3480156101b057600080fd5b5061010360085481565b3480156101c657600080fd5b506101f66101d5366004610c78565b60066020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161010d565b6101366104f8565b34801561022557600080fd5b50610103600a5481565b34801561023b57600080fd5b5061010360095481565b34801561025157600080fd5b506101366107e7565b34801561026657600080fd5b5060025461027a906001600160a01b031681565b6040516001600160a01b03909116815260200161010d565b34801561029e57600080fd5b506101366102ad366004610d00565b610865565b3480156102be57600080fd5b50610103600c5481565b6000546001600160a01b031633146102df57600080fd5b6001600160a01b038216600090815260066020526040902054156103065761030682610966565b60008111801561032c57506001600160a01b038216600090815260066020526040902054155b1561039f57600380546001600160a01b0384166000818152600460205260408120839055600183018455929092527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556103d2565b801580156103c457506001600160a01b03821660009081526006602052604090205415155b156103d2576103d282610aaa565b6001600160a01b0382166000908152600660205260409020546007546104039183916103fd91610bd9565b90610bec565b6007556001600160a01b038216600090815260066020526040902081905561042a81610bf8565b6001600160a01b0390921660009081526006602052604090206001019190915550565b6001600160a01b03811660009081526006602052604081205461047257506000919050565b6001600160a01b03821660009081526006602052604081205461049490610bf8565b6001600160a01b0384166000908152600660205260409020600101549091508082116104c4575060009392505050565b6104ce8282610bd9565b949350505050565b6000546001600160a01b031633146104ed57600080fd5b600c91909155600d55565b6000546001600160a01b0316331461050f57600080fd5b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561055357600080fd5b505afa158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b9190610d19565b60408051600280825260608201835292935060009290916020830190803683375050600154604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561060e57600080fd5b505afa158015610622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106469190610c95565b8160008151811061065957610659610e75565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061068a5761068a610e75565b6001600160a01b0392831660209182029290920101526001546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de959034906106e990600090869030904290600401610d54565b6000604051808303818588803b15801561070257600080fd5b505af1158015610716573d6000803e3d6000fd5b50506002546040516370a0823160e01b8152306004820152600094506107a593508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561076757600080fd5b505afa15801561077b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079f9190610d19565b90610bd9565b6008549091506107b59082610bec565b600855600754600b546107df916107d6916107d09085610c1b565b90610c27565b600a5490610bec565b600a55505050565b6107f033610c33565b61085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015260640160405180910390fd5b61086333610966565b565b6000546001600160a01b0316331461087c57600080fd5b60035480610888575050565b60008060005a90505b848210801561089f57508383105b1561095e5783600e54106108b3576000600e555b6108e56003600e54815481106108cb576108cb610e75565b6000918252602090912001546001600160a01b0316610c33565b1561091c5761091c6003600e548154811061090257610902610e75565b6000918252602090912001546001600160a01b0316610966565b61093161092a5a8390610bd9565b8390610bec565b91505a600e8054919250600061094683610e2e565b9190505550828061095690610e2e565b935050610891565b505050505b50565b6001600160a01b0381166000908152600660205260409020546109865750565b60006109918261044d565b90508015610aa6576009546109a69082610bec565b6009556002546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015610a1057600080fd5b505af1158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a489190610cde565b506001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610a7c9082610bec565b6001600160a01b038316600090815260066020526040902060028101919091555461042a90610bf8565b5050565b60038054610aba90600190610e17565b81548110610aca57610aca610e75565b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610b0857610b08610e75565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03948516179055918316815260049182905260408120546003805491939291610b6190600190610e17565b81548110610b7157610b71610e75565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610ba757610ba7610e5f565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905550565b6000610be58284610e17565b9392505050565b6000610be58284610dbe565b6000610c15600b546107d0600a5485610c1b90919063ffffffff16565b92915050565b6000610be58284610df8565b6000610be58284610dd6565b600c546001600160a01b03821660009081526005602052604081205490914291610c5d9190610dbe565b108015610c155750600d54610c718361044d565b1192915050565b600060208284031215610c8a57600080fd5b8135610be581610e8b565b600060208284031215610ca757600080fd5b8151610be581610e8b565b60008060408385031215610cc557600080fd5b8235610cd081610e8b565b946020939093013593505050565b600060208284031215610cf057600080fd5b81518015158114610be557600080fd5b600060208284031215610d1257600080fd5b5035919050565b600060208284031215610d2b57600080fd5b5051919050565b60008060408385031215610d4557600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d9e5784516001600160a01b031683529383019391830191600101610d79565b50506001600160a01b039690961660408501525050506060015292915050565b60008219821115610dd157610dd1610e49565b500190565b600082610df357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610e1257610e12610e49565b500290565b600082821015610e2957610e29610e49565b500390565b6000600019821415610e4257610e42610e49565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461096357600080fdfea2646970667358221220167f3e6c2aa820eaad655db22c1d922676877fd48b6ec3504b6b8e09b6c386ee64736f6c6343000807003300000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000243cacb4d5ff6814ad668c3e225246efa886ad5a0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106102535760003560e01c806370a0823111610138578063a457c2d7116100b0578063bad3ea6a1161007f578063dd62ed3e11610064578063dd62ed3e146106a5578063e66b1d1e146106eb578063f887ea401461070b57600080fd5b8063bad3ea6a14610665578063bb542ef01461068557600080fd5b8063a457c2d7146105d5578063a8aa1b31146105f5578063a9059cbb14610615578063b0c150af1461063557600080fd5b806383ad79941161010757806395d89b41116100ec57806395d89b4114610580578063a3a2e89e14610595578063a3e67610146105b557600080fd5b806383ad7994146105325780638ea5220f1461054857600080fd5b806370a08231146104a65780637a319590146104dc5780637db1342c146104fc578063807c2d9c1461051c57600080fd5b8063313ce567116101cb5780634355855a1161019a5780634a74bb021161017f5780634a74bb02146104595780636827e7641461047a578063704ce43e1461049057600080fd5b80634355855a1461040857806344de2e4c1461043857600080fd5b8063313ce5671461037c57806339509351146103985780633dab5269146103b85780633f4218e0146103d857600080fd5b80631df4ccfc1161022257806323b872dd1161020757806323b872dd146103275780632b112e49146103475780632d48e8961461035c57600080fd5b80631df4ccfc146102ef5780631f53ac021461030557600080fd5b80630445b6671461025f57806306fdde0314610288578063095ea7b3146102aa57806318160ddd146102da57600080fd5b3661025a57005b600080fd5b34801561026b57600080fd5b5061027560155481565b6040519081526020015b60405180910390f35b34801561029457600080fd5b5061029d61072b565b60405161027f9190611bc2565b3480156102b657600080fd5b506102ca6102c5366004611aca565b6107bd565b604051901515815260200161027f565b3480156102e657600080fd5b50600454610275565b3480156102fb57600080fd5b50610275600f5481565b34801561031157600080fd5b506103256103203660046119e1565b6107d5565b005b34801561033357600080fd5b506102ca610342366004611a54565b610863565b34801561035357600080fd5b5061027561088a565b34801561036857600080fd5b50610325610377366004611b46565b6108dc565b34801561038857600080fd5b506040516009815260200161027f565b3480156103a457600080fd5b506102ca6103b3366004611aca565b6109b8565b3480156103c457600080fd5b506103256103d3366004611b11565b6109f7565b3480156103e457600080fd5b506102ca6103f33660046119e1565b60096020526000908152604090205460ff1681565b34801561041457600080fd5b506102ca6104233660046119e1565b600b6020526000908152604090205460ff1681565b34801561044457600080fd5b506008546102ca90600160a01b900460ff1681565b34801561046557600080fd5b506013546102ca90600160a81b900460ff1681565b34801561048657600080fd5b50610275600e5481565b34801561049c57600080fd5b50610275600d5481565b3480156104b257600080fd5b506102756104c13660046119e1565b6001600160a01b031660009081526002602052604090205490565b3480156104e857600080fd5b506103256104f7366004611b68565b610a8e565b34801561050857600080fd5b50610325610517366004611b2d565b610b65565b34801561052857600080fd5b5061027560145481565b34801561053e57600080fd5b50610275600c5481565b34801561055457600080fd5b50601354610568906001600160a01b031681565b6040516001600160a01b03909116815260200161027f565b34801561058c57600080fd5b5061029d610bc4565b3480156105a157600080fd5b506103256105b0366004611a95565b610bd3565b3480156105c157600080fd5b50601254610568906001600160a01b031681565b3480156105e157600080fd5b506102ca6105f0366004611aca565b610c58565b34801561060157600080fd5b50601154610568906001600160a01b031681565b34801561062157600080fd5b506102ca610630366004611aca565b610d0d565b34801561064157600080fd5b506102ca6106503660046119e1565b600a6020526000908152604090205460ff1681565b34801561067157600080fd5b50600054610568906001600160a01b031681565b34801561069157600080fd5b506103256106a03660046119e1565b610d1b565b3480156106b157600080fd5b506102756106c0366004611a1b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156106f757600080fd5b50610325610706366004611af6565b610da4565b34801561071757600080fd5b50601054610568906001600160a01b031681565b60606005805461073a90611cf8565b80601f016020809104026020016040519081016040528092919081815260200182805461076690611cf8565b80156107b35780601f10610788576101008083540402835291602001916107b3565b820191906000526020600020905b81548152906001019060200180831161079657829003601f168201915b5050505050905090565b6000336107cb818585610e28565b5060019392505050565b6012546001600160a01b031633146108345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600033610871858285610f80565b61087c858585611012565b5060019150505b9392505050565b6008546001600160a01b03166000908152600260205260408120546108d7906007546001600160a01b03166000908152600260205260409020546108d19060045490611436565b90611436565b905090565b6012546001600160a01b031633146109365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b6000546040517f2d48e89600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561099c57600080fd5b505af11580156109b0573d6000803e3d6000fd5b505050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091906107cb90829086906109f2908790611c88565b610e28565b6012546001600160a01b03163314610a515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b60138054921515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff90931692909217909155601555565b6012546001600160a01b03163314610ae85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b600c839055600d829055600e819055610b0b83610b058385610e1c565b90610e1c565b600f819055600c1015610b605760405162461bcd60e51b815260206004820152600c60248201527f546f6f2068696768206665650000000000000000000000000000000000000000604482015260640161082b565b505050565b6012546001600160a01b03163314610bbf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b601455565b60606006805461073a90611cf8565b6012546001600160a01b03163314610c2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490919083811015610cf55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161082b565b610d028286868403610e28565b506001949350505050565b600033610d02818585611012565b6012546001600160a01b03163314610d755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6012546001600160a01b03163314610dfe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082b565b60088054911515600160a01b0260ff60a01b19909216919091179055565b60006108838284611c88565b6001600160a01b038316610ea35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161082b565b6001600160a01b038216610f1f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161082b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260036020908152604080832093861683529290522054600019811461100c5781811015610fff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161082b565b61100c8484848403610e28565b50505050565b601354600090600160a01b900460ff161561103957611032848484611442565b9050610883565b6001600160a01b0383166000908152600a602052604090205460ff1615801561106b5750600854600160a01b900460ff165b156110e4576014546001600160a01b0384166000908152600260205260409020546110969084610e1c565b11156110e45760405162461bcd60e51b815260206004820152600660248201527f77616c6c65740000000000000000000000000000000000000000000000000000604482015260640161082b565b6011546001600160a01b031633148015906111095750601354600160a01b900460ff16155b801561111e5750601354600160a81b900460ff165b801561113b57506015543060009081526002602052604090205410155b1561114857611148611531565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b0387166000908152600290915291909120546111a39184906118e3565b6001600160a01b038516600090815260026020908152604080832093909355600990529081205460ff161580156111f357506001600160a01b03841660009081526009602052604090205460ff16155b6111fd5782611207565b611207858461190f565b6001600160a01b03851660009081526002602052604090205490915061122d9082610e1c565b6001600160a01b038086166000908152600260209081526040808320949094559188168152600b909152205460ff166112d257600080546001600160a01b038781168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156112bf57600080fd5b505af19250505080156112d0575060015b505b6001600160a01b0384166000908152600b602052604090205460ff1661136457600080546001600160a01b038681168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b15801561135157600080fd5b505af1925050508015611362575060015b505b6000546001546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c479916113b29160040190815260200190565b600060405180830381600087803b1580156113cc57600080fd5b505af19250505080156113dd575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161142391815260200190565b60405180910390a3506001949350505050565b60006108838284611ce1565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b038616600090815260029091529182205461149c9184906118e3565b6001600160a01b0380861660009081526002602052604080822093909355908516815220546114cb9083610e1c565b6001600160a01b0380851660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061151f9086815260200190565b60405180910390a35060019392505050565b6013805460ff60a01b1916600160a01b179055306000908152600260208190526040822054600f54600d5491939261157892909161157291829087906119b4565b906119c0565b905060006115868383611436565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106115c0576115c0611d49565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561162d57600080fd5b505afa158015611641573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166591906119fe565b8160018151811061167857611678611d49565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906116d7908590600090869030904290600401611c17565b600060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506000479050600061172b600f54611572600e54856119b490919063ffffffff16565b9050600061174f6002611572600f54611572600d54886119b490919063ffffffff16565b90506000611761826108d18686611436565b905083156118cc576013546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156117a3573d6000803e3d6000fd5b5060008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117f257600080fd5b505af193505050508015611804575060015b5086156118cc576010546007546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c4016060604051808303818588803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118c89190611b94565b5050505b50506013805460ff60a01b19169055505050505050565b600081848411156119075760405162461bcd60e51b815260040161082b9190611bc2565b505050900390565b60008061192c6064611572600f54866119b490919063ffffffff16565b306000908152600260205260409020549091506119499082610e1c565b30600081815260026020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061199a9085815260200190565b60405180910390a36119ac8382611436565b949350505050565b60006108838284611cc2565b60006108838284611ca0565b803580151581146119dc57600080fd5b919050565b6000602082840312156119f357600080fd5b813561088381611d5f565b600060208284031215611a1057600080fd5b815161088381611d5f565b60008060408385031215611a2e57600080fd5b8235611a3981611d5f565b91506020830135611a4981611d5f565b809150509250929050565b600080600060608486031215611a6957600080fd5b8335611a7481611d5f565b92506020840135611a8481611d5f565b929592945050506040919091013590565b60008060408385031215611aa857600080fd5b8235611ab381611d5f565b9150611ac1602084016119cc565b90509250929050565b60008060408385031215611add57600080fd5b8235611ae881611d5f565b946020939093013593505050565b600060208284031215611b0857600080fd5b610883826119cc565b60008060408385031215611b2457600080fd5b611ae8836119cc565b600060208284031215611b3f57600080fd5b5035919050565b60008060408385031215611b5957600080fd5b50508035926020909101359150565b600080600060608486031215611b7d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611ba957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015611bef57858101830151858201604001528201611bd3565b81811115611c01576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c675784516001600160a01b031683529383019391830191600101611c42565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611c9b57611c9b611d33565b500190565b600082611cbd57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611cdc57611cdc611d33565b500290565b600082821015611cf357611cf3611d33565b500390565b600181811c90821680611d0c57607f821691505b60208210811415611d2d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611d7457600080fd5b5056fea2646970667358221220c969026d7f7d46640c20e91ec895f3b5545c010d9247d2a606091fddfcffc60664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000243cacb4d5ff6814ad668c3e225246efa886ad5a0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : initialSupply (uint256): 20000000000000000000000
Arg [1] : reflectionToken (address): 0x243cACb4D5fF6814AD668C3e225246efA886AD5a
Arg [2] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000043c33c1937564800000
Arg [1] : 000000000000000000000000243cacb4d5ff6814ad668c3e225246efa886ad5a
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
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.