Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
YieldMint
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; // Contracts import "@openzeppelin/contracts/access/Ownable.sol"; import { SafeERC20 } from "./libraries/SafeERC20.sol"; // Interfaces import { IERC20 } from "./interfaces/IERC20.sol"; import { IERC721 } from "./interfaces/IERC721.sol"; import { IStakingRewards } from "./interfaces/IStakingRewards.sol"; import { IUniswapV2Router01 } from "./interfaces/IUniswapV2Router01.sol"; contract YieldMint is Ownable { using SafeERC20 for IERC20; address public NFTContract; address public dpx; address public rdpx; address public weth; address public LP; address public stakingRewards; address public uniswapV2Router01; uint256 public maxSupply; uint256 public maxLpDeposits; uint256 public NFTsForSale; bool public paused = false; bool public depositPeriod = false; bool public farmingPeriod = false; uint256 public totalDeposits; uint256 public dpxRewards; uint256 public rdpxRewards; uint256 public mintPrice; /// @notice user Deposits /// @dev mapping (user => deposit) mapping(address => uint256) public usersDeposit; /// @notice didUserMint /// @dev mapping (user => didUserMint) mapping(address => bool) public didUserMint; /*==== ERRORS & EVENTS ====*/ event DepositLP(address user, uint256 amountLP); event DepositEth(address user, uint256 amountEth); event Withdraw(address user, uint256 amount); event endDepositPeriod(uint256 blockTimeStamp); event endFarmingPeriod(uint256 blockTimeStamp); event Mint(address user, uint256 amount); constructor( address _NFTContract, address _dpx, address _rdpx, address _weth, address _lp, address _stakingRewards, address _uniswapV2Router01, uint256 _maxSupply, uint256 _maxLpDeposits, uint256 _NFTsForSale ) { require(_NFTContract != address(0), "Address can't be zero address"); require(_dpx != address(0), "Address can't be zero address"); require(_rdpx != address(0), "Address can't be zero address"); require(_weth != address(0), "Address can't be zero address"); require(_lp != address(0), "Address can't be zero address"); require(_stakingRewards != address(0), "Address can't be zero address"); require(_uniswapV2Router01 != address(0), "Address can't be zero address"); require(_maxSupply != 0, "Max supply can't be zero"); require(_maxLpDeposits != 0, "Max Lp deposits can't be zero"); require(_NFTsForSale != 0, "NFTs for sale can't be zero"); NFTContract = _NFTContract; dpx = _dpx; rdpx = _rdpx; weth = _weth; LP = _lp; stakingRewards = _stakingRewards; uniswapV2Router01 = _uniswapV2Router01; maxSupply = _maxSupply; maxLpDeposits = _maxLpDeposits; NFTsForSale = _NFTsForSale; // Max approve to stakingRewards IERC20(LP).safeApprove(stakingRewards, type(uint256).max); // Max approve to uniswapV2Router01 IERC20(rdpx).safeApprove(uniswapV2Router01, type(uint256).max); IERC20(weth).safeApprove(uniswapV2Router01, type(uint256).max); } // Recieve function receive() external payable {} //only owner /// @notice admin can mint NFTs /// @dev Can only be called by governance function adminMint(uint256 amount) external onlyOwner { require(!paused, "Contract is paused"); for (uint256 i = 0; i < amount; i++) { // Mint NFT IERC721(NFTContract).mint(msg.sender); } } /// @notice admin can set max LP deposit /// @dev Can only be called by governance function setMaxLpDeposit(uint256 amount) external onlyOwner { require(!paused, "Contract is paused"); maxLpDeposits = amount; } /// @notice admin can pause/unpause the contract /// @param _state boolean to pause or unpause the contract /// @dev Can only be called by governance function pause(bool _state) external onlyOwner { uint256 balance = IStakingRewards(stakingRewards).balanceOf(address(this)); if (balance > 0) { IStakingRewards(stakingRewards).withdraw(balance); IStakingRewards(stakingRewards).getReward(2); } paused = _state; } /// @notice emergency withdraw all /// @dev Can only be called by governance function emergencyWithdraw(address[] calldata addressArray) external onlyOwner { require(paused, "Contract is not paused"); for (uint256 i = 0; i < addressArray.length; i++) { IERC20(addressArray[i]).safeTransfer( msg.sender, IERC20(addressArray[i]).balanceOf(address(this)) ); } uint256 ethBalance = address(this).balance; if (ethBalance > 0) { payable(msg.sender).transfer(ethBalance); } } function startDeposits() external onlyOwner { require(!depositPeriod, "Deposit period is already started"); require(!paused, "Contract is paused"); depositPeriod = true; } /// @notice ends deposit period /// @dev Can only be called by governance function endDeposits() external onlyOwner { require(!paused, "Contract is paused"); require(!farmingPeriod, "Deposits have been closed"); require(depositPeriod, "Deposits have been closed"); depositPeriod = false; farmingPeriod = true; if (IERC20(LP).balanceOf(address(this)) > 0) { IStakingRewards(stakingRewards).stake( IERC20(LP).balanceOf(address(this)) ); } mintPrice = totalDeposits / NFTsForSale; emit endDepositPeriod(block.timestamp); } /// @notice ends farming period /// @dev Can only be called by governance function endFarming() external onlyOwner returns (uint256, uint256) { require(!paused, "Contract is paused"); require(farmingPeriod, "Farming is not active"); farmingPeriod = false; uint256 balance = IStakingRewards(stakingRewards).balanceOf(address(this)); IStakingRewards(stakingRewards).withdraw(balance); IStakingRewards(stakingRewards).getReward(2); dpxRewards = IERC20(dpx).balanceOf(address(this)); rdpxRewards = IERC20(rdpx).balanceOf(address(this)); emit endFarmingPeriod(block.timestamp); return (dpxRewards, rdpxRewards); } /// @notice admin claims rewards /// @param amountDpx amount of DPX rewards to claim /// @param amountRdpx amount of RDPX rewards to claim /// @dev Can only be called by governance function claimAdminRewards(uint256 amountDpx, uint256 amountRdpx) external onlyOwner { require(!paused, "Contract is paused"); require(!farmingPeriod, "Farming has not ended"); require(!depositPeriod, "Deposits have not been closed"); IERC20(dpx).safeTransfer(msg.sender, amountDpx); IERC20(rdpx).safeTransfer(msg.sender, amountRdpx); } // public /// @notice user deposits LP /// @param amount amount of LP deposited /// @param userAddress address of user function depositLP(uint256 amount, address userAddress) external returns (bool) { require(!paused, "Contract is paused"); require(amount > 0, "amount 0"); require(!farmingPeriod, "Deposits have been closed"); require(depositPeriod, "Deposits have been closed"); require( totalDeposits + amount <= maxLpDeposits, "deposit amount exceeds max LP deposits" ); IERC20(LP).safeTransferFrom(msg.sender, address(this), amount); IStakingRewards(stakingRewards).stake(amount); _deposit(amount, userAddress); emit DepositLP(userAddress, amount); return true; } /// @notice user Deposits ETH /// @param userAddress address of user function depositWeth(address userAddress) external payable returns (uint256) { require(!paused, "Contract is paused"); require(!farmingPeriod, "Deposits have been closed"); require(depositPeriod, "Deposits have been closed"); // Zap eth to DPX/WETH LP ( uint256 remainingEth, uint256 remainingRdpx, uint256 liquidityAdded ) = _zap(weth, rdpx, msg.value); require( totalDeposits + liquidityAdded <= maxLpDeposits, "deposit amount exceeds max LP deposits" ); if (remainingRdpx > 0) { IERC20(rdpx).safeTransfer(msg.sender, remainingRdpx); } if (remainingEth > 0) { payable(msg.sender).transfer(remainingEth); } IStakingRewards(stakingRewards).stake(liquidityAdded); _deposit(liquidityAdded, userAddress); emit DepositEth(userAddress, liquidityAdded); return (liquidityAdded); } function _deposit(uint256 amount, address userAddress) internal { usersDeposit[userAddress] += amount; totalDeposits += amount; } /// @notice user withdraws their LP tokens function withdraw() external returns (bool) { require(!paused, "Contract is paused"); require(!farmingPeriod, "Farming has not ended"); require(!depositPeriod, "Deposits have not been closed"); require(usersDeposit[msg.sender] > 0, "no deposits"); uint256 userDeposit = usersDeposit[msg.sender]; usersDeposit[msg.sender] = 0; uint256 extraAmount = userDeposit % mintPrice; if (extraAmount > 0) { uint256 userDpxRewards = (dpxRewards * extraAmount) / totalDeposits; uint256 userRdpxRewards = (rdpxRewards * extraAmount) / totalDeposits; IERC20(dpx).safeTransfer(msg.sender, userDpxRewards); IERC20(rdpx).safeTransfer(msg.sender, userRdpxRewards); } IERC20(LP).safeTransfer(msg.sender, userDeposit); emit Withdraw(msg.sender, userDeposit); return true; } /// @notice user mints NFT's function claimMint() external { require(!paused, "Contract is paused"); require(!depositPeriod, "Deposits have not been closed"); require(!didUserMint[msg.sender], "User has already claimed mint"); require( usersDeposit[msg.sender] >= mintPrice && usersDeposit[msg.sender] > 0, "User has not deposited enough LP" ); uint256 userDeposit = usersDeposit[msg.sender]; uint256 amount = userDeposit / mintPrice; require( amount + IERC721(NFTContract).totalSupply() < maxSupply, "mint limit reached" ); if (amount > 0) { for (uint256 i = 0; i < amount; i++) { // Mint NFT IERC721(NFTContract).mint(msg.sender); } } didUserMint[msg.sender] = true; emit Mint(msg.sender, amount); } function balanceOf(address account) external view returns (uint256) { return usersDeposit[account]; } /** * @notice Zaps any asset into its respective liquidity pool * @param _from address of token to zap from * @param _to address of token to zap to * @param _amountToZap amount of token to zap from */ function _zap( address _from, address _to, uint256 _amountToZap ) private returns ( uint256 remainingWeth, uint256 remainingRdpx, uint256 liquidityAdded ) { IUniswapV2Router01 router = IUniswapV2Router01(uniswapV2Router01); // Amount of tokens received from swapping ETH to DPX uint256 tokensReceivedAfterSwap = router.swapExactETHForTokens{ value: _amountToZap / 2 }(0, getPath(_from, _to), address(this), block.timestamp)[1]; // Variables to store amount of tokens that were added which is later used to calculate the remaining amounts uint256 tokenAAmountAdded; uint256 tokenBAmountAdded; // Add liquidity (tokenAAmountAdded, tokenBAmountAdded, liquidityAdded) = router .addLiquidityETH{ value: _amountToZap / 2 }( _to, tokensReceivedAfterSwap, 0, 0, address(this), block.timestamp ); // Remaining WETH tokens after adding liquidity remainingWeth = _from == weth ? _amountToZap / 2 - tokenBAmountAdded : tokensReceivedAfterSwap - tokenAAmountAdded; // Remaining DPX tokens after adding liquidity remainingRdpx = _from == rdpx ? _amountToZap / 2 - tokenBAmountAdded : tokensReceivedAfterSwap - tokenAAmountAdded; } /// @notice returns path which used in router's swap /// @param _tokenA token to swap from /// @param _tokenB token to from to function getPath(address _tokenA, address _tokenB) public pure returns (address[] memory path) { path = new address[](2); path[0] = _tokenA; path[1] = _tokenB; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. * NOTE: Modified to include symbols and decimals. */ interface IERC20 { function totalSupply() external view returns (uint256); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. * NOTE: Modified to include symbols and decimals. */ interface IERC721 { function totalSupply() external view returns (uint256); function mint(address) external; function tokenURI(uint256) external view returns (string memory); function burn(uint256) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; interface IStakingRewards { // Views function lastTimeRewardApplicable() external view returns (uint256); function rewardPerToken() external view returns (uint256, uint256); function earned(address account) external view returns (uint256, uint256); function getRewardForDuration() external view returns (uint256, uint256); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function rewardsDPX(address account) external view returns (uint256); function compound() external; // Mutative function stake(uint256 amount) external payable; function withdraw(uint256 amount) external; function getReward(uint256 rewardsTokenID) external; function exit() external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; interface IUniswapV2Router01 { function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IERC20} from '../interfaces/IERC20.sol'; import {SafeMath} from '@openzeppelin/contracts/utils/math/SafeMath.sol'; import {Address} from '@openzeppelin/contracts/utils/Address.sol'; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), 'SafeERC20: approve from non-zero to non-zero allowance' ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add( value ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeERC20: decreased allowance below zero' ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, 'SafeERC20: low-level call failed' ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed' ); } } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": false, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
[{"inputs":[{"internalType":"address","name":"_NFTContract","type":"address"},{"internalType":"address","name":"_dpx","type":"address"},{"internalType":"address","name":"_rdpx","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_lp","type":"address"},{"internalType":"address","name":"_stakingRewards","type":"address"},{"internalType":"address","name":"_uniswapV2Router01","type":"address"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxLpDeposits","type":"uint256"},{"internalType":"uint256","name":"_NFTsForSale","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"}],"name":"DepositEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountLP","type":"uint256"}],"name":"DepositLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","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":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockTimeStamp","type":"uint256"}],"name":"endDepositPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockTimeStamp","type":"uint256"}],"name":"endFarmingPeriod","type":"event"},{"inputs":[],"name":"LP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTsForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountDpx","type":"uint256"},{"internalType":"uint256","name":"amountRdpx","type":"uint256"}],"name":"claimAdminRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"depositLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"depositWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"didUserMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dpx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dpxRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endFarming","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmingPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"}],"name":"getPath","outputs":[{"internalType":"address[]","name":"path","type":"address[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxLpDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","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":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rdpx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rdpxRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxLpDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDeposits","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":"uniswapV2Router01","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b5060405162005ecc38038062005ecc833981810160405281019062000088919062000d74565b620000a86200009c6200085060201b60201c565b6200085860201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614156200011b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000112906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614156200018e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000185906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141562000201576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f8906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141562000274576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026b906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415620002e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002de906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156200035a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000351906200133b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620003cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c4906200133b565b60405180910390fd5b600083141562000414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040b906200126f565b60405180910390fd5b60008214156200045b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045290620012b3565b60405180910390fd5b6000811415620004a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049990620012d5565b60405180910390fd5b89600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826008819055508160098190555080600a8190555062000714600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200091c60201b62002e23179092919060201c565b620007aa600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200091c60201b62002e23179092919060201c565b62000840600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200091c60201b62002e23179092919060201c565b5050505050505050505062001490565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000811480620009bc575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040162000966929190620011f1565b60206040518083038186803b1580156200097f57600080fd5b505afa15801562000994573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ba919062000e90565b145b620009fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f5906200135d565b60405180910390fd5b62000a898363095ea7b360e01b848460405160240162000a209291906200121e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505062000a8e60201b60201c565b505050565b600062000af7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662000b6260201b62002f81179092919060201c565b905060008151111562000b5d578080602001905181019062000b1a919062000e64565b62000b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b539062001319565b60405180910390fd5b5b505050565b606062000b79848460008562000b8260201b60201c565b90509392505050565b60608247101562000bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc19062001291565b60405180910390fd5b62000bdb8562000cb060201b60201c565b62000c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1490620012f7565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162000c489190620011d8565b60006040518083038185875af1925050503d806000811462000c87576040519150601f19603f3d011682016040523d82523d6000602084013e62000c8c565b606091505b509150915062000ca482828662000cc360201b60201c565b92505050949350505050565b600080823b905060008111915050919050565b6060831562000cd55782905062000d28565b60008351111562000ce95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d1f91906200124b565b60405180910390fd5b9392505050565b60008151905062000d408162001442565b92915050565b60008151905062000d57816200145c565b92915050565b60008151905062000d6e8162001476565b92915050565b6000806000806000806000806000806101408b8d03121562000d9557600080fd5b600062000da58d828e0162000d2f565b9a5050602062000db88d828e0162000d2f565b995050604062000dcb8d828e0162000d2f565b985050606062000dde8d828e0162000d2f565b975050608062000df18d828e0162000d2f565b96505060a062000e048d828e0162000d2f565b95505060c062000e178d828e0162000d2f565b94505060e062000e2a8d828e0162000d5d565b93505061010062000e3e8d828e0162000d5d565b92505061012062000e528d828e0162000d5d565b9150509295989b9194979a5092959850565b60006020828403121562000e7757600080fd5b600062000e878482850162000d46565b91505092915050565b60006020828403121562000ea357600080fd5b600062000eb38482850162000d5d565b91505092915050565b62000ec781620013b1565b82525050565b600062000eda826200137f565b62000ee6818562001395565b935062000ef8818560208601620013fb565b80840191505092915050565b600062000f11826200138a565b62000f1d8185620013a0565b935062000f2f818560208601620013fb565b62000f3a8162001431565b840191505092915050565b600062000f54601883620013a0565b91507f4d617820737570706c792063616e2774206265207a65726f00000000000000006000830152602082019050919050565b600062000f96602683620013a0565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000ffe601d83620013a0565b91507f4d6178204c70206465706f736974732063616e2774206265207a65726f0000006000830152602082019050919050565b600062001040601b83620013a0565b91507f4e46547320666f722073616c652063616e2774206265207a65726f00000000006000830152602082019050919050565b600062001082601d83620013a0565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000620010c4602a83620013a0565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006200112c601d83620013a0565b91507f416464726573732063616e2774206265207a65726f20616464726573730000006000830152602082019050919050565b60006200116e603683620013a0565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b620011d281620013f1565b82525050565b6000620011e6828462000ecd565b915081905092915050565b600060408201905062001208600083018562000ebc565b62001217602083018462000ebc565b9392505050565b600060408201905062001235600083018562000ebc565b620012446020830184620011c7565b9392505050565b6000602082019050818103600083015262001267818462000f04565b905092915050565b600060208201905081810360008301526200128a8162000f45565b9050919050565b60006020820190508181036000830152620012ac8162000f87565b9050919050565b60006020820190508181036000830152620012ce8162000fef565b9050919050565b60006020820190508181036000830152620012f08162001031565b9050919050565b60006020820190508181036000830152620013128162001073565b9050919050565b600060208201905081810360008301526200133481620010b5565b9050919050565b6000602082019050818103600083015262001356816200111d565b9050919050565b6000602082019050818103600083015262001378816200115f565b9050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000620013be82620013d1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200141b578082015181840152602081019050620013fe565b838111156200142b576000848401525b50505050565b6000601f19601f8301169050919050565b6200144d81620013b1565b81146200145957600080fd5b50565b6200146781620013c5565b81146200147357600080fd5b50565b6200148181620013f1565b81146200148d57600080fd5b50565b614a2c80620014a06000396000f3fe6080604052600436106102135760003560e01c806370a0823111610118578063c216c2a0116100a0578063e59df1651161006f578063e59df1651461075c578063ee14be1914610787578063f1daf0d4146107c4578063f2fde38b146107ef578063fb4dfcce146108185761021a565b8063c216c2a01461068c578063d2fc3058146106b7578063d5abeb01146106f4578063d88e3e3b1461071f5761021a565b80637d882097116100e75780637d882097146105b757806387df2c16146105e25780638da5cb5b1461060d578063b6fccf8a14610638578063c1f26123146106635761021a565b806370a0823114610521578063715018a61461055e57806374b31672146105755780637a113cd41461058c5761021a565b80633fb82b681161019b5780635c975abb1161016a5780635c975abb1461044c578063648ed6f61461047757806364b87a70146104a05780636817c76c146104cb5780636cabb717146104f65761021a565b80633fb82b68146103af5780633fc8cef3146103df57806343365f8c1461040a5780635c27af87146104355761021a565b80631f9902f5116101e25780631f9902f5146102c6578063225af80b146102f157806331c2273b1461032e5780633305cb77146103595780633ccfd60b146103845761021a565b806301c1dfba1461021f57806302329a291461024857806316520021146102715780631aa2df681461029d5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906138c8565b61082f565b005b34801561025457600080fd5b5061026f600480360381019061026a919061394e565b610ac4565b005b34801561027d57600080fd5b50610286610d32565b6040516102949291906145f4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906139a0565b6111dd565b005b3480156102d257600080fd5b506102db6112b3565b6040516102e891906141ae565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906139f2565b6112d9565b60405161032591906142d5565b60405180910390f35b34801561033a57600080fd5b50610343611588565b60405161035091906141ae565b60405180910390f35b34801561036557600080fd5b5061036e6115ae565b60405161037b91906145d9565b60405180910390f35b34801561039057600080fd5b506103996115b4565b6040516103a691906142d5565b60405180910390f35b6103c960048036038101906103c49190613863565b611936565b6040516103d691906145d9565b60405180910390f35b3480156103eb57600080fd5b506103f4611c56565b60405161040191906141ae565b60405180910390f35b34801561041657600080fd5b5061041f611c7c565b60405161042c91906141ae565b60405180910390f35b34801561044157600080fd5b5061044a611ca2565b005b34801561045857600080fd5b50610461611ddb565b60405161046e91906142d5565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613a2e565b611dee565b005b3480156104ac57600080fd5b506104b5611ff8565b6040516104c291906141ae565b60405180910390f35b3480156104d757600080fd5b506104e061201e565b6040516104ed91906145d9565b60405180910390f35b34801561050257600080fd5b5061050b612024565b60405161051891906141ae565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613863565b61204a565b60405161055591906145d9565b60405180910390f35b34801561056a57600080fd5b50610573612093565b005b34801561058157600080fd5b5061058a61211b565b005b34801561059857600080fd5b506105a16125a6565b6040516105ae91906145d9565b60405180910390f35b3480156105c357600080fd5b506105cc6125ac565b6040516105d991906145d9565b60405180910390f35b3480156105ee57600080fd5b506105f76125b2565b60405161060491906142d5565b60405180910390f35b34801561061957600080fd5b506106226125c5565b60405161062f91906141ae565b60405180910390f35b34801561064457600080fd5b5061064d6125ee565b60405161065a91906141ae565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906139a0565b612614565b005b34801561069857600080fd5b506106a161278f565b6040516106ae91906145d9565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190613863565b612795565b6040516106eb91906145d9565b60405180910390f35b34801561070057600080fd5b506107096127ad565b60405161071691906145d9565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061388c565b6127b3565b60405161075391906142b3565b60405180910390f35b34801561076857600080fd5b50610771612917565b60405161077e91906142d5565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613863565b61292a565b6040516107bb91906142d5565b60405180910390f35b3480156107d057600080fd5b506107d961294a565b6040516107e691906145d9565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190613863565b612950565b005b34801561082457600080fd5b5061082d612a48565b005b610837612f99565b73ffffffffffffffffffffffffffffffffffffffff166108556125c5565b73ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a2906144d9565b60405180910390fd5b600b60009054906101000a900460ff166108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190614499565b60405180910390fd5b60005b82829050811015610a6857610a5533848484818110610945577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061095a9190613863565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161099291906141ae565b60206040518083038186803b1580156109aa57600080fd5b505afa1580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e291906139c9565b858585818110610a1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a309190613863565b73ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b8080610a6090614899565b9150506108fd565b5060004790506000811115610abf573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610abd573d6000803e3d6000fd5b505b505050565b610acc612f99565b73ffffffffffffffffffffffffffffffffffffffff16610aea6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b37906144d9565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b9d91906141ae565b60206040518083038186803b158015610bb557600080fd5b505afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906139c9565b90506000811115610d1457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610c5391906145d9565b600060405180830381600087803b158015610c6d57600080fd5b505af1158015610c81573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c4b774b60026040518263ffffffff1660e01b8152600401610ce1919061433c565b600060405180830381600087803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b505050505b81600b60006101000a81548160ff0219169083151502179055505050565b600080610d3d612f99565b73ffffffffffffffffffffffffffffffffffffffff16610d5b6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da8906144d9565b60405180910390fd5b600b60009054906101000a900460ff1615610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890614599565b60405180910390fd5b600b60029054906101000a900460ff16610e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4790614399565b60405180910390fd5b6000600b60026101000a81548160ff0219169083151502179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ec891906141ae565b60206040518083038186803b158015610ee057600080fd5b505afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1891906139c9565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610f7591906145d9565b600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c4b774b60026040518263ffffffff1660e01b8152600401611003919061433c565b600060405180830381600087803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161109091906141ae565b60206040518083038186803b1580156110a857600080fd5b505afa1580156110bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e091906139c9565b600d81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161114191906141ae565b60206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119191906139c9565b600e819055507f3d8abe40e52d258d399cd7d375b9bb4edc063445ff1d3f7639ac3dd50a6c1106426040516111c691906145d9565b60405180910390a1600d54600e5492509250509091565b6111e5612f99565b73ffffffffffffffffffffffffffffffffffffffff166112036125c5565b73ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906144d9565b60405180910390fd5b600b60009054906101000a900460ff16156112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090614599565b60405180910390fd5b8060098190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900460ff161561132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614599565b60405180910390fd5b6000831161136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136590614539565b60405180910390fd5b600b60029054906101000a900460ff16156113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590614419565b60405180910390fd5b600b60019054906101000a900460ff1661140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490614419565b60405180910390fd5b60095483600c5461141e91906146e5565b111561145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690614479565b60405180910390fd5b6114ae333085600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613027909392919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a846040518263ffffffff1660e01b815260040161150991906145d9565b600060405180830381600087803b15801561152357600080fd5b505af1158015611537573d6000803e3d6000fd5b5050505061154583836130b0565b7fa76194b11cf7b940f18e866ed3382a795bb09ca684db1b957d595417f63151f88284604051611576929190614229565b60405180910390a16001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600b60009054906101000a900460ff1615611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90614599565b60405180910390fd5b600b60029054906101000a900460ff1615611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614459565b60405180910390fd5b600b60019054906101000a900460ff16156116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90614519565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f906143b9565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f54826117c191906148e2565b905060008111156118a7576000600c5482600d546117df919061476c565b6117e9919061473b565b90506000600c5483600e546117fe919061476c565b611808919061473b565b90506118573383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b6118a43382600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b50505b6118f43383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243643383604051611925929190614229565b60405180910390a160019250505090565b6000600b60009054906101000a900460ff1615611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90614599565b60405180910390fd5b600b60029054906101000a900460ff16156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614419565b60405180910390fd5b600b60019054906101000a900460ff16611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614419565b60405180910390fd5b6000806000611a7b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634613123565b92509250925060095481600c54611a9291906146e5565b1115611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca90614479565b60405180910390fd5b6000821115611b2a57611b293383600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b5b6000831115611b7b573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611b79573d6000803e3d6000fd5b505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a826040518263ffffffff1660e01b8152600401611bd691906145d9565b600060405180830381600087803b158015611bf057600080fd5b505af1158015611c04573d6000803e3d6000fd5b50505050611c1281866130b0565b7f7034bb05cfe54b0d147fc0574ed166101e7f0313eb404e113974fbe2a998ca838582604051611c43929190614229565b60405180910390a1809350505050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611caa612f99565b73ffffffffffffffffffffffffffffffffffffffff16611cc86125c5565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d15906144d9565b60405180910390fd5b600b60019054906101000a900460ff1615611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d65906143d9565b60405180910390fd5b600b60009054906101000a900460ff1615611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614599565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b600b60009054906101000a900460ff1681565b611df6612f99565b73ffffffffffffffffffffffffffffffffffffffff16611e146125c5565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e61906144d9565b60405180910390fd5b600b60009054906101000a900460ff1615611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614599565b60405180910390fd5b600b60029054906101000a900460ff1615611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190614459565b60405180910390fd5b600b60019054906101000a900460ff1615611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5190614519565b60405180910390fd5b611fa73383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b611ff43382600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fa19092919063ffffffff16565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61209b612f99565b73ffffffffffffffffffffffffffffffffffffffff166120b96125c5565b73ffffffffffffffffffffffffffffffffffffffff161461210f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612106906144d9565b60405180910390fd5b6121196000613401565b565b600b60009054906101000a900460ff161561216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290614599565b60405180910390fd5b600b60019054906101000a900460ff16156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290614519565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223f90614439565b60405180910390fd5b600f54601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156122d857506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e906144b9565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600f548261236b919061473b565b9050600854600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241091906139c9565b8261241b91906146e5565b1061245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906144f9565b60405180910390fd5b60008111156125115760005b8181101561250f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842336040518263ffffffff1660e01b81526004016124ca91906141ae565b600060405180830381600087803b1580156124e457600080fd5b505af11580156124f8573d6000803e3d6000fd5b50505050808061250790614899565b915050612467565b505b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885338260405161259a929190614229565b60405180910390a15050565b600d5481565b600c5481565b600b60019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61261c612f99565b73ffffffffffffffffffffffffffffffffffffffff1661263a6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614612690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612687906144d9565b60405180910390fd5b600b60009054906101000a900460ff16156126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d790614599565b60405180910390fd5b60005b8181101561278b57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842336040518263ffffffff1660e01b815260040161274691906141ae565b600060405180830381600087803b15801561276057600080fd5b505af1158015612774573d6000803e3d6000fd5b50505050808061278390614899565b9150506126e3565b5050565b60095481565b60106020528060005260406000206000915090505481565b60085481565b6060600267ffffffffffffffff8111156127f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128245781602001602082028036833780820191505090505b5090508281600081518110612862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816001815181106128d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b600b60029054906101000a900460ff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b600a5481565b612958612f99565b73ffffffffffffffffffffffffffffffffffffffff166129766125c5565b73ffffffffffffffffffffffffffffffffffffffff16146129cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c3906144d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3390614379565b60405180910390fd5b612a4581613401565b50565b612a50612f99565b73ffffffffffffffffffffffffffffffffffffffff16612a6e6125c5565b73ffffffffffffffffffffffffffffffffffffffff1614612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abb906144d9565b60405180910390fd5b600b60009054906101000a900460ff1615612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90614599565b60405180910390fd5b600b60029054906101000a900460ff1615612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90614419565b60405180910390fd5b600b60019054906101000a900460ff16612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614419565b60405180910390fd5b6000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c4691906141ae565b60206040518083038186803b158015612c5e57600080fd5b505afa158015612c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9691906139c9565b1115612dd457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a694fc3a600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d3591906141ae565b60206040518083038186803b158015612d4d57600080fd5b505afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8591906139c9565b6040518263ffffffff1660e01b8152600401612da191906145d9565b600060405180830381600087803b158015612dbb57600080fd5b505af1158015612dcf573d6000803e3d6000fd5b505050505b600a54600c54612de4919061473b565b600f819055507fb9c5567aa0a4fb84cf102cd31fdfb097fc1f9f0005bfdee931550955bf4ff67242604051612e1991906145d9565b60405180910390a1565b6000811480612ebc575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612e6a9291906141c9565b60206040518083038186803b158015612e8257600080fd5b505afa158015612e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eba91906139c9565b145b612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906145b9565b60405180910390fd5b612f7c8363095ea7b360e01b8484604051602401612f1a929190614229565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134c5565b505050565b6060612f90848460008561358c565b90509392505050565b600033905090565b6130228363a9059cbb60e01b8484604051602401612fc0929190614229565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134c5565b505050565b6130aa846323b872dd60e01b858585604051602401613048939291906141f2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134c5565b50505050565b81601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ff91906146e5565b9250508190555081600c600082825461311891906146e5565b925050819055505050565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16637ff36ab5600288613179919061473b565b60006131858c8c6127b3565b30426040518663ffffffff1660e01b81526004016131a694939291906142f0565b6000604051808303818588803b1580156131bf57600080fd5b505af11580156131d3573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906131fd919061390d565b600181518110613236577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff1663f305d71960028a61326c919061473b565b8b8660008030426040518863ffffffff1660e01b815260040161329496959493929190614252565b6060604051808303818588803b1580156132ad57600080fd5b505af11580156132c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132e69190613a6a565b809750819350829450505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461335857818361335391906147c6565b613371565b80600289613366919061473b565b61337091906147c6565b5b9650600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146133d95781836133d491906147c6565b6133f2565b806002896133e7919061473b565b6133f191906147c6565b5b95505050505093509350939050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000613527826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612f819092919063ffffffff16565b905060008151111561358757808060200190518101906135479190613977565b613586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357d90614579565b60405180910390fd5b5b505050565b6060824710156135d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c8906143f9565b60405180910390fd5b6135da856136a0565b613619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361090614559565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516136429190614197565b60006040518083038185875af1925050503d806000811461367f576040519150601f19603f3d011682016040523d82523d6000602084013e613684565b606091505b50915091506136948282866136b3565b92505050949350505050565b600080823b905060008111915050919050565b606083156136c357829050613713565b6000835111156136d65782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370a9190614357565b60405180910390fd5b9392505050565b600061372d6137288461464e565b61461d565b9050808382526020820190508285602086028201111561374c57600080fd5b60005b8581101561377c5781613762888261384e565b84526020840193506020830192505060018101905061374f565b5050509392505050565b600081359050613795816149b1565b92915050565b60008083601f8401126137ad57600080fd5b8235905067ffffffffffffffff8111156137c657600080fd5b6020830191508360208202830111156137de57600080fd5b9250929050565b600082601f8301126137f657600080fd5b815161380684826020860161371a565b91505092915050565b60008135905061381e816149c8565b92915050565b600081519050613833816149c8565b92915050565b600081359050613848816149df565b92915050565b60008151905061385d816149df565b92915050565b60006020828403121561387557600080fd5b600061388384828501613786565b91505092915050565b6000806040838503121561389f57600080fd5b60006138ad85828601613786565b92505060206138be85828601613786565b9150509250929050565b600080602083850312156138db57600080fd5b600083013567ffffffffffffffff8111156138f557600080fd5b6139018582860161379b565b92509250509250929050565b60006020828403121561391f57600080fd5b600082015167ffffffffffffffff81111561393957600080fd5b613945848285016137e5565b91505092915050565b60006020828403121561396057600080fd5b600061396e8482850161380f565b91505092915050565b60006020828403121561398957600080fd5b600061399784828501613824565b91505092915050565b6000602082840312156139b257600080fd5b60006139c084828501613839565b91505092915050565b6000602082840312156139db57600080fd5b60006139e98482850161384e565b91505092915050565b60008060408385031215613a0557600080fd5b6000613a1385828601613839565b9250506020613a2485828601613786565b9150509250929050565b60008060408385031215613a4157600080fd5b6000613a4f85828601613839565b9250506020613a6085828601613839565b9150509250929050565b600080600060608486031215613a7f57600080fd5b6000613a8d8682870161384e565b9350506020613a9e8682870161384e565b9250506040613aaf8682870161384e565b9150509250925092565b6000613ac58383613ad1565b60208301905092915050565b613ada816147fa565b82525050565b613ae9816147fa565b82525050565b6000613afa8261468a565b613b0481856146b8565b9350613b0f8361467a565b8060005b83811015613b40578151613b278882613ab9565b9750613b32836146ab565b925050600181019050613b13565b5085935050505092915050565b613b568161480c565b82525050565b6000613b6782614695565b613b7181856146c9565b9350613b81818560208601614866565b80840191505092915050565b613b9681614842565b82525050565b613ba581614854565b82525050565b6000613bb6826146a0565b613bc081856146d4565b9350613bd0818560208601614866565b613bd9816149a0565b840191505092915050565b6000613bf16026836146d4565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c576015836146d4565b91507f4661726d696e67206973206e6f742061637469766500000000000000000000006000830152602082019050919050565b6000613c97600b836146d4565b91507f6e6f206465706f736974730000000000000000000000000000000000000000006000830152602082019050919050565b6000613cd76021836146d4565b91507f4465706f73697420706572696f6420697320616c72656164792073746172746560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d3d6026836146d4565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613da36019836146d4565b91507f4465706f736974732068617665206265656e20636c6f736564000000000000006000830152602082019050919050565b6000613de3601d836146d4565b91507f557365722068617320616c726561647920636c61696d6564206d696e740000006000830152602082019050919050565b6000613e236015836146d4565b91507f4661726d696e6720686173206e6f7420656e64656400000000000000000000006000830152602082019050919050565b6000613e636026836146d4565b91507f6465706f73697420616d6f756e742065786365656473206d6178204c5020646560008301527f706f7369747300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ec96016836146d4565b91507f436f6e7472616374206973206e6f7420706175736564000000000000000000006000830152602082019050919050565b6000613f096020836146d4565b91507f5573657220686173206e6f74206465706f736974656420656e6f756768204c506000830152602082019050919050565b6000613f496020836146d4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613f896012836146d4565b91507f6d696e74206c696d6974207265616368656400000000000000000000000000006000830152602082019050919050565b6000613fc9601d836146d4565b91507f4465706f736974732068617665206e6f74206265656e20636c6f7365640000006000830152602082019050919050565b60006140096008836146d4565b91507f616d6f756e7420300000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614049601d836146d4565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614089602a836146d4565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006140ef6012836146d4565b91507f436f6e74726163742069732070617573656400000000000000000000000000006000830152602082019050919050565b600061412f6036836146d4565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b61419181614838565b82525050565b60006141a38284613b5c565b915081905092915050565b60006020820190506141c36000830184613ae0565b92915050565b60006040820190506141de6000830185613ae0565b6141eb6020830184613ae0565b9392505050565b60006060820190506142076000830186613ae0565b6142146020830185613ae0565b6142216040830184614188565b949350505050565b600060408201905061423e6000830185613ae0565b61424b6020830184614188565b9392505050565b600060c0820190506142676000830189613ae0565b6142746020830188614188565b6142816040830187613b8d565b61428e6060830186613b8d565b61429b6080830185613ae0565b6142a860a0830184614188565b979650505050505050565b600060208201905081810360008301526142cd8184613aef565b905092915050565b60006020820190506142ea6000830184613b4d565b92915050565b60006080820190506143056000830187613b8d565b81810360208301526143178186613aef565b90506143266040830185613ae0565b6143336060830184614188565b95945050505050565b60006020820190506143516000830184613b9c565b92915050565b600060208201905081810360008301526143718184613bab565b905092915050565b6000602082019050818103600083015261439281613be4565b9050919050565b600060208201905081810360008301526143b281613c4a565b9050919050565b600060208201905081810360008301526143d281613c8a565b9050919050565b600060208201905081810360008301526143f281613cca565b9050919050565b6000602082019050818103600083015261441281613d30565b9050919050565b6000602082019050818103600083015261443281613d96565b9050919050565b6000602082019050818103600083015261445281613dd6565b9050919050565b6000602082019050818103600083015261447281613e16565b9050919050565b6000602082019050818103600083015261449281613e56565b9050919050565b600060208201905081810360008301526144b281613ebc565b9050919050565b600060208201905081810360008301526144d281613efc565b9050919050565b600060208201905081810360008301526144f281613f3c565b9050919050565b6000602082019050818103600083015261451281613f7c565b9050919050565b6000602082019050818103600083015261453281613fbc565b9050919050565b6000602082019050818103600083015261455281613ffc565b9050919050565b600060208201905081810360008301526145728161403c565b9050919050565b600060208201905081810360008301526145928161407c565b9050919050565b600060208201905081810360008301526145b2816140e2565b9050919050565b600060208201905081810360008301526145d281614122565b9050919050565b60006020820190506145ee6000830184614188565b92915050565b60006040820190506146096000830185614188565b6146166020830184614188565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561464457614643614971565b5b8060405250919050565b600067ffffffffffffffff82111561466957614668614971565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006146f082614838565b91506146fb83614838565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147305761472f614913565b5b828201905092915050565b600061474682614838565b915061475183614838565b92508261476157614760614942565b5b828204905092915050565b600061477782614838565b915061478283614838565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147bb576147ba614913565b5b828202905092915050565b60006147d182614838565b91506147dc83614838565b9250828210156147ef576147ee614913565b5b828203905092915050565b600061480582614818565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061484d82614838565b9050919050565b600061485f82614838565b9050919050565b60005b83811015614884578082015181840152602081019050614869565b83811115614893576000848401525b50505050565b60006148a482614838565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148d7576148d6614913565b5b600182019050919050565b60006148ed82614838565b91506148f883614838565b92508261490857614907614942565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6149ba816147fa565b81146149c557600080fd5b50565b6149d18161480c565b81146149dc57600080fd5b50565b6149e881614838565b81146149f357600080fd5b5056fea2646970667358221220b9e8836d7c3168e2c432753ac76bd086a04bd46c931264412984a5dea15cd02164736f6c63430008000033000000000000000000000000ede855ced3e5a59aaa267abdddb0db21ccfe50720000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5500000000000000000000000032eb7902d4134bf98a28b963d26de779af92a21200000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000007418f5a2621e13c05d1efbd71ec922070794b90a00000000000000000000000003ac1aa1ff470cf376e6b7cd3a3389ad6d922a740000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000000000000000000000000034b2f1c8f6049c8000000000000000000000000000000000000000000000000000000000000000008ae
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ede855ced3e5a59aaa267abdddb0db21ccfe50720000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5500000000000000000000000032eb7902d4134bf98a28b963d26de779af92a21200000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000007418f5a2621e13c05d1efbd71ec922070794b90a00000000000000000000000003ac1aa1ff470cf376e6b7cd3a3389ad6d922a740000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000000000000000000000000034b2f1c8f6049c8000000000000000000000000000000000000000000000000000000000000000008ae
-----Decoded View---------------
Arg [0] : _NFTContract (address): 0xede855ced3e5a59aaa267abdddb0db21ccfe5072
Arg [1] : _dpx (address): 0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55
Arg [2] : _rdpx (address): 0x32eb7902d4134bf98a28b963d26de779af92a212
Arg [3] : _weth (address): 0x82af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [4] : _lp (address): 0x7418f5a2621e13c05d1efbd71ec922070794b90a
Arg [5] : _stakingRewards (address): 0x03ac1aa1ff470cf376e6b7cd3a3389ad6d922a74
Arg [6] : _uniswapV2Router01 (address): 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506
Arg [7] : _maxSupply (uint256): 2222
Arg [8] : _maxLpDeposits (uint256): 15554000000000000000000
Arg [9] : _NFTsForSale (uint256): 2222
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000ede855ced3e5a59aaa267abdddb0db21ccfe5072
Arg [1] : 0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee55
Arg [2] : 00000000000000000000000032eb7902d4134bf98a28b963d26de779af92a212
Arg [3] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [4] : 0000000000000000000000007418f5a2621e13c05d1efbd71ec922070794b90a
Arg [5] : 00000000000000000000000003ac1aa1ff470cf376e6b7cd3a3389ad6d922a74
Arg [6] : 0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b47997506
Arg [7] : 00000000000000000000000000000000000000000000000000000000000008ae
Arg [8] : 00000000000000000000000000000000000000000000034b2f1c8f6049c80000
Arg [9] : 00000000000000000000000000000000000000000000000000000000000008ae
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.