Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 733 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake All | 13399243 | 1115 days ago | IN | 0 ETH | 0.01669991 | ||||
Transfer Ownersh... | 12098087 | 1317 days ago | IN | 0 ETH | 0.00366378 | ||||
Unstake All | 12009021 | 1331 days ago | IN | 0 ETH | 0.00972537 | ||||
Transfer Ownersh... | 11999060 | 1333 days ago | IN | 0 ETH | 0.00506558 | ||||
Unstake All | 11995448 | 1333 days ago | IN | 0 ETH | 0.00241412 | ||||
Unstake All | 11995445 | 1333 days ago | IN | 0 ETH | 0.0109968 | ||||
Unstake All | 11986412 | 1335 days ago | IN | 0 ETH | 0.00271555 | ||||
Unstake All | 11986412 | 1335 days ago | IN | 0 ETH | 0.01236984 | ||||
Unstake All | 11984296 | 1335 days ago | IN | 0 ETH | 0.00765142 | ||||
Unstake All | 11980781 | 1335 days ago | IN | 0 ETH | 0.0124337 | ||||
Claim All Reward... | 11979278 | 1336 days ago | IN | 0 ETH | 0.01540816 | ||||
Unstake All | 11977445 | 1336 days ago | IN | 0 ETH | 0.01488546 | ||||
Unstake All | 11977040 | 1336 days ago | IN | 0 ETH | 0.01391097 | ||||
Unstake All | 11976577 | 1336 days ago | IN | 0 ETH | 0.01005772 | ||||
Unstake All | 11975863 | 1336 days ago | IN | 0 ETH | 0.01190741 | ||||
Unstake All | 11974323 | 1336 days ago | IN | 0 ETH | 0.00251252 | ||||
Unstake All | 11974323 | 1336 days ago | IN | 0 ETH | 0.01121378 | ||||
Unstake All | 11974151 | 1336 days ago | IN | 0 ETH | 0.01194128 | ||||
Unstake All | 11966996 | 1338 days ago | IN | 0 ETH | 0.0123106 | ||||
Unstake All | 11926017 | 1344 days ago | IN | 0 ETH | 0.01501893 | ||||
Unstake All | 11606974 | 1393 days ago | IN | 0 ETH | 0.00602307 | ||||
Unstake All | 11603681 | 1393 days ago | IN | 0 ETH | 0.00853172 | ||||
Unstake All | 11585585 | 1396 days ago | IN | 0 ETH | 0.01709942 | ||||
Unstake All | 11574384 | 1398 days ago | IN | 0 ETH | 0.00487009 | ||||
Unstake All | 11572658 | 1398 days ago | IN | 0 ETH | 0.00404621 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
NFYStaking
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-29 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @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 in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @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"); } } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/Ownable.sol pragma solidity ^0.6.10; contract Ownable is Context { address payable public owner; event TransferredOwnership(address _previous, address _next, uint256 _time); event AddedPlatformAddress(address _platformAddress, uint256 _time); modifier onlyOwner() { require(_msgSender() == owner, "Owner only"); _; } modifier onlyPlatform() { require(platformAddress[_msgSender()] == true, "Only Platform"); _; } mapping(address => bool) platformAddress; constructor() public { owner = _msgSender(); } function transferOwnership(address payable _owner) public onlyOwner() { address previousOwner = owner; owner = _owner; emit TransferredOwnership(previousOwner, owner, now); } function addPlatformAddress(address _platformAddress) public onlyOwner() { platformAddress[_platformAddress] = true; emit AddedPlatformAddress(_platformAddress, now); } } // File: contracts/NFYStaking.sol pragma solidity ^0.6.10; interface INFYStakingNFT { function nftTokenId(address _stakeholder) external view returns(uint256 id); function revertNftTokenId(address _stakeholder, uint256 _tokenId) external; function ownerOf(uint256 tokenId) external view returns (address owner); function balanceOf(address owner) external view returns (uint256 balance); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); } contract NFYStaking is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; struct NFT { address _addressOfMinter; uint256 _NFYDeposited; bool _inCirculation; uint256 _rewardDebt; } event StakeCompleted(address _staker, uint256 _amount, uint256 _tokenId, uint256 _totalStaked, uint256 _time); event WithdrawCompleted(address _staker, uint256 _amount, uint256 _tokenId, uint256 _time); event PoolUpdated(uint256 _blocksRewarded, uint256 _amountRewarded, uint256 _time); event RewardsClaimed(address _staker, uint256 _rewardsClaimed, uint256 _tokenId, uint256 _time); event RewardsCompounded(address _staker, uint256 _rewardsCompounded, uint256 _tokenId, uint256 _totalStaked, uint256 _time); event MintedToken(address _staker, uint256 _tokenId, uint256 _time); event TotalUnstaked(uint256 _total); IERC20 public NFYToken; INFYStakingNFT public StakingNFT; address public rewardPool; address public staking; uint256 public dailyReward; uint256 public accNfyPerShare; uint256 public lastRewardBlock; uint256 public totalStaked; mapping(uint256 => NFT) public NFTDetails; // Constructor will set the address of NFY token and address of NFY staking NFT constructor(address _NFYToken, address _StakingNFT, address _staking, address _rewardPool, uint256 _dailyReward) Ownable() public { NFYToken = IERC20(_NFYToken); StakingNFT = INFYStakingNFT(_StakingNFT); staking = _staking; rewardPool = _rewardPool; // 10:30 EST October 29th lastRewardBlock = 11152600; setDailyReward(_dailyReward); accNfyPerShare = 0; } // 6500 blocks in average day --- decimals * NFY balance of rewardPool / blocks / 10000 * dailyReward (in hundredths of %) = rewardPerBlock function getRewardPerBlock() public view returns(uint256) { return NFYToken.balanceOf(rewardPool).div(6500).div(10000).mul(dailyReward); } // % of reward pool to be distributed each day --- in hundredths of % 30 == 0.3% function setDailyReward(uint256 _dailyReward) public onlyOwner { dailyReward = _dailyReward; } // Function that will get balance of a NFY balance of a certain stake function getNFTBalance(uint256 _tokenId) public view returns(uint256 _amountStaked) { return NFTDetails[_tokenId]._NFYDeposited; } // Function that will check if a NFY stake NFT is in circulation function checkIfNFTInCirculation(uint256 _tokenId) public view returns(bool _inCirculation) { return NFTDetails[_tokenId]._inCirculation; } // Function that returns NFT's pending rewards function pendingRewards(uint256 _NFT) public view returns(uint256) { NFT storage nft = NFTDetails[_NFT]; uint256 _accNfyPerShare = accNfyPerShare; if (block.number > lastRewardBlock && totalStaked != 0) { uint256 blocksToReward = block.number.sub(lastRewardBlock); uint256 nfyReward = blocksToReward.mul(getRewardPerBlock()); _accNfyPerShare = _accNfyPerShare.add(nfyReward.mul(1e18).div(totalStaked)); } return nft._NFYDeposited.mul(_accNfyPerShare).div(1e18).sub(nft._rewardDebt); } // Get total rewards for all of user's NFY nfts function getTotalRewards(address _address) public view returns(uint256) { uint256 totalRewards; for(uint256 i = 0; i < StakingNFT.balanceOf(_address); i++) { uint256 _rewardPerNFT = pendingRewards(StakingNFT.tokenOfOwnerByIndex(_address, i)); totalRewards = totalRewards.add(_rewardPerNFT); } return totalRewards; } // Get total stake for all user's NFY nfts function getTotalBalance(address _address) public view returns(uint256) { uint256 totalBalance; for(uint256 i = 0; i < StakingNFT.balanceOf(_address); i++) { uint256 _balancePerNFT = getNFTBalance(StakingNFT.tokenOfOwnerByIndex(_address, i)); totalBalance = totalBalance.add(_balancePerNFT); } return totalBalance; } // Function that updates NFY pool function updatePool() public { if (block.number <= lastRewardBlock) { return; } if (totalStaked == 0) { lastRewardBlock = block.number; return; } uint256 blocksToReward = block.number.sub(lastRewardBlock); uint256 nfyReward = blocksToReward.mul(getRewardPerBlock()); //Approve nfyReward here NFYToken.transferFrom(rewardPool, address(this), nfyReward); accNfyPerShare = accNfyPerShare.add(nfyReward.mul(1e18).div(totalStaked)); lastRewardBlock = block.number; emit PoolUpdated(blocksToReward, nfyReward, now); } // Function that lets user stake NFY function stakeNFY(uint256 _amount) public { require(_amount > 0, "Can not stake 0 NFY"); require(NFYToken.balanceOf(_msgSender()) >= _amount, "Do not have enough NFY to stake"); updatePool(); if(StakingNFT.nftTokenId(_msgSender()) == 0){ addStakeholder(_msgSender()); } NFT storage nft = NFTDetails[StakingNFT.nftTokenId(_msgSender())]; if(nft._NFYDeposited > 0) { uint256 _pendingRewards = nft._NFYDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(_msgSender(), _pendingRewards); emit RewardsClaimed(_msgSender(), _pendingRewards, StakingNFT.nftTokenId(_msgSender()), now); } } NFYToken.transferFrom(_msgSender(), address(this), _amount); nft._NFYDeposited = nft._NFYDeposited.add(_amount); totalStaked = totalStaked.add(_amount); nft._rewardDebt = nft._NFYDeposited.mul(accNfyPerShare).div(1e18); emit StakeCompleted(_msgSender(), _amount, StakingNFT.nftTokenId(_msgSender()), nft._NFYDeposited, now); } function addStakeholder(address _stakeholder) private { (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("mint(address)", _stakeholder)); require(success == true, "Mint call failed"); NFTDetails[StakingNFT.nftTokenId(_msgSender())]._addressOfMinter = _stakeholder; NFTDetails[StakingNFT.nftTokenId(_msgSender())]._inCirculation = true; } function addStakeholderExternal(address _stakeholder) external onlyPlatform() { (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("mint(address)", _stakeholder)); require(success == true, "Mint call failed"); NFTDetails[StakingNFT.nftTokenId(_msgSender())]._addressOfMinter = _stakeholder; NFTDetails[StakingNFT.nftTokenId(_msgSender())]._inCirculation = true; } // Function that will allow user to claim rewards function claimRewards(uint256 _tokenId) public { require(StakingNFT.ownerOf(_tokenId) == _msgSender(), "User is not owner of token"); require(NFTDetails[_tokenId]._inCirculation == true, "Stake has already been withdrawn"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; uint256 _pendingRewards = nft._NFYDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); require(_pendingRewards > 0, "No rewards to claim!"); NFYToken.transfer(_msgSender(), _pendingRewards); nft._rewardDebt = nft._NFYDeposited.mul(accNfyPerShare).div(1e18); emit RewardsClaimed(_msgSender(), _pendingRewards, _tokenId, now); } // Function that will add NFY rewards to NFY staking NFT function compoundRewards(uint256 _tokenId) public { require(StakingNFT.ownerOf(_tokenId) == _msgSender(), "User is not owner of token"); require(NFTDetails[_tokenId]._inCirculation == true, "Stake has already been withdrawn"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; uint256 _pendingRewards = nft._NFYDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); require(_pendingRewards > 0, "No rewards to compound!"); nft._NFYDeposited = nft._NFYDeposited.add(_pendingRewards); totalStaked = totalStaked.add(_pendingRewards); nft._rewardDebt = nft._NFYDeposited.mul(accNfyPerShare).div(1e18); emit RewardsCompounded(_msgSender(), _pendingRewards, _tokenId, nft._NFYDeposited, now); } // Function that lets user claim all rewards from all their nfts function claimAllRewards() public { require(StakingNFT.balanceOf(_msgSender()) > 0, "User has no stake"); for(uint256 i = 0; i < StakingNFT.balanceOf(_msgSender()); i++) { uint256 _currentNFT = StakingNFT.tokenOfOwnerByIndex(_msgSender(), i); claimRewards(_currentNFT); } } // Function that lets user compound all rewards from all their nfts function compoundAllRewards() public { require(StakingNFT.balanceOf(_msgSender()) > 0, "User has no stake"); for(uint256 i = 0; i < StakingNFT.balanceOf(_msgSender()); i++) { uint256 _currentNFT = StakingNFT.tokenOfOwnerByIndex(_msgSender(), i); compoundRewards(_currentNFT); } } // Function that lets user unstake NFY in system. 5% fee that gets redistributed back to reward pool function unstakeNFY(uint256 _tokenId) public { // Require that user is owner of token id require(StakingNFT.ownerOf(_tokenId) == _msgSender(), "User is not owner of token"); require(NFTDetails[_tokenId]._inCirculation == true, "Stake has already been withdrawn"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; uint256 _pendingRewards = nft._NFYDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); uint256 amountStaked = getNFTBalance(_tokenId); uint256 stakeAfterFees = amountStaked.div(100).mul(95); uint256 userReceives = amountStaked.div(100).mul(95).add(_pendingRewards); uint256 fee = amountStaked.div(100).mul(5); uint256 beingWithdrawn = nft._NFYDeposited; nft._NFYDeposited = 0; nft._inCirculation = false; totalStaked = totalStaked.sub(beingWithdrawn); StakingNFT.revertNftTokenId(_msgSender(), _tokenId); (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("burn(uint256)", _tokenId)); require(success == true, "mint call failed"); NFYToken.transfer(_msgSender(), userReceives); NFYToken.transfer(rewardPool, fee); emit WithdrawCompleted(_msgSender(), stakeAfterFees, _tokenId, now); emit RewardsClaimed(_msgSender(), _pendingRewards, _tokenId, now); } // Function that will unstake every user's NFY stake NFT for user function unstakeAll() public { require(StakingNFT.balanceOf(_msgSender()) > 0, "User has no stake"); while(StakingNFT.balanceOf(_msgSender()) > 0) { uint256 _currentNFT = StakingNFT.tokenOfOwnerByIndex(_msgSender(), 0); unstakeNFY(_currentNFT); } } // Will increment value of staking NFT when trade occurs function incrementNFTValue (uint256 _tokenId, uint256 _amount) external onlyPlatform() { require(checkIfNFTInCirculation(_tokenId) == true, "Token not in circulation"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; if(nft._NFYDeposited > 0) { uint256 _pendingRewards = nft._NFYDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(StakingNFT.ownerOf(_tokenId), _pendingRewards); emit RewardsClaimed(StakingNFT.ownerOf(_tokenId), _pendingRewards, _tokenId, now); } } NFTDetails[_tokenId]._NFYDeposited = NFTDetails[_tokenId]._NFYDeposited.add(_amount); nft._rewardDebt = nft._NFYDeposited.mul(accNfyPerShare).div(1e18); } // Will decrement value of staking NFT when trade occurs function decrementNFTValue (uint256 _tokenId, uint256 _amount) external onlyPlatform() { require(checkIfNFTInCirculation(_tokenId) == true, "Token not in circulation"); require(getNFTBalance(_tokenId) >= _amount, "Not enough stake in NFT"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; if(nft._NFYDeposited > 0) { uint256 _pendingRewards = nft._NFYDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(StakingNFT.ownerOf(_tokenId), _pendingRewards); emit RewardsClaimed(StakingNFT.ownerOf(_tokenId), _pendingRewards, _tokenId, now); } } NFTDetails[_tokenId]._NFYDeposited = NFTDetails[_tokenId]._NFYDeposited.sub(_amount); nft._rewardDebt = nft._NFYDeposited.mul(accNfyPerShare).div(1e18); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_NFYToken","type":"address"},{"internalType":"address","name":"_StakingNFT","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_rewardPool","type":"address"},{"internalType":"uint256","name":"_dailyReward","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_platformAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"AddedPlatformAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"MintedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_blocksRewarded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountRewarded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_rewardsClaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_rewardsCompounded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalStaked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"RewardsCompounded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalStaked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"StakeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_total","type":"uint256"}],"name":"TotalUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_previous","type":"address"},{"indexed":false,"internalType":"address","name":"_next","type":"address"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"TransferredOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"WithdrawCompleted","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTDetails","outputs":[{"internalType":"address","name":"_addressOfMinter","type":"address"},{"internalType":"uint256","name":"_NFYDeposited","type":"uint256"},{"internalType":"bool","name":"_inCirculation","type":"bool"},{"internalType":"uint256","name":"_rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFYToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StakingNFT","outputs":[{"internalType":"contract INFYStakingNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accNfyPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_platformAddress","type":"address"}],"name":"addPlatformAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakeholder","type":"address"}],"name":"addStakeholderExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkIfNFTInCirculation","outputs":[{"internalType":"bool","name":"_inCirculation","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compoundAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"compoundRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"decrementNFTValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getNFTBalance","outputs":[{"internalType":"uint256","name":"_amountStaked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"incrementNFTValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NFT","type":"uint256"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dailyReward","type":"uint256"}],"name":"setDailyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeNFY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unstakeNFY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620055bb380380620055bb833981810160405260a08110156200003757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505062000080620001f160201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062aa2cd8600881905550620001de81620001f960201b60201c565b60006007819055505050505050620002d5565b600033905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000241620001f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060068190555050565b6152d680620002e56000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80636ae21510116101045780639ca152f1116100a2578063e3161ddd11610071578063e3161ddd14610771578063ef50d9631461077b578063f2fde38b146107a9578063fd5e0fe2146107ed576101d9565b80639ca152f114610699578063a9f8d181146106dd578063c964ad45146106fb578063d3d3819314610719576101d9565b80637dcb2abf116100de5780637dcb2abf146105b7578063817b1cd2146105f95780638306fddb146106175780638da5cb5b1461064f576101d9565b80636ae21510146104dc5780636bdb744e146104e65780636c9128e21461056d576101d9565b80632d90a6761161017c57806349df8d331161014b57806349df8d33146103fc5780634cf088d91461041a578063656c579f1461046457806366666aa914610492576101d9565b80632d90a6761461034257806331455f2a1461037057806333a1cb27146103a857806335322f37146103f2576101d9565b80630aa43533116101b85780630aa43533146102945780630b83a727146102c25780631190615d146102cc5780632bcf161c146102ea576101d9565b80628e5c2a146101de57806302d24d94146102245780630962ef7914610266575b600080fd5b61020a600480360360208110156101f457600080fd5b8101908080359060200190929190505050610831565b604051808215151515815260200191505060405180910390f35b6102506004803603602081101561023a57600080fd5b810190808035906020019092919050505061085e565b6040518082815260200191505060405180910390f35b6102926004803603602081101561027c57600080fd5b810190808035906020019092919050505061087e565b005b6102c0600480360360208110156102aa57600080fd5b8101908080359060200190929190505050610d00565b005b6102ca610dd3565b005b6102d461111e565b6040518082815260200191505060405180910390f35b61032c6004803603602081101561030057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611124565b6040518082815260200191505060405180910390f35b61036e6004803603602081101561035857600080fd5b8101908080359060200190929190505050611329565b005b6103a66004803603604081101561038657600080fd5b810190808035906020019092919080359060200190929190505050611c21565b005b6103b06121b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103fa6121d6565b005b610404612515565b6040518082815260200191505060405180910390f35b610422612654565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104906004803603602081101561047a57600080fd5b810190808035906020019092919050505061267a565b005b61049a612a56565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e4612a7c565b005b610512600480360360208110156104fc57600080fd5b8101908080359060200190929190505050612dc7565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b610575612e24565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e3600480360360208110156105cd57600080fd5b8101908080359060200190929190505050612e4a565b6040518082815260200191505060405180910390f35b610601612f4f565b6040518082815260200191505060405180910390f35b61064d6004803603604081101561062d57600080fd5b810190808035906020019092919080359060200190929190505050612f55565b005b610657613466565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106db600480360360208110156106af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348b565b005b6106e56139b1565b6040518082815260200191505060405180910390f35b6107036139b7565b6040518082815260200191505060405180910390f35b61075b6004803603602081101561072f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139bd565b6040518082815260200191505060405180910390f35b610779613bc2565b005b6107a76004803603602081101561079157600080fd5b8101908080359060200190929190505050613df5565b005b6107eb600480360360208110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614775565b005b61082f6004803603602081101561080357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614968565b005b6000600a600083815260200190815260200160002060020160009054906101000a900460ff169050919050565b6000600a6000838152602001908152602001600020600101549050919050565b610886614af6565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561090f57600080fd5b505afa158015610923573d6000803e3d6000fd5b505050506040513d602081101561093957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146109d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600a600083815260200190815260200160002060020160009054906101000a900460ff16151514610a70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b610a78613bc2565b6000600a600083815260200190815260200160002090506000610ada8260030154610acc670de0b6b3a7640000610abe6007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b905060008111610b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f207265776172647320746f20636c61696d2100000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610b98614af6565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c0257600080fd5b505af1158015610c16573d6000803e3d6000fd5b505050506040513d6020811015610c2c57600080fd5b810190808051906020019092919050505050610c71670de0b6b3a7640000610c636007548560010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b82600301819055507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf610ca2614af6565b828542604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d40614af6565b73ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060068190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610e1b614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e7b57600080fd5b505afa158015610e8f573d6000803e3d6000fd5b505050506040513d6020811015610ea557600080fd5b810190808051906020019092919050505011610f29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610f75614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fd557600080fd5b505afa158015610fe9573d6000803e3d6000fd5b505050506040513d6020811015610fff57600080fd5b810190808051906020019092919050505081101561111b576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5961105f614af6565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156110c757600080fd5b505afa1580156110db573d6000803e3d6000fd5b505050506040513d60208110156110f157600080fd5b8101908080519060200190929190505050905061110d8161087e565b508080600101915050610f2f565b50565b60075481565b60008060008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111cc57600080fd5b505afa1580156111e0573d6000803e3d6000fd5b505050506040513d60208110156111f657600080fd5b810190808051906020019092919050505081101561131f5760006112fa600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156112ba57600080fd5b505afa1580156112ce573d6000803e3d6000fd5b505050506040513d60208110156112e457600080fd5b8101908080519060200190929190505050612e4a565b905061130f8184614c1890919063ffffffff16565b925050808060010191505061112d565b5080915050919050565b611331614af6565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156113ba57600080fd5b505afa1580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600a600083815260200190815260200160002060020160009054906101000a900460ff1615151461151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b611523613bc2565b6000600a6000838152602001908152602001600020905060006115858260030154611577670de0b6b3a76400006115696007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b905060006115928461085e565b905060006115bd605f6115af606485614b8490919063ffffffff16565b614afe90919063ffffffff16565b905060006115fa846115ec605f6115de606488614b8490919063ffffffff16565b614afe90919063ffffffff16565b614c1890919063ffffffff16565b905060006116256005611617606487614b8490919063ffffffff16565b614afe90919063ffffffff16565b90506000866001015490506000876001018190555060008760020160006101000a81548160ff02191690831515021790555061166c81600954614bce90919063ffffffff16565b600981905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386de6c656116b8614af6565b8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561172257600080fd5b505af1158015611736573d6000803e3d6000fd5b5050505060006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a604051602401808281526020019150506040516020818303038152906040527f42966c68000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106118385780518252602082019150602081019050602083039250611815565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461189a576040519150601f19603f3d011682016040523d82523d6000602084013e61189f565b606091505b5091509150600115158215151461191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611964614af6565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156119ce57600080fd5b505af11580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611ad557600080fd5b505af1158015611ae9573d6000803e3d6000fd5b505050506040513d6020811015611aff57600080fd5b8101908080519060200190929190505050507ffada57d3c4b7d2ba1d17dd51770436f3164806d8cf30ca643ad4c050f07019ea611b3a614af6565b878c42604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a17f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf611bbc614af6565b898c42604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a150505050505050505050565b6001151560016000611c31614af6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515611cfb83610831565b151514611d70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b80611d7a8361085e565b1015611dee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f7420656e6f756768207374616b6520696e204e465400000000000000000081525060200191505060405180910390fd5b611df6613bc2565b6000600a6000848152602001908152602001600020905060008160010154111561212d576000611e658260030154611e57670de0b6b3a7640000611e496007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b9050600081111561212b57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611fc657600080fd5b505af1158015611fda573d6000803e3d6000fd5b505050506040513d6020811015611ff057600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561209657600080fd5b505afa1580156120aa573d6000803e3d6000fd5b505050506040513d60208110156120c057600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61215682600a600086815260200190815260200160002060010154614bce90919063ffffffff16565b600a6000858152602001908152602001600020600101819055506121a3670de0b6b3a76400006121956007548460010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b8160030181905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161221e614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b81019080805190602001909291905050501161232c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231612375614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123d557600080fd5b505afa1580156123e9573d6000803e3d6000fd5b505050506040513d60208110156123ff57600080fd5b81019080805190602001909291905050501115612513576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5961245e614af6565b60006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156124c757600080fd5b505afa1580156124db573d6000803e3d6000fd5b505050506040513d60208110156124f157600080fd5b8101908080519060200190929190505050905061250d81611329565b5061232d565b565b600061264f600654612641612710612633611964600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125ea57600080fd5b505afa1580156125fe573d6000803e3d6000fd5b505050506040513d602081101561261457600080fd5b8101908080519060200190929190505050614b8490919063ffffffff16565b614b8490919063ffffffff16565b614afe90919063ffffffff16565b905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612682614af6565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561270b57600080fd5b505afa15801561271f573d6000803e3d6000fd5b505050506040513d602081101561273557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146127cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600a600083815260200190815260200160002060020160009054906101000a900460ff1615151461286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b612874613bc2565b6000600a6000838152602001908152602001600020905060006128d682600301546128c8670de0b6b3a76400006128ba6007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b90506000811161294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f207265776172647320746f20636f6d706f756e642100000000000000000081525060200191505060405180910390fd5b612965818360010154614c1890919063ffffffff16565b826001018190555061298281600954614c1890919063ffffffff16565b6009819055506129bb670de0b6b3a76400006129ad6007548560010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b82600301819055507fd4084615ea35707eac3846c926c2f9580b353b93114500899503ecdc5a0a01df6129ec614af6565b8285856001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a1505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231612ac4614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b2457600080fd5b505afa158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b810190808051906020019092919050505011612bd2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231612c1e614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c7e57600080fd5b505afa158015612c92573d6000803e3d6000fd5b505050506040513d6020811015612ca857600080fd5b8101908080519060200190929190505050811015612dc4576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59612d08614af6565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015612d7057600080fd5b505afa158015612d84573d6000803e3d6000fd5b505050506040513d6020811015612d9a57600080fd5b81019080805190602001909291905050509050612db68161267a565b508080600101915050612bd8565b50565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600a600084815260200190815260200160002090506000600754905060085443118015612e7d5750600060095414155b15612eff576000612e9960085443614bce90919063ffffffff16565b90506000612eb7612ea8612515565b83614afe90919063ffffffff16565b9050612efa612eeb600954612edd670de0b6b3a764000085614afe90919063ffffffff16565b614b8490919063ffffffff16565b84614c1890919063ffffffff16565b925050505b612f468260030154612f38670de0b6b3a7640000612f2a858760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b92505050919050565b60095481565b6001151560016000612f65614af6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6001151561302f83610831565b1515146130a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b6130ac613bc2565b6000600a600084815260200190815260200160002090506000816001015411156133e357600061311b826003015461310d670de0b6b3a76400006130ff6007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b905060008111156133e157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156131d757600080fd5b505afa1580156131eb573d6000803e3d6000fd5b505050506040513d602081101561320157600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561327c57600080fd5b505af1158015613290573d6000803e3d6000fd5b505050506040513d60208110156132a657600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561334c57600080fd5b505afa158015613360573d6000803e3d6000fd5b505050506040513d602081101561337657600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61340c82600a600086815260200190815260200160002060010154614c1890919063ffffffff16565b600a600085815260200190815260200160002060010181905550613459670de0b6b3a764000061344b6007548460010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b8160030181905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600115156001600061349b614af6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613682578051825260208201915060208101905060208303925061365f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136e4576040519150601f19603f3d011682016040523d82523d6000602084013e6136e9565b606091505b50915091506001151582151514613768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb6137b3614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561381357600080fd5b505afa158015613827573d6000803e3d6000fd5b505050506040513d602081101561383d57600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb6138e9614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561394957600080fd5b505afa15801561395d573d6000803e3d6000fd5b505050506040513d602081101561397357600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60085481565b60065481565b60008060008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613a6557600080fd5b505afa158015613a79573d6000803e3d6000fd5b505050506040513d6020811015613a8f57600080fd5b8101908080519060200190929190505050811015613bb8576000613b93600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015613b5357600080fd5b505afa158015613b67573d6000803e3d6000fd5b505050506040513d6020811015613b7d57600080fd5b810190808051906020019092919050505061085e565b9050613ba88184614c1890919063ffffffff16565b92505080806001019150506139c6565b5080915050919050565b6008544311613bd057613df3565b60006009541415613be75743600881905550613df3565b6000613bfe60085443614bce90919063ffffffff16565b90506000613c1c613c0d612515565b83614afe90919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d1d57600080fd5b505af1158015613d31573d6000803e3d6000fd5b505050506040513d6020811015613d4757600080fd5b810190808051906020019092919050505050613d9c613d8b600954613d7d670de0b6b3a764000085614afe90919063ffffffff16565b614b8490919063ffffffff16565b600754614c1890919063ffffffff16565b600781905550436008819055507f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c294382824260405180848152602001838152602001828152602001935050505060405180910390a150505b565b60008111613e6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e206e6f74207374616b652030204e46590000000000000000000000000081525060200191505060405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231613eb2614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613f1257600080fd5b505afa158015613f26573d6000803e3d6000fd5b505050506040513d6020811015613f3c57600080fd5b81019080805190602001909291905050501015613fc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f446f206e6f74206861766520656e6f756768204e465920746f207374616b650081525060200191505060405180910390fd5b613fc9613bc2565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614011614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d602081101561409b57600080fd5b810190808051906020019092919050505014156140c3576140c26140bd614af6565b614ca0565b5b6000600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb61410f614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561416f57600080fd5b505afa158015614183573d6000803e3d6000fd5b505050506040513d602081101561419957600080fd5b81019080805190602001909291905050508152602001908152602001600020905060008160010154111561446e5760006142128260030154614204670de0b6b3a76400006141f66007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b9050600081111561446c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb614263614af6565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156142cd57600080fd5b505af11580156142e1573d6000803e3d6000fd5b505050506040513d60208110156142f757600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf614332614af6565b82600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614379614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156143d957600080fd5b505afa1580156143ed573d6000803e3d6000fd5b505050506040513d602081101561440357600080fd5b810190808051906020019092919050505042604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6144b4614af6565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561455257600080fd5b505af1158015614566573d6000803e3d6000fd5b505050506040513d602081101561457c57600080fd5b8101908080519060200190929190505050506145a5828260010154614c1890919063ffffffff16565b81600101819055506145c282600954614c1890919063ffffffff16565b6009819055506145fb670de0b6b3a76400006145ed6007548460010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b81600301819055507fa00b8f7d82e0096e45945f9300a4d40ff0d5d951e0611805a257d8c30a93e6fc61462c614af6565b83600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614673614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156146d357600080fd5b505afa1580156146e7573d6000803e3d6000fd5b505050506040513d60208110156146fd57600080fd5b8101908080519060200190929190505050846001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166147b5614af6565b73ffffffffffffffffffffffffffffffffffffffff161461483e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f30e048e48a73aeea72c325c17c7dec1889a58fef3848c2d5fbb81502c4702f31816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149a8614af6565b73ffffffffffffffffffffffffffffffffffffffff1614614a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe6599c7f1b3687d38d7eb4fc4e63d64fd89455e0abaf9cc757d5476a5a54a0068142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600033905090565b600080831415614b115760009050614b7e565b6000828402905082848281614b2257fe5b0414614b79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152806021913960400191505060405180910390fd5b809150505b92915050565b6000614bc683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506150f9565b905092915050565b6000614c1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506151bf565b905092915050565b600080828401905083811015614c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310614dca5780518252602082019150602081019050602083039250614da7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614e2c576040519150601f19603f3d011682016040523d82523d6000602084013e614e31565b606091505b50915091506001151582151514614eb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614efb614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614f5b57600080fd5b505afa158015614f6f573d6000803e3d6000fd5b505050506040513d6020811015614f8557600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb615031614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561509157600080fd5b505afa1580156150a5573d6000803e3d6000fd5b505050506040513d60208110156150bb57600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b600080831182906151a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561516a57808201518184015260208101905061514f565b50505050905090810190601f1680156151975780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816151b157fe5b049050809150509392505050565b600083831115829061526c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615231578082015181840152602081019050615216565b50505050905090810190601f16801561525e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205cffe0d52288a3ffd4de41cb86425b01f52c1896a0f25a819d7be6b912db006364736f6c634300060a00330000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc000000000000000000000000fd75a1d3398ca4ae176eb1faa58b295a0d1f1498000000000000000000000000fd75a1d3398ca4ae176eb1faa58b295a0d1f14980000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101d95760003560e01c80636ae21510116101045780639ca152f1116100a2578063e3161ddd11610071578063e3161ddd14610771578063ef50d9631461077b578063f2fde38b146107a9578063fd5e0fe2146107ed576101d9565b80639ca152f114610699578063a9f8d181146106dd578063c964ad45146106fb578063d3d3819314610719576101d9565b80637dcb2abf116100de5780637dcb2abf146105b7578063817b1cd2146105f95780638306fddb146106175780638da5cb5b1461064f576101d9565b80636ae21510146104dc5780636bdb744e146104e65780636c9128e21461056d576101d9565b80632d90a6761161017c57806349df8d331161014b57806349df8d33146103fc5780634cf088d91461041a578063656c579f1461046457806366666aa914610492576101d9565b80632d90a6761461034257806331455f2a1461037057806333a1cb27146103a857806335322f37146103f2576101d9565b80630aa43533116101b85780630aa43533146102945780630b83a727146102c25780631190615d146102cc5780632bcf161c146102ea576101d9565b80628e5c2a146101de57806302d24d94146102245780630962ef7914610266575b600080fd5b61020a600480360360208110156101f457600080fd5b8101908080359060200190929190505050610831565b604051808215151515815260200191505060405180910390f35b6102506004803603602081101561023a57600080fd5b810190808035906020019092919050505061085e565b6040518082815260200191505060405180910390f35b6102926004803603602081101561027c57600080fd5b810190808035906020019092919050505061087e565b005b6102c0600480360360208110156102aa57600080fd5b8101908080359060200190929190505050610d00565b005b6102ca610dd3565b005b6102d461111e565b6040518082815260200191505060405180910390f35b61032c6004803603602081101561030057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611124565b6040518082815260200191505060405180910390f35b61036e6004803603602081101561035857600080fd5b8101908080359060200190929190505050611329565b005b6103a66004803603604081101561038657600080fd5b810190808035906020019092919080359060200190929190505050611c21565b005b6103b06121b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103fa6121d6565b005b610404612515565b6040518082815260200191505060405180910390f35b610422612654565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104906004803603602081101561047a57600080fd5b810190808035906020019092919050505061267a565b005b61049a612a56565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e4612a7c565b005b610512600480360360208110156104fc57600080fd5b8101908080359060200190929190505050612dc7565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b610575612e24565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e3600480360360208110156105cd57600080fd5b8101908080359060200190929190505050612e4a565b6040518082815260200191505060405180910390f35b610601612f4f565b6040518082815260200191505060405180910390f35b61064d6004803603604081101561062d57600080fd5b810190808035906020019092919080359060200190929190505050612f55565b005b610657613466565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106db600480360360208110156106af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348b565b005b6106e56139b1565b6040518082815260200191505060405180910390f35b6107036139b7565b6040518082815260200191505060405180910390f35b61075b6004803603602081101561072f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139bd565b6040518082815260200191505060405180910390f35b610779613bc2565b005b6107a76004803603602081101561079157600080fd5b8101908080359060200190929190505050613df5565b005b6107eb600480360360208110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614775565b005b61082f6004803603602081101561080357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614968565b005b6000600a600083815260200190815260200160002060020160009054906101000a900460ff169050919050565b6000600a6000838152602001908152602001600020600101549050919050565b610886614af6565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561090f57600080fd5b505afa158015610923573d6000803e3d6000fd5b505050506040513d602081101561093957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146109d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600a600083815260200190815260200160002060020160009054906101000a900460ff16151514610a70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b610a78613bc2565b6000600a600083815260200190815260200160002090506000610ada8260030154610acc670de0b6b3a7640000610abe6007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b905060008111610b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f207265776172647320746f20636c61696d2100000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610b98614af6565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c0257600080fd5b505af1158015610c16573d6000803e3d6000fd5b505050506040513d6020811015610c2c57600080fd5b810190808051906020019092919050505050610c71670de0b6b3a7640000610c636007548560010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b82600301819055507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf610ca2614af6565b828542604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d40614af6565b73ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060068190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610e1b614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e7b57600080fd5b505afa158015610e8f573d6000803e3d6000fd5b505050506040513d6020811015610ea557600080fd5b810190808051906020019092919050505011610f29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610f75614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fd557600080fd5b505afa158015610fe9573d6000803e3d6000fd5b505050506040513d6020811015610fff57600080fd5b810190808051906020019092919050505081101561111b576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5961105f614af6565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156110c757600080fd5b505afa1580156110db573d6000803e3d6000fd5b505050506040513d60208110156110f157600080fd5b8101908080519060200190929190505050905061110d8161087e565b508080600101915050610f2f565b50565b60075481565b60008060008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111cc57600080fd5b505afa1580156111e0573d6000803e3d6000fd5b505050506040513d60208110156111f657600080fd5b810190808051906020019092919050505081101561131f5760006112fa600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156112ba57600080fd5b505afa1580156112ce573d6000803e3d6000fd5b505050506040513d60208110156112e457600080fd5b8101908080519060200190929190505050612e4a565b905061130f8184614c1890919063ffffffff16565b925050808060010191505061112d565b5080915050919050565b611331614af6565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156113ba57600080fd5b505afa1580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600a600083815260200190815260200160002060020160009054906101000a900460ff1615151461151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b611523613bc2565b6000600a6000838152602001908152602001600020905060006115858260030154611577670de0b6b3a76400006115696007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b905060006115928461085e565b905060006115bd605f6115af606485614b8490919063ffffffff16565b614afe90919063ffffffff16565b905060006115fa846115ec605f6115de606488614b8490919063ffffffff16565b614afe90919063ffffffff16565b614c1890919063ffffffff16565b905060006116256005611617606487614b8490919063ffffffff16565b614afe90919063ffffffff16565b90506000866001015490506000876001018190555060008760020160006101000a81548160ff02191690831515021790555061166c81600954614bce90919063ffffffff16565b600981905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386de6c656116b8614af6565b8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561172257600080fd5b505af1158015611736573d6000803e3d6000fd5b5050505060006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a604051602401808281526020019150506040516020818303038152906040527f42966c68000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106118385780518252602082019150602081019050602083039250611815565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461189a576040519150601f19603f3d011682016040523d82523d6000602084013e61189f565b606091505b5091509150600115158215151461191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611964614af6565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156119ce57600080fd5b505af11580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611ad557600080fd5b505af1158015611ae9573d6000803e3d6000fd5b505050506040513d6020811015611aff57600080fd5b8101908080519060200190929190505050507ffada57d3c4b7d2ba1d17dd51770436f3164806d8cf30ca643ad4c050f07019ea611b3a614af6565b878c42604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a17f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf611bbc614af6565b898c42604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a150505050505050505050565b6001151560016000611c31614af6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515611cfb83610831565b151514611d70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b80611d7a8361085e565b1015611dee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f7420656e6f756768207374616b6520696e204e465400000000000000000081525060200191505060405180910390fd5b611df6613bc2565b6000600a6000848152602001908152602001600020905060008160010154111561212d576000611e658260030154611e57670de0b6b3a7640000611e496007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b9050600081111561212b57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611fc657600080fd5b505af1158015611fda573d6000803e3d6000fd5b505050506040513d6020811015611ff057600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561209657600080fd5b505afa1580156120aa573d6000803e3d6000fd5b505050506040513d60208110156120c057600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61215682600a600086815260200190815260200160002060010154614bce90919063ffffffff16565b600a6000858152602001908152602001600020600101819055506121a3670de0b6b3a76400006121956007548460010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b8160030181905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161221e614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b81019080805190602001909291905050501161232c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231612375614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123d557600080fd5b505afa1580156123e9573d6000803e3d6000fd5b505050506040513d60208110156123ff57600080fd5b81019080805190602001909291905050501115612513576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5961245e614af6565b60006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156124c757600080fd5b505afa1580156124db573d6000803e3d6000fd5b505050506040513d60208110156124f157600080fd5b8101908080519060200190929190505050905061250d81611329565b5061232d565b565b600061264f600654612641612710612633611964600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125ea57600080fd5b505afa1580156125fe573d6000803e3d6000fd5b505050506040513d602081101561261457600080fd5b8101908080519060200190929190505050614b8490919063ffffffff16565b614b8490919063ffffffff16565b614afe90919063ffffffff16565b905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612682614af6565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561270b57600080fd5b505afa15801561271f573d6000803e3d6000fd5b505050506040513d602081101561273557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146127cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600a600083815260200190815260200160002060020160009054906101000a900460ff1615151461286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b612874613bc2565b6000600a6000838152602001908152602001600020905060006128d682600301546128c8670de0b6b3a76400006128ba6007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b90506000811161294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f207265776172647320746f20636f6d706f756e642100000000000000000081525060200191505060405180910390fd5b612965818360010154614c1890919063ffffffff16565b826001018190555061298281600954614c1890919063ffffffff16565b6009819055506129bb670de0b6b3a76400006129ad6007548560010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b82600301819055507fd4084615ea35707eac3846c926c2f9580b353b93114500899503ecdc5a0a01df6129ec614af6565b8285856001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a1505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231612ac4614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b2457600080fd5b505afa158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b810190808051906020019092919050505011612bd2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231612c1e614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c7e57600080fd5b505afa158015612c92573d6000803e3d6000fd5b505050506040513d6020811015612ca857600080fd5b8101908080519060200190929190505050811015612dc4576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59612d08614af6565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015612d7057600080fd5b505afa158015612d84573d6000803e3d6000fd5b505050506040513d6020811015612d9a57600080fd5b81019080805190602001909291905050509050612db68161267a565b508080600101915050612bd8565b50565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600a600084815260200190815260200160002090506000600754905060085443118015612e7d5750600060095414155b15612eff576000612e9960085443614bce90919063ffffffff16565b90506000612eb7612ea8612515565b83614afe90919063ffffffff16565b9050612efa612eeb600954612edd670de0b6b3a764000085614afe90919063ffffffff16565b614b8490919063ffffffff16565b84614c1890919063ffffffff16565b925050505b612f468260030154612f38670de0b6b3a7640000612f2a858760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b92505050919050565b60095481565b6001151560016000612f65614af6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6001151561302f83610831565b1515146130a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b6130ac613bc2565b6000600a600084815260200190815260200160002090506000816001015411156133e357600061311b826003015461310d670de0b6b3a76400006130ff6007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b905060008111156133e157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156131d757600080fd5b505afa1580156131eb573d6000803e3d6000fd5b505050506040513d602081101561320157600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561327c57600080fd5b505af1158015613290573d6000803e3d6000fd5b505050506040513d60208110156132a657600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561334c57600080fd5b505afa158015613360573d6000803e3d6000fd5b505050506040513d602081101561337657600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61340c82600a600086815260200190815260200160002060010154614c1890919063ffffffff16565b600a600085815260200190815260200160002060010181905550613459670de0b6b3a764000061344b6007548460010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b8160030181905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600115156001600061349b614af6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613682578051825260208201915060208101905060208303925061365f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136e4576040519150601f19603f3d011682016040523d82523d6000602084013e6136e9565b606091505b50915091506001151582151514613768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb6137b3614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561381357600080fd5b505afa158015613827573d6000803e3d6000fd5b505050506040513d602081101561383d57600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb6138e9614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561394957600080fd5b505afa15801561395d573d6000803e3d6000fd5b505050506040513d602081101561397357600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60085481565b60065481565b60008060008090505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613a6557600080fd5b505afa158015613a79573d6000803e3d6000fd5b505050506040513d6020811015613a8f57600080fd5b8101908080519060200190929190505050811015613bb8576000613b93600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015613b5357600080fd5b505afa158015613b67573d6000803e3d6000fd5b505050506040513d6020811015613b7d57600080fd5b810190808051906020019092919050505061085e565b9050613ba88184614c1890919063ffffffff16565b92505080806001019150506139c6565b5080915050919050565b6008544311613bd057613df3565b60006009541415613be75743600881905550613df3565b6000613bfe60085443614bce90919063ffffffff16565b90506000613c1c613c0d612515565b83614afe90919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d1d57600080fd5b505af1158015613d31573d6000803e3d6000fd5b505050506040513d6020811015613d4757600080fd5b810190808051906020019092919050505050613d9c613d8b600954613d7d670de0b6b3a764000085614afe90919063ffffffff16565b614b8490919063ffffffff16565b600754614c1890919063ffffffff16565b600781905550436008819055507f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c294382824260405180848152602001838152602001828152602001935050505060405180910390a150505b565b60008111613e6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e206e6f74207374616b652030204e46590000000000000000000000000081525060200191505060405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231613eb2614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613f1257600080fd5b505afa158015613f26573d6000803e3d6000fd5b505050506040513d6020811015613f3c57600080fd5b81019080805190602001909291905050501015613fc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f446f206e6f74206861766520656e6f756768204e465920746f207374616b650081525060200191505060405180910390fd5b613fc9613bc2565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614011614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d602081101561409b57600080fd5b810190808051906020019092919050505014156140c3576140c26140bd614af6565b614ca0565b5b6000600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb61410f614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561416f57600080fd5b505afa158015614183573d6000803e3d6000fd5b505050506040513d602081101561419957600080fd5b81019080805190602001909291905050508152602001908152602001600020905060008160010154111561446e5760006142128260030154614204670de0b6b3a76400006141f66007548760010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b614bce90919063ffffffff16565b9050600081111561446c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb614263614af6565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156142cd57600080fd5b505af11580156142e1573d6000803e3d6000fd5b505050506040513d60208110156142f757600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf614332614af6565b82600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614379614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156143d957600080fd5b505afa1580156143ed573d6000803e3d6000fd5b505050506040513d602081101561440357600080fd5b810190808051906020019092919050505042604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6144b4614af6565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561455257600080fd5b505af1158015614566573d6000803e3d6000fd5b505050506040513d602081101561457c57600080fd5b8101908080519060200190929190505050506145a5828260010154614c1890919063ffffffff16565b81600101819055506145c282600954614c1890919063ffffffff16565b6009819055506145fb670de0b6b3a76400006145ed6007548460010154614afe90919063ffffffff16565b614b8490919063ffffffff16565b81600301819055507fa00b8f7d82e0096e45945f9300a4d40ff0d5d951e0611805a257d8c30a93e6fc61462c614af6565b83600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614673614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156146d357600080fd5b505afa1580156146e7573d6000803e3d6000fd5b505050506040513d60208110156146fd57600080fd5b8101908080519060200190929190505050846001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166147b5614af6565b73ffffffffffffffffffffffffffffffffffffffff161461483e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f30e048e48a73aeea72c325c17c7dec1889a58fef3848c2d5fbb81502c4702f31816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149a8614af6565b73ffffffffffffffffffffffffffffffffffffffff1614614a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe6599c7f1b3687d38d7eb4fc4e63d64fd89455e0abaf9cc757d5476a5a54a0068142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600033905090565b600080831415614b115760009050614b7e565b6000828402905082848281614b2257fe5b0414614b79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152806021913960400191505060405180910390fd5b809150505b92915050565b6000614bc683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506150f9565b905092915050565b6000614c1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506151bf565b905092915050565b600080828401905083811015614c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310614dca5780518252602082019150602081019050602083039250614da7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614e2c576040519150601f19603f3d011682016040523d82523d6000602084013e614e31565b606091505b50915091506001151582151514614eb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614efb614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614f5b57600080fd5b505afa158015614f6f573d6000803e3d6000fd5b505050506040513d6020811015614f8557600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb615031614af6565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561509157600080fd5b505afa1580156150a5573d6000803e3d6000fd5b505050506040513d60208110156150bb57600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b600080831182906151a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561516a57808201518184015260208101905061514f565b50505050905090810190601f1680156151975780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816151b157fe5b049050809150509392505050565b600083831115829061526c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615231578082015181840152602081019050615216565b50505050905090810190601f16801561525e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205cffe0d52288a3ffd4de41cb86425b01f52c1896a0f25a819d7be6b912db006364736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc000000000000000000000000fd75a1d3398ca4ae176eb1faa58b295a0d1f1498000000000000000000000000fd75a1d3398ca4ae176eb1faa58b295a0d1f14980000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : _NFYToken (address): 0x1cBb83EbcD552D5EBf8131eF8c9CD9d9BAB342bC
Arg [1] : _StakingNFT (address): 0xfd75a1D3398cA4ae176eB1fAa58b295A0D1f1498
Arg [2] : _staking (address): 0xfd75a1D3398cA4ae176eB1fAa58b295A0D1f1498
Arg [3] : _rewardPool (address): 0x2f822dA8016d5e8ce3c93b53eE1528392Ca3ac57
Arg [4] : _dailyReward (uint256): 10
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc
Arg [1] : 000000000000000000000000fd75a1d3398ca4ae176eb1faa58b295a0d1f1498
Arg [2] : 000000000000000000000000fd75a1d3398ca4ae176eb1faa58b295a0d1f1498
Arg [3] : 0000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
20563:13324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23126:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22904:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27666:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22713:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29331:331;;;:::i;:::-;;21637:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23979:386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30194:1412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32967:915;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21504:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31685:310;;;:::i;:::-;;22467:152;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21575:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28447:806;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21543:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29743:337;;;:::i;:::-;;21745:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21475:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23339:579;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21710:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32065:832;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19079:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27177:426;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21673:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21604:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24421:387;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24855:666;;;:::i;:::-;;25571:1188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19621:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19835:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23126:153;23197:19;23236:10;:20;23247:8;23236:20;;;;;;;;;;;:35;;;;;;;;;;;;23229:42;;23126:153;;;:::o;22904:144::-;22965:21;23006:10;:20;23017:8;23006:20;;;;;;;;;;;:34;;;22999:41;;22904:144;;;:::o;27666:711::-;27764:12;:10;:12::i;:::-;27732:44;;:10;;;;;;;;;;;:18;;;27751:8;27732:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;27724:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27865:4;27826:43;;:10;:20;27837:8;27826:20;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;27818:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27919:12;:10;:12::i;:::-;27944:15;27962:10;:20;27973:8;27962:20;;;;;;;;;;;27944:38;;27995:23;28021:68;28073:3;:15;;;28021:47;28063:4;28021:37;28043:14;;28021:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;27995:94;;28126:1;28108:15;:19;28100:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28165:8;;;;;;;;;;;:17;;;28183:12;:10;:12::i;:::-;28197:15;28165:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28244:47;28286:4;28244:37;28266:14;;28244:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;28226:3;:15;;:65;;;;28309:60;28324:12;:10;:12::i;:::-;28338:15;28355:8;28365:3;28309:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27666:711;;;:::o;22713:108::-;19330:5;;;;;;;;;;;19314:21;;:12;:10;:12::i;:::-;:21;;;19306:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22801:12:::1;22787:11;:26;;;;22713:108:::0;:::o;29331:331::-;29421:1;29384:10;;;;;;;;;;;:20;;;29405:12;:10;:12::i;:::-;29384:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;29376:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29459:9;29471:1;29459:13;;29455:200;29478:10;;;;;;;;;;;:20;;;29499:12;:10;:12::i;:::-;29478:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29474:1;:38;29455:200;;;29534:19;29556:10;;;;;;;;;;;:30;;;29587:12;:10;:12::i;:::-;29601:1;29556:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29534:69;;29618:25;29631:11;29618:12;:25::i;:::-;29455:200;29514:3;;;;;;;29455:200;;;;29331:331::o;21637:29::-;;;;:::o;23979:386::-;24042:7;24062:20;24099:9;24111:1;24099:13;;24095:231;24118:10;;;;;;;;;;;:20;;;24139:8;24118:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24114:1;:34;24095:231;;;24170:21;24194:59;24209:10;;;;;;;;;;;:30;;;24240:8;24250:1;24209:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24194:14;:59::i;:::-;24170:83;;24283:31;24300:13;24283:12;:16;;:31;;;;:::i;:::-;24268:46;;24095:231;24150:3;;;;;;;24095:231;;;;24345:12;24338:19;;;23979:386;;;:::o;30194:1412::-;30341:12;:10;:12::i;:::-;30309:44;;:10;;;;;;;;;;;:18;;;30328:8;30309:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;30301:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30442:4;30403:43;;:10;:20;30414:8;30403:20;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;30395:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30496:12;:10;:12::i;:::-;30521:15;30539:10;:20;30550:8;30539:20;;;;;;;;;;;30521:38;;30572:23;30598:68;30650:3;:15;;;30598:47;30640:4;30598:37;30620:14;;30598:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;30572:94;;30679:20;30702:23;30716:8;30702:13;:23::i;:::-;30679:46;;30736:22;30761:29;30787:2;30761:21;30778:3;30761:12;:16;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;30736:54;;30801:20;30824:50;30858:15;30824:29;30850:2;30824:21;30841:3;30824:12;:16;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;:33;;:50;;;;:::i;:::-;30801:73;;30887:11;30901:28;30927:1;30901:21;30918:3;30901:12;:16;;:21;;;;:::i;:::-;:25;;:28;;;;:::i;:::-;30887:42;;30942:22;30967:3;:17;;;30942:42;;31015:1;30995:3;:17;;:21;;;;31048:5;31027:3;:18;;;:26;;;;;;;;;;;;;;;;;;31078:31;31094:14;31078:11;;:15;;:31;;;;:::i;:::-;31064:11;:45;;;;31120:10;;;;;;;;;;;:27;;;31148:12;:10;:12::i;:::-;31162:8;31120:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31185:12;31199:17;31220:7;;;;;;;;;;;:12;;31274:8;31233:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31220:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31184:100;;;;31314:4;31303:15;;:7;:15;;;31295:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31352:8;;;;;;;;;;;:17;;;31370:12;:10;:12::i;:::-;31384;31352:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31408:8;;;;;;;;;;;:17;;;31426:10;;;;;;;;;;;31438:3;31408:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31460:62;31478:12;:10;:12::i;:::-;31492:14;31508:8;31518:3;31460:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31538:60;31553:12;:10;:12::i;:::-;31567:15;31584:8;31594:3;31538:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30194:1412;;;;;;;;;;:::o;32967:915::-;19454:4;19421:37;;:15;:29;19437:12;:10;:12::i;:::-;19421:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19413:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33110:4:::1;33073:41;;:33;33097:8;33073:23;:33::i;:::-;:41;;;33065:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33189:7;33162:23;33176:8;33162:13;:23::i;:::-;:34;;33154:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33237:12;:10;:12::i;:::-;33262:15;33280:10;:20;33291:8;33280:20;;;;;;;;;;;33262:38;;33336:1;33316:3;:17;;;:21;33313:386;;;33354:23;33380:68;33432:3;:15;;;33380:47;33422:4;33380:37;33402:14;;33380:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;33354:94;;33486:1;33468:15;:19;33465:223;;;33508:8;;;;;;;;;;;:17;;;33526:10;;;;;;;;;;;:18;;;33545:8;33526:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;33556:15;33508:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;33596:76;33611:10;;;;;;;;;;;:18;;;33630:8;33611:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;33641:15;33658:8;33668:3;33596:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33465:223;33313:386;;33749:47;33788:7;33749:10;:20;33760:8;33749:20;;;;;;;;;;;:34;;;:38;;:47;;;;:::i;:::-;33711:10;:20;33722:8;33711:20;;;;;;;;;;;:34;;:85;;;;33827:47;33869:4;33827:37;33849:14;;33827:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;33809:3;:15;;:65;;;;19487:1;32967:915:::0;;:::o;21504:32::-;;;;;;;;;;;;;:::o;31685:310::-;31770:1;31733:10;;;;;;;;;;;:20;;;31754:12;:10;:12::i;:::-;31733:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;31725:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31806:180;31849:1;31812:10;;;;;;;;;;;:20;;;31833:12;:10;:12::i;:::-;31812:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;31806:180;;;31867:19;31889:10;;;;;;;;;;;:30;;;31920:12;:10;:12::i;:::-;31934:1;31889:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31867:69;;31951:23;31962:11;31951:10;:23::i;:::-;31806:180;;;;31685:310::o;22467:152::-;22516:7;22543:68;22599:11;;22543:51;22588:5;22543:40;22578:4;22543:8;;;;;;;;;;;:18;;;22562:10;;;;;;;;;;;22543:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;:40;;;;:::i;:::-;:44;;:51;;;;:::i;:::-;:55;;:68;;;;:::i;:::-;22536:75;;22467:152;:::o;21575:22::-;;;;;;;;;;;;;:::o;28447:806::-;28548:12;:10;:12::i;:::-;28516:44;;:10;;;;;;;;;;;:18;;;28535:8;28516:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;28508:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28649:4;28610:43;;:10;:20;28621:8;28610:20;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;28602:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28703:12;:10;:12::i;:::-;28728:15;28746:10;:20;28757:8;28746:20;;;;;;;;;;;28728:38;;28779:23;28805:68;28857:3;:15;;;28805:47;28847:4;28805:37;28827:14;;28805:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;28779:94;;28910:1;28892:15;:19;28884:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28972:38;28994:15;28972:3;:17;;;:21;;:38;;;;:::i;:::-;28952:3;:17;;:58;;;;29035:32;29051:15;29035:11;;:15;;:32;;;;:::i;:::-;29021:11;:46;;;;29098:47;29140:4;29098:37;29120:14;;29098:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;29080:3;:15;;:65;;;;29163:82;29181:12;:10;:12::i;:::-;29195:15;29212:8;29222:3;:17;;;29241:3;29163:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28447:806;;;:::o;21543:25::-;;;;;;;;;;;;;:::o;29743:337::-;29836:1;29799:10;;;;;;;;;;;:20;;;29820:12;:10;:12::i;:::-;29799:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;29791:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29874:9;29886:1;29874:13;;29870:203;29893:10;;;;;;;;;;;:20;;;29914:12;:10;:12::i;:::-;29893:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29889:1;:38;29870:203;;;29949:19;29971:10;;;;;;;;;;;:30;;;30002:12;:10;:12::i;:::-;30016:1;29971:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:69;;30033:28;30049:11;30033:15;:28::i;:::-;29870:203;29929:3;;;;;;;29870:203;;;;29743:337::o;21745:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21475:22::-;;;;;;;;;;;;;:::o;23339:579::-;23397:7;23417:15;23435:10;:16;23446:4;23435:16;;;;;;;;;;;23417:34;;23464:23;23490:14;;23464:40;;23536:15;;23521:12;:30;:50;;;;;23570:1;23555:11;;:16;;23521:50;23517:305;;;23588:22;23613:33;23630:15;;23613:12;:16;;:33;;;;:::i;:::-;23588:58;;23661:17;23681:39;23700:19;:17;:19::i;:::-;23681:14;:18;;:39;;;;:::i;:::-;23661:59;;23753:57;23773:36;23797:11;;23773:19;23787:4;23773:9;:13;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;23753:15;:19;;:57;;;;:::i;:::-;23735:75;;23517:305;;;23841:69;23894:3;:15;;;23841:48;23884:4;23841:38;23863:15;23841:3;:17;;;:21;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;:52;;:69;;;;:::i;:::-;23834:76;;;;23339:579;;;:::o;21710:26::-;;;;:::o;32065:832::-;19454:4;19421:37;;:15;:29;19437:12;:10;:12::i;:::-;19421:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19413:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32208:4:::1;32171:41;;:33;32195:8;32171:23;:33::i;:::-;:41;;;32163:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32252:12;:10;:12::i;:::-;32277:15;32295:10;:20;32306:8;32295:20;;;;;;;;;;;32277:38;;32351:1;32331:3;:17;;;:21;32328:386;;;32369:23;32395:68;32447:3;:15;;;32395:47;32437:4;32395:37;32417:14;;32395:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;32369:94;;32501:1;32483:15;:19;32480:223;;;32523:8;;;;;;;;;;;:17;;;32541:10;;;;;;;;;;;:18;;;32560:8;32541:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;32571:15;32523:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;32611:76;32626:10;;;;;;;;;;;:18;;;32645:8;32626:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;32656:15;32673:8;32683:3;32611:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32480:223;32328:386;;32764:47;32803:7;32764:10;:20;32775:8;32764:20;;;;;;;;;;;:34;;;:38;;:47;;;;:::i;:::-;32726:10;:20;32737:8;32726:20;;;;;;;;;;;:34;;:85;;;;32842:47;32884:4;32842:37;32864:14;;32842:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;32824:3;:15;;:65;;;;19487:1;32065:832:::0;;:::o;19079:28::-;;;;;;;;;;;;;:::o;27177:426::-;19454:4;19421:37;;:15;:29;19437:12;:10;:12::i;:::-;19421:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19413:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27267:12:::1;27281:17;27302:7;;;;;;;;;;;:12;;27356;27315:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27302:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27266:104;;;;27400:4;27389:15;;:7;:15;;;27381:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27503:12;27436:10;:47;27447:10;;;;;;;;;;;:21;;;27469:12;:10;:12::i;:::-;27447:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27436:47;;;;;;;;;;;:64;;;:79;;;;;;;;;;;;;;;;;;27591:4;27526:10;:47;27537:10;;;;;;;;;;;:21;;;27559:12;:10;:12::i;:::-;27537:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27526:47;;;;;;;;;;;:62;;;:69;;;;;;;;;;;;;;;;;;19487:1;;27177:426:::0;:::o;21673:30::-;;;;:::o;21604:26::-;;;;:::o;24421:387::-;24484:7;24504:20;24541:9;24553:1;24541:13;;24537:232;24560:10;;;;;;;;;;;:20;;;24581:8;24560:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24556:1;:34;24537:232;;;24612:22;24637:58;24651:10;;;;;;;;;;;:30;;;24682:8;24692:1;24651:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24637:13;:58::i;:::-;24612:83;;24725:32;24742:14;24725:12;:16;;:32;;;;:::i;:::-;24710:47;;24537:232;24592:3;;;;;;;24537:232;;;;24788:12;24781:19;;;24421:387;;;:::o;24855:666::-;24915:15;;24899:12;:31;24895:70;;24947:7;;24895:70;24996:1;24981:11;;:16;24977:100;;;25032:12;25014:15;:30;;;;25059:7;;24977:100;25089:22;25114:33;25131:15;;25114:12;:16;;:33;;;;:::i;:::-;25089:58;;25160:17;25180:39;25199:19;:17;:19::i;:::-;25180:14;:18;;:39;;;;:::i;:::-;25160:59;;25266:8;;;;;;;;;;;:21;;;25288:10;;;;;;;;;;;25308:4;25315:9;25266:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25355:56;25374:36;25398:11;;25374:19;25388:4;25374:9;:13;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;25355:14;;:18;;:56;;;;:::i;:::-;25338:14;:73;;;;25440:12;25422:15;:30;;;;25470:43;25482:14;25498:9;25509:3;25470:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24855:666;;;:::o;25571:1188::-;25642:1;25632:7;:11;25624:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25722:7;25686:8;;;;;;;;;;;:18;;;25705:12;:10;:12::i;:::-;25686:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;25678:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25778:12;:10;:12::i;:::-;25845:1;25806:10;;;;;;;;;;;:21;;;25828:12;:10;:12::i;:::-;25806:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;25803:100;;;25863:28;25878:12;:10;:12::i;:::-;25863:14;:28::i;:::-;25803:100;25915:15;25933:10;:47;25944:10;;;;;;;;;;;:21;;;25966:12;:10;:12::i;:::-;25944:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25933:47;;;;;;;;;;;25915:65;;26016:1;25996:3;:17;;;:21;25993:381;;;26034:23;26060:68;26112:3;:15;;;26060:47;26102:4;26060:37;26082:14;;26060:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;26034:94;;26166:1;26148:15;:19;26145:218;;;26188:8;;;;;;;;;;;:17;;;26206:12;:10;:12::i;:::-;26220:15;26188:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26260:87;26275:12;:10;:12::i;:::-;26289:15;26306:10;;;;;;;;;;;:21;;;26328:12;:10;:12::i;:::-;26306:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26343:3;26260:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26145:218;25993:381;;26386:8;;;;;;;;;;;:21;;;26408:12;:10;:12::i;:::-;26430:4;26437:7;26386:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26476:30;26498:7;26476:3;:17;;;:21;;:30;;;;:::i;:::-;26456:3;:17;;:50;;;;26531:24;26547:7;26531:11;;:15;;:24;;;;:::i;:::-;26517:11;:38;;;;26586:47;26628:4;26586:37;26608:14;;26586:3;:17;;;:21;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;26568:3;:15;;:65;;;;26651:98;26666:12;:10;:12::i;:::-;26680:7;26689:10;;;;;;;;;;;:21;;;26711:12;:10;:12::i;:::-;26689:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26726:3;:17;;;26745:3;26651:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25571:1188;;:::o;19621:206::-;19330:5;;;;;;;;;;;19314:21;;:12;:10;:12::i;:::-;:21;;;19306:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19702:21:::1;19726:5:::0;::::1;;;;;;;;;;19702:29;;19750:6;19742:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;19772:47;19793:13;19808:5;::::0;::::1;;;;;;;;;19815:3;19772:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19361:1;19621:206:::0;:::o;19835:193::-;19330:5;;;;;;;;;;;19314:21;;:12;:10;:12::i;:::-;:21;;;19306:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19955:4:::1;19919:15:::0;:33:::1;19935:16;19919:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;19977:43;19998:16;20016:3;19977:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;19835:193:::0;:::o;18624:106::-;18677:15;18712:10;18705:17;;18624:106;:::o;5114:471::-;5172:7;5422:1;5417;:6;5413:47;;;5447:1;5440:8;;;;5413:47;5472:9;5488:1;5484;:5;5472:17;;5517:1;5512;5508;:5;;;;;;:10;5500:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5576:1;5569:8;;;5114:471;;;;;:::o;6061:132::-;6119:7;6146:39;6150:1;6153;6146:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6139:46;;6061:132;;;;:::o;4224:136::-;4282:7;4309:43;4313:1;4316;4309:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4302:50;;4224:136;;;;:::o;3760:181::-;3818:7;3838:9;3854:1;3850;:5;3838:17;;3879:1;3874;:6;;3866:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3932:1;3925:8;;;3760:181;;;;:::o;26767:402::-;26833:12;26847:17;26868:7;;;;;;;;;;;:12;;26922;26881:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26868:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26832:104;;;;26966:4;26955:15;;:7;:15;;;26947:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27069:12;27002:10;:47;27013:10;;;;;;;;;;;:21;;;27035:12;:10;:12::i;:::-;27013:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27002:47;;;;;;;;;;;:64;;;:79;;;;;;;;;;;;;;;;;;27157:4;27092:10;:47;27103:10;;;;;;;;;;;:21;;;27125:12;:10;:12::i;:::-;27103:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27092:47;;;;;;;;;;;:62;;;:69;;;;;;;;;;;;;;;;;;26767:402;;;:::o;6689:278::-;6775:7;6807:1;6803;:5;6810:12;6795:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6834:9;6850:1;6846;:5;;;;;;6834:17;;6958:1;6951:8;;;6689:278;;;;;:::o;4663:192::-;4749:7;4782:1;4777;:6;;4785:12;4769:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4809:9;4825:1;4821;:5;4809:17;;4846:1;4839:8;;;4663:192;;;;;:::o
Swarm Source
ipfs://5cffe0d52288a3ffd4de41cb86425b01f52c1896a0f25a819d7be6b912db0063
Loading...
Loading
Loading...
Loading
OVERVIEW
This is staking contract for NFY.Finance.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.496902 | 575.0344 | $285.74 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.