Overview
ETH Balance
0.513156873938556615 ETH
Eth Value
$1,667.99 (@ $3,250.46/ETH)More Info
Private Name Tags
ContractCreator
Latest 21 from a total of 21 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Reflect Rewards | 16753220 | 510 days ago | IN | 0 ETH | 0.00098174 | ||||
Reflect Rewards | 15851936 | 636 days ago | IN | 0 ETH | 0.00056515 | ||||
Collect Share | 13183506 | 1052 days ago | IN | 0 ETH | 0.00278419 | ||||
Collect Share | 13113708 | 1063 days ago | IN | 0 ETH | 0.00108811 | ||||
Update Gas Range | 13029518 | 1076 days ago | IN | 0 ETH | 0.00081177 | ||||
Update Gas Range | 13029400 | 1076 days ago | IN | 0 ETH | 0.00090247 | ||||
Reflect Rewards | 13026834 | 1076 days ago | IN | 0 ETH | 0.01666245 | ||||
Update Gas Range | 13026701 | 1076 days ago | IN | 0 ETH | 0.00092231 | ||||
Reflect Rewards | 13026691 | 1076 days ago | IN | 0 ETH | 0.00376305 | ||||
Reflect Rewards | 13026602 | 1076 days ago | IN | 0 ETH | 0.0119079 | ||||
Deposit Eth | 13026570 | 1076 days ago | IN | 0.02 ETH | 0.00080586 | ||||
Transfer Ownersh... | 13026570 | 1076 days ago | IN | 0 ETH | 0.00127636 | ||||
Reflect Rewards | 13026449 | 1076 days ago | IN | 0 ETH | 0.00632287 | ||||
Reflect Rewards | 13026405 | 1076 days ago | IN | 0 ETH | 0.00251563 | ||||
Deposit Eth | 13026390 | 1076 days ago | IN | 0.11 ETH | 0.00129462 | ||||
Enroll Multiple | 13026252 | 1076 days ago | IN | 0 ETH | 0.13360037 | ||||
Enroll Multiple | 13026171 | 1076 days ago | IN | 0 ETH | 0.11399893 | ||||
Enroll Multiple | 13026110 | 1076 days ago | IN | 0 ETH | 0.01574976 | ||||
Exclude From Ref... | 13026081 | 1076 days ago | IN | 0 ETH | 0.00104875 | ||||
Exclude From Ref... | 13026081 | 1076 days ago | IN | 0 ETH | 0.00512224 | ||||
0x60806040 | 13026059 | 1076 days ago | IN | 0 ETH | 0.12180257 |
Latest 18 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18350306 | 285 days ago | 0.00211801 ETH | ||||
18350306 | 285 days ago | 0.00211801 ETH | ||||
18304968 | 292 days ago | 0.00039892 ETH | ||||
18304960 | 292 days ago | 0.00039336 ETH | ||||
18304960 | 292 days ago | 0.00197669 ETH | ||||
18304960 | 292 days ago | 0.00198662 ETH | ||||
18304960 | 292 days ago | 0.00159568 ETH | ||||
18304944 | 292 days ago | 0.00200462 ETH | ||||
18175826 | 310 days ago | 0.00040132 ETH | ||||
18175826 | 310 days ago | 0.00242249 ETH | ||||
18175826 | 310 days ago | 0.00202889 ETH | ||||
18175826 | 310 days ago | 0.00162963 ETH | ||||
15851936 | 636 days ago | 0.00204727 ETH | ||||
13029464 | 1076 days ago | 0.00081891 ETH | ||||
13026834 | 1076 days ago | 0.00164439 ETH | ||||
13026691 | 1076 days ago | 0.00041151 ETH | ||||
13026602 | 1076 days ago | 0.00165265 ETH | ||||
13026500 | 1076 days ago | 0.39316366 ETH |
Loading...
Loading
Contract Name:
DynaAutoEthDistributorV2
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 80 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /***************************************************************************************************************************************\ |********************************************* Welcome to the DYNAMICS ETH Reflector code **********************************************| |***************************************************************************************************************************************| |* This project supports the following: | |***************************************************************************************************************************************| |* 1. A good cause, a portion of fees are sent to charity as outlined on the Dynamics Webpage. | |* 2. Token reflections. | |* 3. Automatic Liquidity reflections. | |* 4. Automated reflections of Ethereum to hodlers. | |* 5. Token Buybacks. | |* 6. A Token airdrop system where tokens can be injected directly back into pools for Liquidity, Ethereum reflections and Buybacks. | |* 7. Burning Functions. | |* 7. An airdrop system that feeds directly into the contract. | |* 8. Multi-Tiered sell fees that encourage hodling and discourage whales/dumping. | |* 9. Buy and transfer fees separate from seller fees that support the above. |***************************************************************************************************************************************| | This particular contract is designed to hold Ethereum for the SOLE purpose of: | |* 1. Giving it to YOU!!!!! | |* 2. The more you HODL, the more your share is! | |***************************************************************************************************************************************| | Yes, we are aware that gas fees to support this are high so..... ***DRUMROLL*** | |*************** If YOU are the person whose transaction triggers a reflection payout OR a snapshot event...... | |*************** YOU will be sent a portion of eth from the pool for your contribution to the reflections...... | |*************** A small little thanks. Your reward is based on how many hodlers you process. | |*************** The more gas in your transaction, the more people are processed, the more your thank-you becomes. | |*************** And yes, if you manually trigger a reflection event on the contract, that also counts! | |***************************************************************************************************************************************| |***************************************************************************************************************************************| |******************** Fork if you dare... But seriously, if you fork just shout us out and consider our charity. :) ********************| |***************************************************************************************************************************************| |***************************************************************************************************************************************| |**************** Don't Mind the blood, sweat and tears throughout the contract, it has caused us many sleepless nights ****************| | - The Dev! | |***************************************************************************************************************************************| |***************************************************************************************************************************************| \***************************************************************************************************************************************/ import "./utils/AutomatedExternalReflector.sol"; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; contract DynaAutoEthDistributorV2 is AutomatedExternalReflector { event UpdateRouter(address indexed newAddress, address indexed oldAddress); address public deadAddress = 0x000000000000000000000000000000000000dEaD; constructor(address tokenAddress) payable { _owner = msg.sender; currentRound = 1; totalEthDeposits = address(this).balance; currentQueueIndex = 0; totalRewardsSent = 0; totalExcludedTokenHoldings = 0; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap V2 Routers (Mainnet and Ropsten) uniswapV2Router = _uniswapV2Router; maxGas = 450000; minGas = 100000; maxReflectionsPerRound = 100; timeBetweenRounds = 1 seconds; nextRoundStart = block.timestamp + 1 seconds; reflectionsEnabled = true; updateTokenAddress(tokenAddress, true); _excludeFromReflections(address(_uniswapV2Router), true); _excludeFromReflections(address(this), true); _excludeFromReflections(deadAddress, true); _excludeFromReflections(address(0), true); totalCirculatingTokens = 1 * 10 ** 12 * 10 ** 18; } function updateRouter(address newAddress, bool andPair) external onlyOwner (){ emit UpdateRouter(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); _excludeFromReflections(newAddress, true); if(andPair){ address uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(address(tokenContract), uniswapV2Router.WETH()); _excludeFromReflections(uniswapV2Pair, true); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import '@openzeppelin/contracts/utils/Address.sol'; import '@openzeppelin/contracts/utils/math/SafeMath.sol'; import '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; import '@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol'; import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol'; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import "../interfaces/ISupportingExternalReflection.sol"; import "../interfaces/IAutomatedExternalReflector.sol"; import "./Ownable.sol"; import "./LockableSwap.sol"; abstract contract AutomatedExternalReflector is Context, LockableSwap, Ownable, IAutomatedExternalReflector { using Address for address; using Address for address payable; using SafeMath for uint256; using EnumerableSet for EnumerableSet.AddressSet; event TransactionRegistered(address indexed sender, address indexed recipient); event AirdropDelivered(uint256 numberOfPayouts, uint256 totalAmount, uint256 indexAt); event RoundSnapshotTaken(uint256 totalUsersUpdated); struct User { uint256 tokenBalance; uint256 totalPayouts; uint256 pendingPayouts; bool exists; uint256 lastPayoutRound; } mapping(uint256 => uint256) public poolForRound; uint256 public currentRound; uint256 internal totalEthDeposits; uint256 public currentQueueIndex; uint256 internal totalRewardsSent; uint256 public totalCirculatingTokens; uint256 public totalExcludedTokenHoldings = 0; bool public takeSnapshot = true; bool public snapshotPending; uint256 public maxGas; uint256 public minGas; uint256 public gasRequirement = 100000; uint256 public maxReflectionsPerRound; uint256 public timeBetweenRounds; uint256 public nextRoundStart; bool public reflectionsEnabled = true; IUniswapV2Router02 public uniswapV2Router; ISupportingExternalReflection public tokenContract; EnumerableSet.AddressSet private excludedList; EnumerableSet.AddressSet private privateQueue; address payable[] internal queue; mapping(address => mapping(uint256 => User)) internal dynaHodler; mapping(address => bool) public override isExcludedFromReflections; receive() external payable { totalEthDeposits = totalEthDeposits.add(msg.value); } fallback() external payable { totalEthDeposits = totalEthDeposits.add(msg.value); } function depositEth() public payable override returns(bool success) { totalEthDeposits = totalEthDeposits.add(msg.value); success = true; } function addNewUser(address newUserAddress, uint256 bal) private { dynaHodler[newUserAddress][currentRound+1] = User(bal, 0, 0, true, currentRound); dynaHodler[newUserAddress][currentRound] = User(bal, 0, 0, true, currentRound); } function logTransactionEvent(address from, address to) external override returns (bool) { require(_msgSender() == _owner || _msgSender() == address(tokenContract), "Only Owner or Token Contract may call this function"); if(from != address(0)) { (bool success, bytes memory data) = address(tokenContract).call(abi.encodeWithSignature("balanceOf(address)",from)); if(success){ uint256 bal = abi.decode(data, (uint256)); logUserTransaction(from, bal, true); } } if(to != address(0)) { (bool success, bytes memory data) = address(tokenContract).call(abi.encodeWithSignature("balanceOf(address)",to)); if(success){ uint256 bal = abi.decode(data, (uint256)); logUserTransaction(to, bal, false); } } emit TransactionRegistered(from, to); return true; } function logUserTransaction(address user, uint256 value, bool isSender) private { if(!privateQueue.contains(user)){ privateQueue.add(user); queue.push(payable(user)); } // Dont double up and waste gas if snapshotting is enabled. if(takeSnapshot) { return; } uint256 prevUserBal = dynaHodler[user][currentRound].tokenBalance; dynaHodler[user][currentRound+1] = User({ tokenBalance: value, totalPayouts: dynaHodler[user][currentRound].totalPayouts, pendingPayouts: dynaHodler[user][currentRound].pendingPayouts, exists: true, lastPayoutRound: dynaHodler[user][currentRound].lastPayoutRound }); if(isExcludedFromReflections[user]){ if(isSender){ totalExcludedTokenHoldings = totalExcludedTokenHoldings.sub(prevUserBal.sub(value)); } else { totalExcludedTokenHoldings = totalExcludedTokenHoldings.add(value.sub(prevUserBal)); } } } function reflectRewards() external override returns (bool) { require(gasleft() > gasRequirement, "More gas is required for this function"); if(!inSwapAndLiquify) return _reflectRewards(); return false; } function snapshot() private returns (uint256){ uint256 stopProcessingAt = currentQueueIndex.add(maxReflectionsPerRound); uint256 queueLength = queue.length; uint256 startingGas = gasleft(); uint256 endGas = 0; uint256 queueStart = currentQueueIndex; uint256 gasLeft = startingGas; if(startingGas > maxGas){ endGas = startingGas.sub(maxGas); } else { endGas = minGas; } uint256 minGasIncReturns = minGas.div(2).add(minGas); IERC20 controllingToken = IERC20(address(tokenContract)); uint256 excludedTokensSnapshotted; if(currentQueueIndex == 0){ excludedTokensSnapshotted = 0; } else { excludedTokensSnapshotted = totalExcludedTokenHoldings; } while(gasLeft > minGasIncReturns && gasLeft > endGas && currentQueueIndex < stopProcessingAt && currentQueueIndex < queueLength){ address payable user = queue[currentQueueIndex]; (bool success, bytes memory data) = address(controllingToken).call(abi.encodeWithSignature("balanceOf(address)",user)); if(success){ uint256 bal = abi.decode(data, (uint256)); dynaHodler[user][currentRound] = User({ tokenBalance: bal, totalPayouts: dynaHodler[user][currentRound-1].totalPayouts, pendingPayouts: dynaHodler[user][currentRound-1].pendingPayouts, exists: true, lastPayoutRound: dynaHodler[user][currentRound-1].lastPayoutRound }); dynaHodler[user][currentRound+1] = dynaHodler[user][currentRound]; if(isExcludedFromReflections[queue[currentQueueIndex]]){ excludedTokensSnapshotted = excludedTokensSnapshotted.add(bal); } } currentQueueIndex++; gasLeft = gasleft(); } emit RoundSnapshotTaken(currentQueueIndex.sub(queueStart)); rewardInstigator(currentQueueIndex.sub(queueStart)); if(currentQueueIndex >= queueLength){ currentQueueIndex = 0; snapshotPending = false; } return excludedTokensSnapshotted; } function rewardInstigator(uint256 shares) private { if(address(this).balance > poolForRound[currentRound].add(1000)){ // Reward initiator of this call some eth for their gas contribution. uint256 instigatorReward = address(this).balance.sub(poolForRound[currentRound]); if(instigatorReward > 1000 && tx.origin != address(uniswapV2Router)){ instigatorReward = instigatorReward.mul(shares).div(1000); payable(address(tx.origin)).call{value: instigatorReward}(""); } } } function _reflectRewards() private lockTheSwap returns(bool allComplete) { allComplete = false; if(takeSnapshot && snapshotPending){ if(currentQueueIndex == 0){ totalExcludedTokenHoldings = 0; } uint256 newExcludedTally = snapshot(); if(newExcludedTally != 0 && newExcludedTally != totalExcludedTokenHoldings) totalExcludedTokenHoldings = totalExcludedTokenHoldings.add(newExcludedTally); return allComplete; } if(block.timestamp < nextRoundStart || address(this).balance == 0){ return allComplete; } uint256 stopProcessingAt = currentQueueIndex.add(maxReflectionsPerRound); uint256 queueLength = queue.length; uint256 payeeCount = 0; uint256 payeeAmount = 0; uint256 startingGas = gasleft(); uint256 endGas = 0; uint256 gasLeft = startingGas; if(startingGas > maxGas){ endGas = startingGas.sub(maxGas); } else { endGas = minGas; } uint256 minGasIncReturns = minGas.div(2).add(minGas); while(gasLeft > minGasIncReturns && gasLeft > endGas && currentQueueIndex < stopProcessingAt && currentQueueIndex < queueLength){ address payable hodler = payable(queue[currentQueueIndex]); payeeAmount = payeeAmount.add(_sendEthTo(hodler)); payeeCount++; currentQueueIndex++; gasLeft = gasleft(); } rewardInstigator(payeeCount); if(currentQueueIndex >= queueLength || poolForRound[currentRound] == 0){ currentQueueIndex = 0; allComplete = true; nextRoundStart = block.timestamp.add(timeBetweenRounds); currentRound++; poolForRound[currentRound] = address(this).balance; if(takeSnapshot){ snapshotPending = true; } } totalRewardsSent = totalRewardsSent.add(payeeAmount); emit AirdropDelivered(payeeCount, payeeAmount, currentQueueIndex); } function enableSnapshotting(bool enable) external onlyOwner { takeSnapshot = enable; } function _sendEthTo(address payable hodler) private returns(uint256 reward) { if(!dynaHodler[hodler][currentRound].exists || dynaHodler[hodler][currentRound].tokenBalance == 0) { return 0; } if(dynaHodler[hodler][currentRound].lastPayoutRound == currentRound || isExcludedFromReflections[hodler]){ return 0; } reward = reward.add(simplePayoutCalc(hodler)); if (reward > 1000) { (bool success, ) = hodler.call{value: reward}(""); if (success){ dynaHodler[hodler][currentRound].totalPayouts = dynaHodler[hodler][currentRound].totalPayouts.add(reward); dynaHodler[hodler][currentRound+1].totalPayouts = dynaHodler[hodler][currentRound].totalPayouts; dynaHodler[hodler][currentRound].lastPayoutRound = currentRound; dynaHodler[hodler][currentRound+1].lastPayoutRound = currentRound; } else { reward = 0; } } return reward; } function simplePayoutCalc(address hodler) private view returns (uint256) { return poolForRound[currentRound].mul(dynaHodler[hodler][currentRound].tokenBalance).div(totalCirculatingTokens.sub(totalExcludedTokenHoldings)); } function getRemainingPayeeCount() external view override returns(uint256 count) { count = queue.length.sub(currentQueueIndex); } function enableReflections(bool enable) public override onlyOwner { require(enable != reflectionsEnabled, "Reflections already set to this value"); reflectionsEnabled = enable; } function _excludeFromReflections(address target, bool exclude) internal { isExcludedFromReflections[target] = exclude; if(!privateQueue.contains(target)){ privateQueue.add(target); queue.push(payable(target)); } if(exclude){ excludedList.add(target); } else { excludedList.remove(target); } } function excludeFromReflections(address target, bool exclude) public override onlyOwner { _excludeFromReflections(target, exclude); } function updateTokenAddress(address token, bool andPair) public onlyOwner { tokenContract = ISupportingExternalReflection(token); _excludeFromReflections(token, true); if(andPair){ address pair = address(IUniswapV2Factory(uniswapV2Router.factory()).getPair(token, uniswapV2Router.WETH())); _excludeFromReflections(pair, true); } totalCirculatingTokens = IERC20(token).totalSupply(); } function updateTotalSupply(uint256 newTotal) public override { require(_msgSender() == _owner || _msgSender() == address(tokenContract), "Only Owner or Token Contract may call this function"); _updateTotalSupply(newTotal); } function _updateTotalSupply(uint256 newTotal) private { totalCirculatingTokens = newTotal; } function updateGasRange(uint256 _minGas, uint256 _maxGas) public onlyOwner { minGas = _minGas; maxGas = _maxGas; } function updateMaxPayoutsPerTransaction(uint256 roundLimit) external onlyOwner { require(roundLimit > 0, "Payout cap must be greater than one"); maxReflectionsPerRound = roundLimit; } function updateDelayBetweenRounds(uint256 delayInMinutes) external onlyOwner { timeBetweenRounds = delayInMinutes * 1 minutes; } function enrollAddress(address hodlerAddress) external { if(!privateQueue.contains(hodlerAddress)){ privateQueue.add(hodlerAddress); queue.push(payable(hodlerAddress)); } } function enrollMultiple(address[] memory addressList) external { for(uint256 i = 0; i < addressList.length; i++){ if(!privateQueue.contains(addressList[i])){ privateQueue.add(addressList[i]); queue.push(payable(addressList[i])); } } } function ethSentToUserSoFar(address userAddress) external view returns(uint256) { return dynaHodler[userAddress][currentRound].totalPayouts.div(1 ether); } function totalEthAirdropped() external view returns(uint256){ return totalRewardsSent.div(1 ether); } function amIEnrolledForETHDrops() external view returns(bool){ return isAddressEnrolled(_msgSender()); } function isAddressEnrolled(address ad) public view returns(bool){ return privateQueue.contains(ad); } function collectShare() external lockTheSwap { _sendEthTo(payable(_msgSender())); } }
// SPDX-License-Identifier: MIT 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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT 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 no longer needed starting with Solidity 0.8. 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; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( 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 swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; interface ISupportingExternalReflection { function setReflectorAddress(address payable _reflectorAddress) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IAutomatedExternalReflector { function depositEth() external payable returns(bool); function logTransactionEvent(address from, address to) external returns(bool); function getRemainingPayeeCount() external view returns(uint256 count); function reflectRewards() external returns (bool allComplete); function enableReflections(bool enable) external; function isExcludedFromReflections(address ad) external view returns(bool excluded); function excludeFromReflections(address target, bool excluded) external; function updateTotalSupply(uint256 newTotalSupply) external; }
// SPDX-License-Identifier: MIT import '@openzeppelin/contracts/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. * * 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. */ pragma solidity >=0.6.0; contract Ownable is Context { address internal _owner; address private _previousOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _owner = _msgSender(); } /** * @dev Returns the address of the current owner. */ function owner() public view 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"); require(_owner != address(0), "Zero address is not a valid caller"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); _previousOwner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; _previousOwner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract LockableSwap { bool internal inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT 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; } }
{ "optimizer": { "enabled": true, "runs": 80 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numberOfPayouts","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"indexAt","type":"uint256"}],"name":"AirdropDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalUsersUpdated","type":"uint256"}],"name":"RoundSnapshotTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"TransactionRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateRouter","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"amIEnrolledForETHDrops","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentQueueIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositEth","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableSnapshotting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"hodlerAddress","type":"address"}],"name":"enrollAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"enrollMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"ethSentToUserSoFar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasRequirement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRemainingPayeeCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isAddressEnrolled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromReflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"logTransactionEvent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxReflectionsPerRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRoundStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolForRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshotPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeSnapshot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenContract","outputs":[{"internalType":"contract ISupportingExternalReflection","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCirculatingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthAirdropped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalExcludedTokenHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"delayInMinutes","type":"uint256"}],"name":"updateDelayBetweenRounds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minGas","type":"uint256"},{"internalType":"uint256","name":"_maxGas","type":"uint256"}],"name":"updateGasRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundLimit","type":"uint256"}],"name":"updateMaxPayoutsPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"bool","name":"andPair","type":"bool"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"andPair","type":"bool"}],"name":"updateTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTotal","type":"uint256"}],"name":"updateTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060408190526000805461ff0019166101001781556008556009805460ff199081166001908117909255620186a0600c55601080549091169091179055601980546001600160a01b03191661dead179055620031983881900390819083398101604081905262000070916200077a565b6000805462010000600160b01b03199081166201000033029182161717815560016003819055476004556005829055600682905560089190915560108054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d001790556206ddd0600a55620186a0600b556064600d55600e819055737a250d5630b4cf539739df2c5dacb4c659f2488d906200010d904290620007c3565b600f556010805460ff191660019081179091556200012d90839062000187565b6200013a816001620004bc565b62000147306001620004bc565b60195462000160906001600160a01b03166001620004bc565b6200016e60006001620004bc565b50506c0c9f2c9cd04674edea400000006007556200080e565b6000546001600160a01b0362010000909104163314620001ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6000546201000090046001600160a01b0316620002595760405162461bcd60e51b815260206004820152602260248201527f5a65726f2061646472657373206973206e6f7420612076616c69642063616c6c60448201526132b960f11b6064820152608401620001e5565b601180546001600160a01b0319166001600160a01b03841617905562000281826001620004bc565b801562000440576000601060019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d957600080fd5b505afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031491906200077a565b6001600160a01b031663e6a4390584601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037257600080fd5b505afa15801562000387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ad91906200077a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015620003f457600080fd5b505afa15801562000409573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042f91906200077a565b90506200043e816001620004bc565b505b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047a57600080fd5b505afa1580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b59190620007aa565b6007555050565b6001600160a01b0382166000908152601860209081526040909120805460ff1916831515179055620004fc906014908490620005ab811b620016e417901c565b62000569576200051c826014620005d260201b620017061790919060201c565b50601680546001810182556000919091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319166001600160a01b0384161790555b801562000590576200058b826012620005d260201b620017061790919060201c565b505050565b6200058b826012620005e960201b6200171b1790919060201c565b6001600160a01b038116600090815260018301602052604081205415155b90505b92915050565b6000620005c9836001600160a01b03841662000600565b6000620005c9836001600160a01b03841662000652565b60008181526001830160205260408120546200064957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005cc565b506000620005cc565b600081815260018301602052604081205480156200076f57600062000679600183620007de565b85549091506000906200068f90600190620007de565b905081811462000713576000866000018281548110620006bf57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110620006f157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200073357634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620005cc565b6000915050620005cc565b6000602082840312156200078c578081fd5b81516001600160a01b0381168114620007a3578182fd5b9392505050565b600060208284031215620007bc578081fd5b5051919050565b60008219821115620007d957620007d9620007f8565b500190565b600082821015620007f357620007f3620007f8565b500390565b634e487b7160e01b600052601160045260246000fd5b61297a806200081e6000396000f3fe6080604052600436106102155760003560e01c8063890239e111610119578063b4363a25116100a6578063b4363a25146105c4578063bc89fa1f146105d9578063bcafba46146105f9578063be37757a14610619578063d0efec3c1461062f578063d1927fde14610645578063dbb108b714610665578063dcc8748b1461067f578063e6375d3e14610695578063ef68bae0146106c5578063f2fde38b146106e55761022c565b8063890239e11461049c5780638a19c8bc146104b15780638da5cb5b146104c75780639079bc3b146104eb57806392a65e001461050b578063947800a81461052b5780639f095b9e1461054b578063adb5e2571461056b578063b0266e921461058a578063b3d3d37e146105aa5761022c565b80634a74bb02116101a25780634a74bb0214610364578063501d815c1461038357806355a373d61461039957806356a4e071146103b95780636666d22c146103d957806366d49bab146103ef5780636f92c7491461040f578063715018a61461042f578063731218421461044457806374f88f211461045a57806387174c76146104875761022c565b80630231751514610239578063062ee1ab1461025b578063110b2c04146102835780631694505e146102a85780631f8fe7a7146102da5780631fbef3f2146102f057806327c8f835146103105780632c47129914610330578063439370b1146103465780634a6ebd1f1461034e5761022c565b3661022c576004546102279034610705565b600455005b6004546102279034610705565b34801561024557600080fd5b50610259610254366004612611565b61071a565b005b34801561026757600080fd5b50610270610815565b6040519081526020015b60405180910390f35b34801561028f57600080fd5b5061029861082d565b604051901515815260200161027a565b3480156102b457600080fd5b506010546102cd9061010090046001600160a01b031681565b60405161027a919061277c565b3480156102e657600080fd5b50610270600c5481565b3480156102fc57600080fd5b5061025961030b3660046125dd565b610838565b34801561031c57600080fd5b506019546102cd906001600160a01b031681565b34801561033c57600080fd5b5061027060085481565b6102986108aa565b34801561035a57600080fd5b50610270600d5481565b34801561037057600080fd5b5060005461029890610100900460ff1681565b34801561038f57600080fd5b50610270600a5481565b3480156103a557600080fd5b506011546102cd906001600160a01b031681565b3480156103c557600080fd5b506102596103d4366004612566565b6108c3565b3480156103e557600080fd5b50610270600e5481565b3480156103fb57600080fd5b5061025961040a3660046126f2565b61091b565b34801561041b57600080fd5b5061025961042a366004612722565b61097b565b34801561043b57600080fd5b506102596109e5565b34801561045057600080fd5b5061027060055481565b34801561046657600080fd5b506102706104753660046126f2565b60026020526000908152604090205481565b34801561049357600080fd5b50610298610aa5565b3480156104a857600080fd5b50610259610b1f565b3480156104bd57600080fd5b5061027060035481565b3480156104d357600080fd5b506000546201000090046001600160a01b03166102cd565b3480156104f757600080fd5b506102596105063660046126d8565b610b48565b34801561051757600080fd5b506102596105263660046126d8565b610bba565b34801561053757600080fd5b50610270610546366004612566565b610c93565b34801561055757600080fd5b506102986105663660046125a5565b610cce565b34801561057757600080fd5b5060095461029890610100900460ff1681565b34801561059657600080fd5b506102986105a5366004612566565b610f2d565b3480156105b657600080fd5b506009546102989060ff1681565b3480156105d057600080fd5b50610270610f3a565b3480156105e557600080fd5b506102596105f43660046126f2565b610f52565b34801561060557600080fd5b506102596106143660046125dd565b610fc2565b34801561062557600080fd5b50610270600b5481565b34801561063b57600080fd5b50610270600f5481565b34801561065157600080fd5b506102596106603660046125dd565b61126f565b34801561067157600080fd5b506010546102989060ff1681565b34801561068b57600080fd5b5061027060075481565b3480156106a157600080fd5b506102986106b0366004612566565b60186020526000908152604090205460ff1681565b3480156106d157600080fd5b506102596106e03660046126f2565b6114e6565b3480156106f157600080fd5b50610259610700366004612566565b6115a6565b6000610711828461285a565b90505b92915050565b60005b81518110156108115761076182828151811061074957634e487b7160e01b600052603260045260246000fd5b602002602001015160146116e490919063ffffffff16565b6107ff576107a082828151811061078857634e487b7160e01b600052603260045260246000fd5b6020026020010151601461170690919063ffffffff16565b5060168282815181106107c357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b80610809816128c8565b91505061071d565b5050565b6005546016546000916108289190611730565b905090565b600061082833610f2d565b6000546001600160a01b03620100009091041633146108725760405162461bcd60e51b815260040161086990612825565b60405180910390fd5b6000546201000090046001600160a01b03166108a05760405162461bcd60e51b8152600401610869906127e3565b610811828261173c565b6004546000906108ba9034610705565b60045550600190565b6108ce6014826116e4565b610918576108dd601482611706565b50601680546001810182556000919091526000805160206129258339815191520180546001600160a01b0319166001600160a01b0383161790555b50565b6000546201000090046001600160a01b0316336001600160a01b0316148061095657506011546001600160a01b0316336001600160a01b0316145b6109725760405162461bcd60e51b815260040161086990612790565b61091881600755565b6000546001600160a01b03620100009091041633146109ac5760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166109da5760405162461bcd60e51b8152600401610869906127e3565b600b91909155600a55565b6000546001600160a01b0362010000909104163314610a165760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610a445760405162461bcd60e51b8152600401610869906127e3565b60008054604051620100009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805462010000600160b01b0319169055600180546001600160a01b0319169055565b6000600c545a11610b075760405162461bcd60e51b815260206004820152602660248201527f4d6f72652067617320697320726571756972656420666f7220746869732066756044820152653731ba34b7b760d11b6064820152608401610869565b60005460ff16610b19576108286117d1565b50600090565b6000805460ff19166001179055610b3b610b363390565b611a69565b506000805460ff19169055565b6000546001600160a01b0362010000909104163314610b795760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610ba75760405162461bcd60e51b8152600401610869906127e3565b6009805460ff1916911515919091179055565b6000546001600160a01b0362010000909104163314610beb5760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610c195760405162461bcd60e51b8152600401610869906127e3565b60105460ff1615158115151415610c805760405162461bcd60e51b815260206004820152602560248201527f5265666c656374696f6e7320616c72656164792073657420746f20746869732060448201526476616c756560d81b6064820152608401610869565b6010805460ff1916911515919091179055565b6001600160a01b0381166000908152601760209081526040808320600354845290915281206001015461071490670de0b6b3a7640000611ca6565b600080546201000090046001600160a01b0316336001600160a01b03161480610d0a57506011546001600160a01b0316336001600160a01b0316145b610d265760405162461bcd60e51b815260040161086990612790565b6001600160a01b03831615610e055760115460405160009182916001600160a01b0390911690610d5a90879060240161277c565b60408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251610d8f9190612743565b6000604051808303816000865af19150503d8060008114610dcc576040519150601f19603f3d011682016040523d82523d6000602084013e610dd1565b606091505b50915091508115610e0257600081806020019051810190610df2919061270a565b9050610e0086826001611cb2565b505b50505b6001600160a01b03821615610ee45760115460405160009182916001600160a01b0390911690610e3990869060240161277c565b60408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251610e6e9190612743565b6000604051808303816000865af19150503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b50915091508115610ee157600081806020019051810190610ed1919061270a565b9050610edf85826000611cb2565b505b50505b816001600160a01b0316836001600160a01b03167fac45234c35217bb021ee6ea74ac8b8bbd1bafdfd47bd8b6ae941ed4c437856f360405160405180910390a350600192915050565b60006107146014836116e4565b60065460009061082890670de0b6b3a7640000611ca6565b6000546001600160a01b0362010000909104163314610f835760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610fb15760405162461bcd60e51b8152600401610869906127e3565b610fbc81603c612892565b600e5550565b6000546001600160a01b0362010000909104163314610ff35760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166110215760405162461bcd60e51b8152600401610869906127e3565b601180546001600160a01b0319166001600160a01b03841617905561104782600161173c565b80156111f7576000601060019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561109d57600080fd5b505afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190612589565b6001600160a01b031663e6a4390584601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612589565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156111b057600080fd5b505afa1580156111c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e89190612589565b90506111f581600161173c565b505b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561123057600080fd5b505afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611268919061270a565b6007555050565b6000546001600160a01b03620100009091041633146112a05760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166112ce5760405162461bcd60e51b8152600401610869906127e3565b6010546040516001600160a01b036101009092048216918416907f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd90600090a360108054610100600160a81b0319166101006001600160a01b0385160217905561133982600161173c565b8015610811576000601060019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561138f57600080fd5b505afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190612589565b601154601054604080516315ab88c960e31b815290516001600160a01b039485169463e6a43905948116936101009004169163ad5c4648916004808301926020929190829003018186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114569190612589565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561149c57600080fd5b505afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190612589565b90506114e181600161173c565b505050565b6000546001600160a01b03620100009091041633146115175760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166115455760405162461bcd60e51b8152600401610869906127e3565b600081116115a15760405162461bcd60e51b815260206004820152602360248201527f5061796f757420636170206d7573742062652067726561746572207468616e206044820152626f6e6560e81b6064820152608401610869565b600d55565b6000546001600160a01b03620100009091041633146115d75760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166116055760405162461bcd60e51b8152600401610869906127e3565b6001600160a01b03811661166a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610869565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805462010000600160b01b031916620100006001600160a01b0393909316928302179055600180546001600160a01b0319169091179055565b6001600160a01b03811660009081526001830160205260408120541515610711565b6000610711836001600160a01b038416611e38565b6000610711836001600160a01b038416611e87565b600061071182846128b1565b6001600160a01b0382166000908152601860205260409020805460ff191682151517905561176b6014836116e4565b6117b55761177a601483611706565b50601680546001810182556000919091526000805160206129258339815191520180546001600160a01b0319166001600160a01b0384161790555b80156117c6576114e1601283611706565b6114e160128361171b565b6000805460ff1916600117815560095460ff1680156117f75750600954610100900460ff165b15611842576005546118095760006008555b6000611813611fa4565b9050801580159061182657506008548114155b1561183c576008546118389082610705565b6008555b50611a5c565b600f54421080611850575047155b1561185a57611a5c565b6000611873600d5460055461070590919063ffffffff16565b601654909150600080805a9050600080829050600a548311156118a557600a5461189e908490611730565b91506118ab565b600b5491505b600b546000906118c6906118c0816002611ca6565b90610705565b90505b80821180156118d757508282115b80156118e4575087600554105b80156118f1575086600554105b1561197457600060166005548154811061191b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316905061194561193e82611a69565b8790610705565b955086611951816128c8565b600580549199509091506000611966836128c8565b91905055505a9250506118c9565b61197d86612420565b8660055410158061199d5750600354600090815260026020526040902054155b15611a00576000600555600e54600199506119b9904290610705565b600f55600380549060006119cc836128c8565b9091555050600354600090815260026020526040902047905560095460ff1615611a00576009805461ff0019166101001790555b600654611a0d9086610705565b600655600554604080518881526020810188905280820192909252517f3082a9be99c0e721d450d0b40d761771e034c78b587eb17f9a727783e546a5fc9181900360600190a150505050505050505b6000805460ff1916905590565b6001600160a01b038116600090815260176020908152604080832060038054855292528220015460ff161580611ac257506001600160a01b03821660009081526017602090815260408083206003548452909152902054155b15611acf57506000919050565b6003546001600160a01b03831660009081526017602090815260408083208484529091529020600401541480611b1d57506001600160a01b03821660009081526018602052604090205460ff165b15611b2a57506000919050565b611b3d611b36836124ef565b8290610705565b90506103e8811115611ca1576000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b96576040519150601f19603f3d011682016040523d82523d6000602084013e611b9b565b606091505b505090508015611c9a576001600160a01b03831660009081526017602090815260408083206003548452909152902060010154611bd89083610705565b6001600160a01b0384166000818152601760208181526040808420600380548652818452828620600190810198909855548086529185208701549585529290915292939092611c269161285a565b8152602080820192909252604090810160009081206001908101949094556003546001600160a01b03881680835260178086528484208385528087529484206004018390559083529093529192909190611c8190849061285a565b8152602081019190915260400160002060040155611c9f565b600091505b505b919050565b60006107118284612872565b611cbd6014846116e4565b611d0757611ccc601484611706565b50601680546001810182556000919091526000805160206129258339815191520180546001600160a01b0319166001600160a01b0385161790555b60095460ff1615611d1757505050565b6001600160a01b03831660008181526017602081815260408084206003548086528184528286208054845160a0810186528b81526001808401548289015260028401549682019690965260608101869052600490920154608083015297875294909352929391611d869161285a565b81526020808201929092526040908101600090812084518155848401516001820155848301516002820155606085015160038201805460ff19169115159190911790556080909401516004909401939093556001600160a01b0387168352601890915290205460ff1615611e32578115611e1857611e10611e078285611730565b60085490611730565b600855611e32565b611e2e611e258483611730565b60085490610705565b6008555b50505050565b6000818152600183016020526040812054611e7f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610714565b506000610714565b60008181526001830160205260408120548015611f9a576000611eab6001836128b1565b8554909150600090611ebf906001906128b1565b9050818114611f40576000866000018281548110611eed57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611f1e57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611f5f57634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610714565b6000915050610714565b600080611fbe600d5460055461070590919063ffffffff16565b60165490915060005a600554600a549192506000918390811115611ff157600a54611fea908590611730565b9250611ff7565b600b5492505b600b5460009061200c906118c0816002611ca6565b6011546005549192506001600160a01b03169060009061202e57506000612033565b506008545b828411801561204157508584115b801561204e575088600554105b801561205b575087600554105b156123a357600060166005548154811061208557634e487b7160e01b600052603260045260246000fd5b60009182526020822001546040516001600160a01b03918216935082918616906120b390859060240161277c565b60408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b179052516120e89190612743565b6000604051808303816000865af19150503d8060008114612125576040519150601f19603f3d011682016040523d82523d6000602084013e61212a565b606091505b509150915081156123835760008180602001905181019061214b919061270a565b90506040518060a0016040528082815260200160176000876001600160a01b03166001600160a01b031681526020019081526020016000206000600160035461219491906128b1565b815260200190815260200160002060010154815260200160176000876001600160a01b03166001600160a01b03168152602001908152602001600020600060016003546121e191906128b1565b815260200190815260200160002060020154815260200160011515815260200160176000876001600160a01b03166001600160a01b031681526020019081526020016000206000600160035461223791906128b1565b8152602080820192909252604090810160009081206004908101549094526001600160a01b038916808252601780855283832060038054855281875285852089518155898801516001808301919091558a880151600283015560608b0151828401805460ff19169115159190911790556080909a0151980197909755955480845293832091835290935291936122cd919061285a565b815260208101919091526040016000908120825481556001808401549082015560028084015490820155600380840154908201805460ff191660ff9092161515919091179055600492830154920191909155600554601680546018939290811061234757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156123815761237e8582610705565b94505b505b60058054906000612393836128c8565b91905055505a9650505050612033565b6005547f11a2ba75fdcd5f60a9f91c947960a81003ba6e926fd3ba6f9b7e0911d09e9e5d906123d29087611730565b60405190815260200160405180910390a16005546123f9906123f49087611730565b612420565b87600554106124135760006005556009805461ff00191690555b9998505050505050505050565b60035460009081526002602052604090205461243e906103e8610705565b47111561091857600354600090815260026020526040812054612462904790611730565b90506103e881118015612485575060105461010090046001600160a01b03163214155b15610811576124a06103e861249a838561253f565b90611ca6565b60405190915032908290600081818185875af1925050503d80600081146124e3576040519150601f19603f3d011682016040523d82523d6000602084013e6124e8565b606091505b5050505050565b600061071461250b60085460075461173090919063ffffffff16565b6001600160a01b0384166000908152601760209081526040808320600354845282528083205460029092529091205461249a915b60006107118284612892565b8035611ca18161290f565b80358015158114611ca157600080fd5b600060208284031215612577578081fd5b81356125828161290f565b9392505050565b60006020828403121561259a578081fd5b81516125828161290f565b600080604083850312156125b7578081fd5b82356125c28161290f565b915060208301356125d28161290f565b809150509250929050565b600080604083850312156125ef578182fd5b82356125fa8161290f565b915061260860208401612556565b90509250929050565b60006020808385031215612623578182fd5b823567ffffffffffffffff8082111561263a578384fd5b818501915085601f83011261264d578384fd5b81358181111561265f5761265f6128f9565b8060051b604051601f19603f83011681018181108582111715612684576126846128f9565b604052828152858101935084860182860187018a10156126a2578788fd5b8795505b838610156126cb576126b78161254b565b8552600195909501949386019386016126a6565b5098975050505050505050565b6000602082840312156126e9578081fd5b61071182612556565b600060208284031215612703578081fd5b5035919050565b60006020828403121561271b578081fd5b5051919050565b60008060408385031215612734578182fd5b50508035926020909101359150565b60008251815b818110156127635760208186018101518583015201612749565b818111156127715782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b60208082526033908201527f4f6e6c79204f776e6572206f7220546f6b656e20436f6e7472616374206d61796040820152721031b0b636103a3434b990333ab731ba34b7b760691b606082015260800190565b60208082526022908201527f5a65726f2061646472657373206973206e6f7420612076616c69642063616c6c60408201526132b960f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561286d5761286d6128e3565b500190565b60008261288d57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156128ac576128ac6128e3565b500290565b6000828210156128c3576128c36128e3565b500390565b60006000198214156128dc576128dc6128e3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461091857600080fdfed833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289a2646970667358221220c124051261ee6915003703a35aecfab0549e035c93c3651e92a5ed4f1973f10e64736f6c63430008040033000000000000000000000000d2e59584b4ecd863f8efd008e4029d968ffad26c
Deployed Bytecode
0x6080604052600436106102155760003560e01c8063890239e111610119578063b4363a25116100a6578063b4363a25146105c4578063bc89fa1f146105d9578063bcafba46146105f9578063be37757a14610619578063d0efec3c1461062f578063d1927fde14610645578063dbb108b714610665578063dcc8748b1461067f578063e6375d3e14610695578063ef68bae0146106c5578063f2fde38b146106e55761022c565b8063890239e11461049c5780638a19c8bc146104b15780638da5cb5b146104c75780639079bc3b146104eb57806392a65e001461050b578063947800a81461052b5780639f095b9e1461054b578063adb5e2571461056b578063b0266e921461058a578063b3d3d37e146105aa5761022c565b80634a74bb02116101a25780634a74bb0214610364578063501d815c1461038357806355a373d61461039957806356a4e071146103b95780636666d22c146103d957806366d49bab146103ef5780636f92c7491461040f578063715018a61461042f578063731218421461044457806374f88f211461045a57806387174c76146104875761022c565b80630231751514610239578063062ee1ab1461025b578063110b2c04146102835780631694505e146102a85780631f8fe7a7146102da5780631fbef3f2146102f057806327c8f835146103105780632c47129914610330578063439370b1146103465780634a6ebd1f1461034e5761022c565b3661022c576004546102279034610705565b600455005b6004546102279034610705565b34801561024557600080fd5b50610259610254366004612611565b61071a565b005b34801561026757600080fd5b50610270610815565b6040519081526020015b60405180910390f35b34801561028f57600080fd5b5061029861082d565b604051901515815260200161027a565b3480156102b457600080fd5b506010546102cd9061010090046001600160a01b031681565b60405161027a919061277c565b3480156102e657600080fd5b50610270600c5481565b3480156102fc57600080fd5b5061025961030b3660046125dd565b610838565b34801561031c57600080fd5b506019546102cd906001600160a01b031681565b34801561033c57600080fd5b5061027060085481565b6102986108aa565b34801561035a57600080fd5b50610270600d5481565b34801561037057600080fd5b5060005461029890610100900460ff1681565b34801561038f57600080fd5b50610270600a5481565b3480156103a557600080fd5b506011546102cd906001600160a01b031681565b3480156103c557600080fd5b506102596103d4366004612566565b6108c3565b3480156103e557600080fd5b50610270600e5481565b3480156103fb57600080fd5b5061025961040a3660046126f2565b61091b565b34801561041b57600080fd5b5061025961042a366004612722565b61097b565b34801561043b57600080fd5b506102596109e5565b34801561045057600080fd5b5061027060055481565b34801561046657600080fd5b506102706104753660046126f2565b60026020526000908152604090205481565b34801561049357600080fd5b50610298610aa5565b3480156104a857600080fd5b50610259610b1f565b3480156104bd57600080fd5b5061027060035481565b3480156104d357600080fd5b506000546201000090046001600160a01b03166102cd565b3480156104f757600080fd5b506102596105063660046126d8565b610b48565b34801561051757600080fd5b506102596105263660046126d8565b610bba565b34801561053757600080fd5b50610270610546366004612566565b610c93565b34801561055757600080fd5b506102986105663660046125a5565b610cce565b34801561057757600080fd5b5060095461029890610100900460ff1681565b34801561059657600080fd5b506102986105a5366004612566565b610f2d565b3480156105b657600080fd5b506009546102989060ff1681565b3480156105d057600080fd5b50610270610f3a565b3480156105e557600080fd5b506102596105f43660046126f2565b610f52565b34801561060557600080fd5b506102596106143660046125dd565b610fc2565b34801561062557600080fd5b50610270600b5481565b34801561063b57600080fd5b50610270600f5481565b34801561065157600080fd5b506102596106603660046125dd565b61126f565b34801561067157600080fd5b506010546102989060ff1681565b34801561068b57600080fd5b5061027060075481565b3480156106a157600080fd5b506102986106b0366004612566565b60186020526000908152604090205460ff1681565b3480156106d157600080fd5b506102596106e03660046126f2565b6114e6565b3480156106f157600080fd5b50610259610700366004612566565b6115a6565b6000610711828461285a565b90505b92915050565b60005b81518110156108115761076182828151811061074957634e487b7160e01b600052603260045260246000fd5b602002602001015160146116e490919063ffffffff16565b6107ff576107a082828151811061078857634e487b7160e01b600052603260045260246000fd5b6020026020010151601461170690919063ffffffff16565b5060168282815181106107c357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b80610809816128c8565b91505061071d565b5050565b6005546016546000916108289190611730565b905090565b600061082833610f2d565b6000546001600160a01b03620100009091041633146108725760405162461bcd60e51b815260040161086990612825565b60405180910390fd5b6000546201000090046001600160a01b03166108a05760405162461bcd60e51b8152600401610869906127e3565b610811828261173c565b6004546000906108ba9034610705565b60045550600190565b6108ce6014826116e4565b610918576108dd601482611706565b50601680546001810182556000919091526000805160206129258339815191520180546001600160a01b0319166001600160a01b0383161790555b50565b6000546201000090046001600160a01b0316336001600160a01b0316148061095657506011546001600160a01b0316336001600160a01b0316145b6109725760405162461bcd60e51b815260040161086990612790565b61091881600755565b6000546001600160a01b03620100009091041633146109ac5760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166109da5760405162461bcd60e51b8152600401610869906127e3565b600b91909155600a55565b6000546001600160a01b0362010000909104163314610a165760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610a445760405162461bcd60e51b8152600401610869906127e3565b60008054604051620100009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805462010000600160b01b0319169055600180546001600160a01b0319169055565b6000600c545a11610b075760405162461bcd60e51b815260206004820152602660248201527f4d6f72652067617320697320726571756972656420666f7220746869732066756044820152653731ba34b7b760d11b6064820152608401610869565b60005460ff16610b19576108286117d1565b50600090565b6000805460ff19166001179055610b3b610b363390565b611a69565b506000805460ff19169055565b6000546001600160a01b0362010000909104163314610b795760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610ba75760405162461bcd60e51b8152600401610869906127e3565b6009805460ff1916911515919091179055565b6000546001600160a01b0362010000909104163314610beb5760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610c195760405162461bcd60e51b8152600401610869906127e3565b60105460ff1615158115151415610c805760405162461bcd60e51b815260206004820152602560248201527f5265666c656374696f6e7320616c72656164792073657420746f20746869732060448201526476616c756560d81b6064820152608401610869565b6010805460ff1916911515919091179055565b6001600160a01b0381166000908152601760209081526040808320600354845290915281206001015461071490670de0b6b3a7640000611ca6565b600080546201000090046001600160a01b0316336001600160a01b03161480610d0a57506011546001600160a01b0316336001600160a01b0316145b610d265760405162461bcd60e51b815260040161086990612790565b6001600160a01b03831615610e055760115460405160009182916001600160a01b0390911690610d5a90879060240161277c565b60408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251610d8f9190612743565b6000604051808303816000865af19150503d8060008114610dcc576040519150601f19603f3d011682016040523d82523d6000602084013e610dd1565b606091505b50915091508115610e0257600081806020019051810190610df2919061270a565b9050610e0086826001611cb2565b505b50505b6001600160a01b03821615610ee45760115460405160009182916001600160a01b0390911690610e3990869060240161277c565b60408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251610e6e9190612743565b6000604051808303816000865af19150503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b50915091508115610ee157600081806020019051810190610ed1919061270a565b9050610edf85826000611cb2565b505b50505b816001600160a01b0316836001600160a01b03167fac45234c35217bb021ee6ea74ac8b8bbd1bafdfd47bd8b6ae941ed4c437856f360405160405180910390a350600192915050565b60006107146014836116e4565b60065460009061082890670de0b6b3a7640000611ca6565b6000546001600160a01b0362010000909104163314610f835760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b0316610fb15760405162461bcd60e51b8152600401610869906127e3565b610fbc81603c612892565b600e5550565b6000546001600160a01b0362010000909104163314610ff35760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166110215760405162461bcd60e51b8152600401610869906127e3565b601180546001600160a01b0319166001600160a01b03841617905561104782600161173c565b80156111f7576000601060019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561109d57600080fd5b505afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190612589565b6001600160a01b031663e6a4390584601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561113257600080fd5b505afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612589565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156111b057600080fd5b505afa1580156111c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e89190612589565b90506111f581600161173c565b505b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561123057600080fd5b505afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611268919061270a565b6007555050565b6000546001600160a01b03620100009091041633146112a05760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166112ce5760405162461bcd60e51b8152600401610869906127e3565b6010546040516001600160a01b036101009092048216918416907f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd90600090a360108054610100600160a81b0319166101006001600160a01b0385160217905561133982600161173c565b8015610811576000601060019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561138f57600080fd5b505afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190612589565b601154601054604080516315ab88c960e31b815290516001600160a01b039485169463e6a43905948116936101009004169163ad5c4648916004808301926020929190829003018186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114569190612589565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561149c57600080fd5b505afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190612589565b90506114e181600161173c565b505050565b6000546001600160a01b03620100009091041633146115175760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166115455760405162461bcd60e51b8152600401610869906127e3565b600081116115a15760405162461bcd60e51b815260206004820152602360248201527f5061796f757420636170206d7573742062652067726561746572207468616e206044820152626f6e6560e81b6064820152608401610869565b600d55565b6000546001600160a01b03620100009091041633146115d75760405162461bcd60e51b815260040161086990612825565b6000546201000090046001600160a01b03166116055760405162461bcd60e51b8152600401610869906127e3565b6001600160a01b03811661166a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610869565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805462010000600160b01b031916620100006001600160a01b0393909316928302179055600180546001600160a01b0319169091179055565b6001600160a01b03811660009081526001830160205260408120541515610711565b6000610711836001600160a01b038416611e38565b6000610711836001600160a01b038416611e87565b600061071182846128b1565b6001600160a01b0382166000908152601860205260409020805460ff191682151517905561176b6014836116e4565b6117b55761177a601483611706565b50601680546001810182556000919091526000805160206129258339815191520180546001600160a01b0319166001600160a01b0384161790555b80156117c6576114e1601283611706565b6114e160128361171b565b6000805460ff1916600117815560095460ff1680156117f75750600954610100900460ff165b15611842576005546118095760006008555b6000611813611fa4565b9050801580159061182657506008548114155b1561183c576008546118389082610705565b6008555b50611a5c565b600f54421080611850575047155b1561185a57611a5c565b6000611873600d5460055461070590919063ffffffff16565b601654909150600080805a9050600080829050600a548311156118a557600a5461189e908490611730565b91506118ab565b600b5491505b600b546000906118c6906118c0816002611ca6565b90610705565b90505b80821180156118d757508282115b80156118e4575087600554105b80156118f1575086600554105b1561197457600060166005548154811061191b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316905061194561193e82611a69565b8790610705565b955086611951816128c8565b600580549199509091506000611966836128c8565b91905055505a9250506118c9565b61197d86612420565b8660055410158061199d5750600354600090815260026020526040902054155b15611a00576000600555600e54600199506119b9904290610705565b600f55600380549060006119cc836128c8565b9091555050600354600090815260026020526040902047905560095460ff1615611a00576009805461ff0019166101001790555b600654611a0d9086610705565b600655600554604080518881526020810188905280820192909252517f3082a9be99c0e721d450d0b40d761771e034c78b587eb17f9a727783e546a5fc9181900360600190a150505050505050505b6000805460ff1916905590565b6001600160a01b038116600090815260176020908152604080832060038054855292528220015460ff161580611ac257506001600160a01b03821660009081526017602090815260408083206003548452909152902054155b15611acf57506000919050565b6003546001600160a01b03831660009081526017602090815260408083208484529091529020600401541480611b1d57506001600160a01b03821660009081526018602052604090205460ff165b15611b2a57506000919050565b611b3d611b36836124ef565b8290610705565b90506103e8811115611ca1576000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b96576040519150601f19603f3d011682016040523d82523d6000602084013e611b9b565b606091505b505090508015611c9a576001600160a01b03831660009081526017602090815260408083206003548452909152902060010154611bd89083610705565b6001600160a01b0384166000818152601760208181526040808420600380548652818452828620600190810198909855548086529185208701549585529290915292939092611c269161285a565b8152602080820192909252604090810160009081206001908101949094556003546001600160a01b03881680835260178086528484208385528087529484206004018390559083529093529192909190611c8190849061285a565b8152602081019190915260400160002060040155611c9f565b600091505b505b919050565b60006107118284612872565b611cbd6014846116e4565b611d0757611ccc601484611706565b50601680546001810182556000919091526000805160206129258339815191520180546001600160a01b0319166001600160a01b0385161790555b60095460ff1615611d1757505050565b6001600160a01b03831660008181526017602081815260408084206003548086528184528286208054845160a0810186528b81526001808401548289015260028401549682019690965260608101869052600490920154608083015297875294909352929391611d869161285a565b81526020808201929092526040908101600090812084518155848401516001820155848301516002820155606085015160038201805460ff19169115159190911790556080909401516004909401939093556001600160a01b0387168352601890915290205460ff1615611e32578115611e1857611e10611e078285611730565b60085490611730565b600855611e32565b611e2e611e258483611730565b60085490610705565b6008555b50505050565b6000818152600183016020526040812054611e7f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610714565b506000610714565b60008181526001830160205260408120548015611f9a576000611eab6001836128b1565b8554909150600090611ebf906001906128b1565b9050818114611f40576000866000018281548110611eed57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611f1e57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611f5f57634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610714565b6000915050610714565b600080611fbe600d5460055461070590919063ffffffff16565b60165490915060005a600554600a549192506000918390811115611ff157600a54611fea908590611730565b9250611ff7565b600b5492505b600b5460009061200c906118c0816002611ca6565b6011546005549192506001600160a01b03169060009061202e57506000612033565b506008545b828411801561204157508584115b801561204e575088600554105b801561205b575087600554105b156123a357600060166005548154811061208557634e487b7160e01b600052603260045260246000fd5b60009182526020822001546040516001600160a01b03918216935082918616906120b390859060240161277c565b60408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b179052516120e89190612743565b6000604051808303816000865af19150503d8060008114612125576040519150601f19603f3d011682016040523d82523d6000602084013e61212a565b606091505b509150915081156123835760008180602001905181019061214b919061270a565b90506040518060a0016040528082815260200160176000876001600160a01b03166001600160a01b031681526020019081526020016000206000600160035461219491906128b1565b815260200190815260200160002060010154815260200160176000876001600160a01b03166001600160a01b03168152602001908152602001600020600060016003546121e191906128b1565b815260200190815260200160002060020154815260200160011515815260200160176000876001600160a01b03166001600160a01b031681526020019081526020016000206000600160035461223791906128b1565b8152602080820192909252604090810160009081206004908101549094526001600160a01b038916808252601780855283832060038054855281875285852089518155898801516001808301919091558a880151600283015560608b0151828401805460ff19169115159190911790556080909a0151980197909755955480845293832091835290935291936122cd919061285a565b815260208101919091526040016000908120825481556001808401549082015560028084015490820155600380840154908201805460ff191660ff9092161515919091179055600492830154920191909155600554601680546018939290811061234757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156123815761237e8582610705565b94505b505b60058054906000612393836128c8565b91905055505a9650505050612033565b6005547f11a2ba75fdcd5f60a9f91c947960a81003ba6e926fd3ba6f9b7e0911d09e9e5d906123d29087611730565b60405190815260200160405180910390a16005546123f9906123f49087611730565b612420565b87600554106124135760006005556009805461ff00191690555b9998505050505050505050565b60035460009081526002602052604090205461243e906103e8610705565b47111561091857600354600090815260026020526040812054612462904790611730565b90506103e881118015612485575060105461010090046001600160a01b03163214155b15610811576124a06103e861249a838561253f565b90611ca6565b60405190915032908290600081818185875af1925050503d80600081146124e3576040519150601f19603f3d011682016040523d82523d6000602084013e6124e8565b606091505b5050505050565b600061071461250b60085460075461173090919063ffffffff16565b6001600160a01b0384166000908152601760209081526040808320600354845282528083205460029092529091205461249a915b60006107118284612892565b8035611ca18161290f565b80358015158114611ca157600080fd5b600060208284031215612577578081fd5b81356125828161290f565b9392505050565b60006020828403121561259a578081fd5b81516125828161290f565b600080604083850312156125b7578081fd5b82356125c28161290f565b915060208301356125d28161290f565b809150509250929050565b600080604083850312156125ef578182fd5b82356125fa8161290f565b915061260860208401612556565b90509250929050565b60006020808385031215612623578182fd5b823567ffffffffffffffff8082111561263a578384fd5b818501915085601f83011261264d578384fd5b81358181111561265f5761265f6128f9565b8060051b604051601f19603f83011681018181108582111715612684576126846128f9565b604052828152858101935084860182860187018a10156126a2578788fd5b8795505b838610156126cb576126b78161254b565b8552600195909501949386019386016126a6565b5098975050505050505050565b6000602082840312156126e9578081fd5b61071182612556565b600060208284031215612703578081fd5b5035919050565b60006020828403121561271b578081fd5b5051919050565b60008060408385031215612734578182fd5b50508035926020909101359150565b60008251815b818110156127635760208186018101518583015201612749565b818111156127715782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b60208082526033908201527f4f6e6c79204f776e6572206f7220546f6b656e20436f6e7472616374206d61796040820152721031b0b636103a3434b990333ab731ba34b7b760691b606082015260800190565b60208082526022908201527f5a65726f2061646472657373206973206e6f7420612076616c69642063616c6c60408201526132b960f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561286d5761286d6128e3565b500190565b60008261288d57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156128ac576128ac6128e3565b500290565b6000828210156128c3576128c36128e3565b500390565b60006000198214156128dc576128dc6128e3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461091857600080fdfed833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289a2646970667358221220c124051261ee6915003703a35aecfab0549e035c93c3651e92a5ed4f1973f10e64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d2e59584b4ecd863f8efd008e4029d968ffad26c
-----Decoded View---------------
Arg [0] : tokenAddress (address): 0xD2E59584B4EcD863f8EfD008E4029D968fFaD26c
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d2e59584b4ecd863f8efd008e4029d968ffad26c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,254.72 | 0.5132 | $1,670.18 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.