More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 164 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Harvest | 12625995 | 1271 days ago | IN | 0 ETH | 0.00235044 | ||||
Update User | 12625985 | 1271 days ago | IN | 0 ETH | 0.00253961 | ||||
Harvest | 12578913 | 1278 days ago | IN | 0 ETH | 0.00261954 | ||||
Update User | 12578828 | 1278 days ago | IN | 0 ETH | 0.00282762 | ||||
Harvest | 11941986 | 1377 days ago | IN | 0 ETH | 0.02169536 | ||||
Update User | 11941977 | 1377 days ago | IN | 0 ETH | 0.02095838 | ||||
Harvest | 11940634 | 1377 days ago | IN | 0 ETH | 0.0334805 | ||||
Harvest | 11940631 | 1377 days ago | IN | 0 ETH | 0.02751537 | ||||
Update User | 11940630 | 1377 days ago | IN | 0 ETH | 0.03131511 | ||||
Harvest | 11900438 | 1383 days ago | IN | 0 ETH | 0.02744574 | ||||
Harvest | 11650607 | 1421 days ago | IN | 0 ETH | 0.00964238 | ||||
Update User | 11650601 | 1421 days ago | IN | 0 ETH | 0.0099629 | ||||
Harvest | 11537324 | 1439 days ago | IN | 0 ETH | 0.02262752 | ||||
Harvest | 11526694 | 1440 days ago | IN | 0 ETH | 0.00937454 | ||||
Update User | 11526686 | 1440 days ago | IN | 0 ETH | 0.0092094 | ||||
Harvest | 11499197 | 1445 days ago | IN | 0 ETH | 0.0082995 | ||||
Harvest | 11490506 | 1446 days ago | IN | 0 ETH | 0.00642825 | ||||
Update User | 11490283 | 1446 days ago | IN | 0 ETH | 0.00798114 | ||||
Harvest | 11487584 | 1446 days ago | IN | 0 ETH | 0.00749632 | ||||
Withdraw | 11487030 | 1446 days ago | IN | 0 ETH | 0.02408176 | ||||
Withdraw | 11485760 | 1447 days ago | IN | 0 ETH | 0.01454326 | ||||
Harvest | 11485744 | 1447 days ago | IN | 0 ETH | 0.01070904 | ||||
Update User | 11485742 | 1447 days ago | IN | 0 ETH | 0.00976342 | ||||
Harvest | 11485615 | 1447 days ago | IN | 0 ETH | 0.0088885 | ||||
Update User | 11485606 | 1447 days ago | IN | 0 ETH | 0.00892656 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HopeBooster
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-09 */ pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; /* * @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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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); } /** * @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"); } } } pragma solidity ^0.6.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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); } } } } /** * @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; } } /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } contract DepositorRole is Context { using Roles for Roles.Role; event DepositorAdded(address indexed account); event DepositorRemoved(address indexed account); Roles.Role private _depositors; constructor () internal { _addDepositor(_msgSender()); } modifier onlyDepositor() { require(isDepositor(_msgSender()), "DepositorRole: caller does not have the Depositor role"); _; } function isDepositor(address account) public view returns (bool) { return _depositors.has(account); } function addDepositor(address account) public onlyDepositor { _addDepositor(account); } function renounceDepositor() public { _removeDepositor(_msgSender()); } function _addDepositor(address account) internal { _depositors.add(account); emit DepositorAdded(account); } function _removeDepositor(address account) internal { _depositors.remove(account); emit DepositorRemoved(account); } } interface HopeNonTradable { function totalSupply() external view returns (uint256); function totalClaimed() external view returns (uint256); function addClaimed(uint256 _amount) external; function setClaimed(uint256 _amount) external; function transfer(address receiver, uint numTokens) external returns (bool); function transferFrom(address owner, address buyer, uint numTokens) external returns (bool); function balanceOf(address owner) external view returns (uint256); function mint(address _to, uint256 _amount) external; function burn(address _account, uint256 value) external; } interface GiverOfHope { struct UserInfo { uint256 amount; uint256 rewardDebt; } struct PoolInfo { IERC20 token; // Address of token contract. uint256 hopesPerDay; // The amount of hopes per day generated for each token staked uint256 maxStake; // The maximum amount of tokens which can be staked in this pool uint256 lastUpdateTime; // Last timestamp that HOPEs distribution occurs. uint256 accHopePerShare; // Accumulated HOPEs per share, times 1e12. See below. } function userInfo(uint256 _pId, address _address) external view returns (UserInfo memory); function poolInfo(uint256 _pId) external view returns (PoolInfo memory); function poolLength() external view returns (uint256); } contract HopeBooster is Ownable, DepositorRole { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 ropeAmount; // How many rope this user has here uint256 hopeAmount; // How many hope this user has here uint256 lastUpdate; // Timestamp of last update } // Info of each user that stakes LP tokens. mapping(address => UserInfo) public userInfo; // The ratio of token to burn (0%) uint16 public burnFee = 0; // The ratio of token to send to the treasury (10%) uint16 public treasuryFee = 100; uint16 public ratioMax = 1000; uint16 private ratioMaxHalf = 500; // Nb of ropes at which hopeIntermediateBonusMultiplier will be reached (Linear interpolation from 0 to there) uint256 public nbRopeIntermediateMultiplier = 30e18; // Nb of ropes at which hopeMaxBonusMultiplier will be reached (Linear interpolation from intermediate multiplier to there) uint256 public nbRopeMaxMultiplier = 100e18; // Bonus hope (5e4 = +50% bonus / 1e5 = +100% bonus) | Multiplier needs to be divided by 1e5 uint256 public hopeIntermediateBonusMultiplier = 5e4; uint256 public hopeMaxBonusMultiplier = 1e5; HopeNonTradable public hope; IERC20 public rope; GiverOfHope public giverOfHope; address public treasuryAddr; uint256 private _totalRopesEarned; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event Harvest(address indexed user, uint256 amount); constructor(IERC20 _ropeAddress, HopeNonTradable _hopeAddress, GiverOfHope _giverOfHopeAddress, address _treasuryAddr) public { rope = _ropeAddress; hope = _hopeAddress; giverOfHope = _giverOfHopeAddress; treasuryAddr = _treasuryAddr; } ////////////// // Setters /// ////////////// // Set the amount of ropes needed to reach the intermediate bonus multiplier function setNbRopeIntermediateMultiplier(uint256 _value) external onlyOwner { require(_value >= 0, "Value must be positive"); nbRopeIntermediateMultiplier = _value; } // Set the amount of ropes needed to reach the max bonus multiplier function setNbRopeMaxMultiplier(uint256 _value) external onlyOwner { require(_value >= 0, "Value must be positive"); nbRopeMaxMultiplier = _value; } // Set the intermediate bonus multiplier (ratio * 1e5) function setHopeIntermediateBonusMultiplier(uint256 _value) external onlyOwner { require(_value >= 0, "Value must be positive"); hopeIntermediateBonusMultiplier = _value; } // Set the max bonus multiplier (ratio * 1e5) function setHopeMaxBonusMultiplier(uint256 _value) external onlyOwner { require(_value >= 0, "Value must be positive"); hopeMaxBonusMultiplier = _value; } // Set new burnFee value (Percentage will be burnFee / ratioMax) function setBurnFee(uint16 _value) external onlyOwner { require(_value >= 0 && _value <= ratioMaxHalf && treasuryFee + _value <= ratioMaxHalf, "burnFee + treasuryFee > ratioMaxHalf"); burnFee = _value; } // Set new treasuryFee value (Percentage will be burnFee / ratioMax) function setTreasuryFee(uint16 _value) external onlyOwner { require(_value >= 0 && _value <= ratioMaxHalf && burnFee + _value <= ratioMaxHalf, "burnFee + treasuryFee > ratioMaxHalf"); treasuryFee = _value; } // Update treasury address by the previous treasury. function treasury(address _treasuryAddr) public { require(msg.sender == treasuryAddr, "Must be called from current treasury address"); treasuryAddr = _treasuryAddr; } ////////////// ////////////// ////////////// // Returns the total ropes earned // This is just purely used to display the total ropes earned by users on the frontend function totalRopesEarned() public view returns (uint256) { return _totalRopesEarned; } // Add ropes earned function _addRopesEarned(uint256 _amount) internal { _totalRopesEarned = _totalRopesEarned.add(_amount); } // Set ropes claimed to a custom value, for if we wanna reset the counter on new season release function setRopesEarned(uint256 _amount) public onlyOwner { require(_amount >= 0, "Cant be negative"); _totalRopesEarned = _amount; } /// function getMultiplier(uint256 ropeAmount) public view returns (uint256) { if (ropeAmount == 0) { return 0; } if (ropeAmount > nbRopeMaxMultiplier) { return hopeMaxBonusMultiplier; } else if (ropeAmount > nbRopeIntermediateMultiplier) { uint256 remappedMax = nbRopeMaxMultiplier.sub(nbRopeIntermediateMultiplier); uint256 remappedAmount = ropeAmount.sub(nbRopeIntermediateMultiplier); return hopeIntermediateBonusMultiplier.add(remappedAmount.mul(hopeMaxBonusMultiplier.sub(hopeIntermediateBonusMultiplier)).div(remappedMax)); } else { return ropeAmount.mul(hopeIntermediateBonusMultiplier).div(nbRopeIntermediateMultiplier); } } function getMultiplierOfAddress(address _addr) public view returns (uint256) { UserInfo storage user = userInfo[_addr]; return getMultiplier(user.ropeAmount); } // View function to see pending HOPEs on frontend. function pendingHope(address _user) public view returns (uint256) { UserInfo storage user = userInfo[_user]; uint256 hopePerDay = hopePerDayOfAddress(_user); uint256 multiplier = getMultiplier(user.ropeAmount); uint256 blockTime = block.timestamp; return blockTime.sub(user.lastUpdate).mul(hopePerDay.div(86400)).mul(multiplier).div(1e5); } function updateUser(address _user) public { UserInfo storage user = userInfo[_user]; uint256 blockTime = block.timestamp; uint256 hopePerDay = hopePerDayOfAddress(_user); if (user.ropeAmount == 0 || hopePerDay == 0 || blockTime <= user.lastUpdate) { user.lastUpdate = blockTime; return; } uint256 hopeReward = pendingHope(_user); hope.mint(treasuryAddr, hopeReward.div(40)); // 2.5% HOPE for the treasury (Usable to purchase NFTs) hope.mint(address(this), hopeReward); user.hopeAmount = user.hopeAmount.add(hopeReward); user.lastUpdate = blockTime; } function hopePerDayOfAddress(address _addr) public view returns (uint256) { uint256 totalHopePerDay = 0; uint256 length = giverOfHope.poolLength(); for (uint256 pid = 0; pid < length; ++pid) { uint256 hopesPerDay = giverOfHope.poolInfo(pid).hopesPerDay; uint256 amount = giverOfHope.userInfo(pid, _addr).amount; totalHopePerDay = totalHopePerDay.add(amount.mul(hopesPerDay)); } return totalHopePerDay; } function deposit(address _addr, uint256 _amount, bool ignoreFee) external onlyDepositor { require(_amount > 0, "Amount deposited must be > 0"); updateUser(_addr); uint256 _burnFee = 0; uint256 _treasuryFee = 0; if (!ignoreFee) { _burnFee = _amount.mul(burnFee).div(ratioMax); _treasuryFee = _amount.mul(treasuryFee).div(ratioMax); } uint256 userAmount = _amount.sub(_burnFee).sub(_treasuryFee); UserInfo storage user = userInfo[_addr]; user.ropeAmount = user.ropeAmount.add(userAmount); _addRopesEarned(userAmount); if (_burnFee > 0) { rope.transferFrom(msg.sender, address(0x0), _burnFee); } if (_treasuryFee > 0) { rope.transferFrom(msg.sender, treasuryAddr, _treasuryFee); } rope.transferFrom(msg.sender, address(this), userAmount); emit Deposit(_addr, userAmount); } function withdraw() external { UserInfo storage user = userInfo[msg.sender]; require(user.ropeAmount > 0, "Address balance is empty"); updateUser(msg.sender); uint256 _ropeAmount = user.ropeAmount; uint256 _hopeAmount = user.hopeAmount; user.ropeAmount = 0; user.hopeAmount = 0; rope.transfer(msg.sender, _ropeAmount); hope.transfer(msg.sender, _hopeAmount); emit Withdraw(msg.sender, _ropeAmount); emit Harvest(msg.sender, _hopeAmount); } function harvest() external { UserInfo storage user = userInfo[msg.sender]; require(user.hopeAmount > 0, "Address balance is empty"); updateUser(msg.sender); uint256 _amount = user.hopeAmount; user.hopeAmount = 0; hope.transfer(msg.sender, _amount); emit Harvest(msg.sender, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw() public { UserInfo storage user = userInfo[msg.sender]; require(user.ropeAmount > 0, "Balance is empty"); uint256 amount = user.ropeAmount; user.ropeAmount = 0; user.hopeAmount = 0; rope.transfer(msg.sender, amount); emit Withdraw(msg.sender, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_ropeAddress","type":"address"},{"internalType":"contract HopeNonTradable","name":"_hopeAddress","type":"address"},{"internalType":"contract GiverOfHope","name":"_giverOfHopeAddress","type":"address"},{"internalType":"address","name":"_treasuryAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"DepositorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"DepositorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"ignoreFee","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ropeAmount","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getMultiplierOfAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giverOfHope","outputs":[{"internalType":"contract GiverOfHope","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hope","outputs":[{"internalType":"contract HopeNonTradable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hopeIntermediateBonusMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hopeMaxBonusMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"hopePerDayOfAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nbRopeIntermediateMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nbRopeMaxMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingHope","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratioMax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rope","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_value","type":"uint16"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setHopeIntermediateBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setHopeMaxBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setNbRopeIntermediateMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setNbRopeMaxMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setRopesEarned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_value","type":"uint16"}],"name":"setTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalRopesEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddr","type":"address"}],"name":"treasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"updateUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"ropeAmount","type":"uint256"},{"internalType":"uint256","name":"hopeAmount","type":"uint256"},{"internalType":"uint256","name":"lastUpdate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600360006101000a81548161ffff021916908361ffff1602179055506064600360026101000a81548161ffff021916908361ffff1602179055506103e8600360046101000a81548161ffff021916908361ffff1602179055506101f4600360066101000a81548161ffff021916908361ffff1602179055506801a055690d9db8000060045568056bc75e2d6310000060055561c350600655620186a0600755348015620000b257600080fd5b5060405162003cd638038062003cd68339818101604052810190620000d89190620004f9565b6000620000ea620002b660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001a86200019c620002b660201b60201c565b620002be60201b60201c565b83600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050506200073c565b600033905090565b620002d98160016200031f60201b620020e81790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f5eea62661ac9a33be3f9320ecd60878cd5e92025ffec0f2e9969d2448b497eda60405160405180910390a250565b620003318282620003d260201b60201c565b1562000374576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036b906200060f565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043d9062000631565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081519050620004ae81620006d4565b92915050565b600081519050620004c581620006ee565b92915050565b600081519050620004dc8162000708565b92915050565b600081519050620004f38162000722565b92915050565b600080600080608085870312156200051057600080fd5b60006200052087828801620004e2565b94505060206200053387828801620004cb565b93505060406200054687828801620004b4565b925050606062000559878288016200049d565b91505092959194509250565b600062000574601f8362000653565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000620005b660228362000653565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600060208201905081810360008301526200062a8162000565565b9050919050565b600060208201905081810360008301526200064c81620005a7565b9050919050565b600082825260208201905092915050565b60006200067182620006b4565b9050919050565b6000620006858262000664565b9050919050565b6000620006998262000664565b9050919050565b6000620006ad8262000664565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620006df8162000664565b8114620006eb57600080fd5b50565b620006f98162000678565b81146200070557600080fd5b50565b62000713816200068c565b81146200071f57600080fd5b50565b6200072d81620006a0565b81146200073957600080fd5b50565b61358a806200074c6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063a652db4911610130578063d1e0c30e116100b8578063ed3b506a1161007c578063ed3b506a146105d2578063f2fde38b146105ee578063fb6a1bee1461060a578063fc8acba21461063a578063fce589d81461065657610227565b8063d1e0c30e14610554578063d49acec814610572578063db2e21bc14610590578063dcebfc981461059a578063ed03b336146105b657610227565b8063b0408a6e116100ff578063b0408a6e146104ae578063b5e37041146104cc578063bbfb5dd6146104ea578063c50030cd1461051a578063cc32d1761461053657610227565b8063a652db4914610426578063a913870b14610442578063ad54857614610460578063adf8252d1461047e57610227565b80634914dd0b116101b357806366ffd6091161018257806366ffd609146103a6578063715018a6146103b05780638da5cb5b146103ba5780638f32d59b146103d857806396087777146103f657610227565b80634914dd0b1461033457806349de5f87146103525780634e7744011461036e578063516799901461038a57610227565b80632f70d1ba116101fa5780632f70d1ba146102b657806330d9a62a146102e65780633ccfd60b146103045780633edd11281461030e5780634641257d1461032a57610227565b8063192e5ee11461022c5780631959a0021461024a5780631ee702b31461027c5780632d809cb61461029a575b600080fd5b610234610674565b60405161024191906132cf565b60405180910390f35b610264600480360381019061025f9190612882565b61067a565b60405161027393929190613313565b60405180910390f35b6102846106a4565b60405161029191906132cf565b60405180910390f35b6102b460048036038101906102af9190612882565b6106aa565b005b6102d060048036038101906102cb9190612882565b61077e565b6040516102dd9190613046565b60405180910390f35b6102ee61079b565b6040516102fb9190612f6b565b60405180910390f35b61030c6107c1565b005b610328600480360381019061032391906128ab565b610a7b565b005b610332610ef5565b005b61033c61109d565b6040516103499190613097565b60405180910390f35b61036c60048036038101906103679190612975565b6110c3565b005b6103886004803603810190610383919061299e565b6111cc565b005b6103a4600480360381019061039f919061299e565b611261565b005b6103ae6112f6565b005b6103b8611308565b005b6103c261140d565b6040516103cf9190612f6b565b60405180910390f35b6103e0611436565b6040516103ed9190613046565b60405180910390f35b610410600480360381019061040b9190612882565b611494565b60405161041d91906132cf565b60405180910390f35b610440600480360381019061043b9190612975565b61156b565b005b61044a611674565b60405161045791906132cf565b60405180910390f35b61046861167a565b60405161047591906132cf565b60405180910390f35b6104986004803603810190610493919061299e565b611680565b6040516104a591906132cf565b60405180910390f35b6104b661176e565b6040516104c391906132b4565b60405180910390f35b6104d4611782565b6040516104e1919061307c565b60405180910390f35b61050460048036038101906104ff9190612882565b6117a8565b60405161051191906132cf565b60405180910390f35b610534600480360381019061052f919061299e565b611801565b005b61053e611896565b60405161054b91906132b4565b60405180910390f35b61055c6118aa565b60405161056991906132cf565b60405180910390f35b61057a6118b4565b6040516105879190613061565b60405180910390f35b6105986118da565b005b6105b460048036038101906105af919061299e565b611a83565b005b6105d060048036038101906105cb9190612882565b611b18565b005b6105ec60048036038101906105e7919061299e565b611d35565b005b61060860048036038101906106039190612882565b611dca565b005b610624600480360381019061061f9190612882565b611e1d565b60405161063191906132cf565b60405180910390f35b610654600480360381019061064f9190612882565b612079565b005b61065e6120d4565b60405161066b91906132b4565b60405180910390f35b60065481565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b60045481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190613234565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061079482600161219090919063ffffffff16565b9050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541161084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084290613254565b60405180910390fd5b61085433611b18565b6000816000015490506000826001015490506000836000018190555060008360010181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016108d7929190612ff4565b602060405180830381600087803b1580156108f157600080fd5b505af1158015610905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092991906128fa565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610987929190612ff4565b602060405180830381600087803b1580156109a157600080fd5b505af11580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906128fa565b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a2091906132cf565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba82604051610a6e91906132cf565b60405180910390a2505050565b610a8b610a86612258565b61077e565b610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190613174565b60405180910390fd5b60008211610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b04906130d4565b60405180910390fd5b610b1683611b18565b60008082610bbd57610b6b600360049054906101000a900461ffff1661ffff16610b5d600360009054906101000a900461ffff1661ffff168761226090919063ffffffff16565b6122d090919063ffffffff16565b9150610bba600360049054906101000a900461ffff1661ffff16610bac600360029054906101000a900461ffff1661ffff168761226090919063ffffffff16565b6122d090919063ffffffff16565b90505b6000610be482610bd6858861231a90919063ffffffff16565b61231a90919063ffffffff16565b90506000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610c4082826000015461236490919063ffffffff16565b8160000181905550610c51826123b9565b6000841115610d0e57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd336000876040518463ffffffff1660e01b8152600401610cba93929190612f86565b602060405180830381600087803b158015610cd457600080fd5b505af1158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c91906128fa565b505b6000831115610dec57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401610d9893929190612fbd565b602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dea91906128fa565b505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610e4b93929190612fbd565b602060405180830381600087803b158015610e6557600080fd5b505af1158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d91906128fa565b508673ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c83604051610ee491906132cf565b60405180910390a250505050505050565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816001015411610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690613254565b60405180910390fd5b610f8833611b18565b60008160010154905060008260010181905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ff8929190612ff4565b602060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104a91906128fa565b503373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba8260405161109191906132cf565b60405180910390a25050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110cb611436565b61110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906131f4565b60405180910390fd5b60008161ffff16101580156111375750600360069054906101000a900461ffff1661ffff168161ffff1611155b801561116d5750600360069054906101000a900461ffff1661ffff1681600360029054906101000a900461ffff160161ffff1611155b6111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906130f4565b60405180910390fd5b80600360006101000a81548161ffff021916908361ffff16021790555050565b6111d4611436565b611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906131f4565b60405180910390fd5b6000811015611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90613274565b60405180910390fd5b80600c8190555050565b611269611436565b6112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f906131f4565b60405180910390fd5b60008110156112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613194565b60405180910390fd5b8060058190555050565b611306611301612258565b6123d7565b565b611310611436565b61134f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611346906131f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611478612258565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006114e384611e1d565b905060006114f48360000154611680565b90506000429050611560620186a06115528461154461151f62015180896122d090919063ffffffff16565b6115368a600201548861231a90919063ffffffff16565b61226090919063ffffffff16565b61226090919063ffffffff16565b6122d090919063ffffffff16565b945050505050919050565b611573611436565b6115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a9906131f4565b60405180910390fd5b60008161ffff16101580156115df5750600360069054906101000a900461ffff1661ffff168161ffff1611155b80156116155750600360069054906101000a900461ffff1661ffff1681600360009054906101000a900461ffff160161ffff1611155b611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b906130f4565b60405180910390fd5b80600360026101000a81548161ffff021916908361ffff16021790555050565b60075481565b60055481565b6000808214156116935760009050611769565b6005548211156116a7576007549050611769565b60045482111561173d5760006116ca60045460055461231a90919063ffffffff16565b905060006116e36004548561231a90919063ffffffff16565b90506117346117238361171561170660065460075461231a90919063ffffffff16565b8561226090919063ffffffff16565b6122d090919063ffffffff16565b60065461236490919063ffffffff16565b92505050611769565b6117666004546117586006548561226090919063ffffffff16565b6122d090919063ffffffff16565b90505b919050565b600360049054906101000a900461ffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506117f98160000154611680565b915050919050565b611809611436565b611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906131f4565b60405180910390fd5b600081101561188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613194565b60405180910390fd5b8060048190555050565b600360029054906101000a900461ffff1681565b6000600c54905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613294565b60405180910390fd5b6000816000015490506000826000018190555060008260010181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016119de929190612ff4565b602060405180830381600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3091906128fa565b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051611a7791906132cf565b60405180910390a25050565b611a8b611436565b611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac1906131f4565b60405180910390fd5b6000811015611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0590613194565b60405180910390fd5b8060078190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060004290506000611b6b84611e1d565b9050600083600001541480611b805750600081145b80611b8f575082600201548211155b15611ba557818360020181905550505050611d32565b6000611bb085611494565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c276028856122d090919063ffffffff16565b6040518363ffffffff1660e01b8152600401611c4492919061301d565b600060405180830381600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401611cd392919061301d565b600060405180830381600087803b158015611ced57600080fd5b505af1158015611d01573d6000803e3d6000fd5b50505050611d1c81856001015461236490919063ffffffff16565b8460010181905550828460020181905550505050505b50565b611d3d611436565b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d73906131f4565b60405180910390fd5b6000811015611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db790613194565b60405180910390fd5b8060068190555050565b611dd2611436565b611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e08906131f4565b60405180910390fd5b611e1a81612431565b50565b600080600090506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8e57600080fd5b505afa158015611ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec691906129c7565b905060005b8181101561206e576000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631526fe27836040518263ffffffff1660e01b8152600401611f3091906132cf565b60a06040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f809190612923565b6020015190506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b84896040518363ffffffff1660e01b8152600401611fe59291906132ea565b604080518083038186803b158015611ffc57600080fd5b505afa158015612010573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612034919061294c565b60000151905061205f612050838361226090919063ffffffff16565b8661236490919063ffffffff16565b94505050806001019050611ecb565b508192505050919050565b612089612084612258565b61077e565b6120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613174565b60405180910390fd5b6120d18161255e565b50565b600360009054906101000a900461ffff1681565b6120f28282612190565b15612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613114565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f890613214565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b60008083141561227357600090506122ca565b600082840290508284828161228457fe5b04146122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc906131d4565b60405180910390fd5b809150505b92915050565b600061231283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125b8565b905092915050565b600061235c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612619565b905092915050565b6000808284019050838110156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690613154565b60405180910390fd5b8091505092915050565b6123ce81600c5461236490919063ffffffff16565b600c8190555050565b6123eb81600161267490919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc12c224e0d437ba41f0b1d746dea5cb82c6d3808b990d3780eacbd3adcad0eb60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890613134565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125728160016120e890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f5eea62661ac9a33be3f9320ecd60878cd5e92025ffec0f2e9969d2448b497eda60405160405180910390a250565b600080831182906125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f691906130b2565b60405180910390fd5b50600083858161260b57fe5b049050809150509392505050565b6000838311158290612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265891906130b2565b60405180910390fd5b5060008385039050809150509392505050565b61267e8282612190565b6126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b4906131b4565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008135905061272a816134e1565b92915050565b60008135905061273f816134f8565b92915050565b600081519050612754816134f8565b92915050565b6000815190506127698161350f565b92915050565b600060a0828403121561278157600080fd5b61278b60a061334a565b9050600061279b8482850161275a565b60008301525060206127af8482850161286d565b60208301525060406127c38482850161286d565b60408301525060606127d78482850161286d565b60608301525060806127eb8482850161286d565b60808301525092915050565b60006040828403121561280957600080fd5b612813604061334a565b905060006128238482850161286d565b60008301525060206128378482850161286d565b60208301525092915050565b60008135905061285281613526565b92915050565b6000813590506128678161353d565b92915050565b60008151905061287c8161353d565b92915050565b60006020828403121561289457600080fd5b60006128a28482850161271b565b91505092915050565b6000806000606084860312156128c057600080fd5b60006128ce8682870161271b565b93505060206128df86828701612858565b92505060406128f086828701612730565b9150509250925092565b60006020828403121561290c57600080fd5b600061291a84828501612745565b91505092915050565b600060a0828403121561293557600080fd5b60006129438482850161276f565b91505092915050565b60006040828403121561295e57600080fd5b600061296c848285016127f7565b91505092915050565b60006020828403121561298757600080fd5b600061299584828501612843565b91505092915050565b6000602082840312156129b057600080fd5b60006129be84828501612858565b91505092915050565b6000602082840312156129d957600080fd5b60006129e78482850161286d565b91505092915050565b6129f9816133fb565b82525050565b612a0881613393565b82525050565b612a17816133a5565b82525050565b612a268161340d565b82525050565b612a3581613431565b82525050565b612a4481613455565b82525050565b6000612a5582613377565b612a5f8185613382565b9350612a6f81856020860161349d565b612a78816134d0565b840191505092915050565b6000612a90601c83613382565b91507f416d6f756e74206465706f7369746564206d757374206265203e2030000000006000830152602082019050919050565b6000612ad0602483613382565b91507f6275726e466565202b207472656173757279466565203e20726174696f4d617860008301527f48616c66000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b36601f83613382565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000612b76602683613382565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bdc601b83613382565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612c1c603683613382565b91507f4465706f7369746f72526f6c653a2063616c6c657220646f6573206e6f74206860008301527f61766520746865204465706f7369746f7220726f6c65000000000000000000006020830152604082019050919050565b6000612c82601683613382565b91507f56616c7565206d75737420626520706f736974697665000000000000000000006000830152602082019050919050565b6000612cc2602183613382565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d28602183613382565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8e602083613382565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612dce602283613382565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e34602c83613382565b91507f4d7573742062652063616c6c65642066726f6d2063757272656e74207472656160008301527f73757279206164647265737300000000000000000000000000000000000000006020830152604082019050919050565b6000612e9a601883613382565b91507f416464726573732062616c616e636520697320656d70747900000000000000006000830152602082019050919050565b6000612eda601083613382565b91507f43616e74206265206e65676174697665000000000000000000000000000000006000830152602082019050919050565b6000612f1a601083613382565b91507f42616c616e636520697320656d707479000000000000000000000000000000006000830152602082019050919050565b612f56816133c3565b82525050565b612f65816133f1565b82525050565b6000602082019050612f8060008301846129ff565b92915050565b6000606082019050612f9b60008301866129f0565b612fa860208301856129f0565b612fb56040830184612f5c565b949350505050565b6000606082019050612fd260008301866129f0565b612fdf60208301856129ff565b612fec6040830184612f5c565b949350505050565b600060408201905061300960008301856129f0565b6130166020830184612f5c565b9392505050565b600060408201905061303260008301856129ff565b61303f6020830184612f5c565b9392505050565b600060208201905061305b6000830184612a0e565b92915050565b60006020820190506130766000830184612a1d565b92915050565b60006020820190506130916000830184612a2c565b92915050565b60006020820190506130ac6000830184612a3b565b92915050565b600060208201905081810360008301526130cc8184612a4a565b905092915050565b600060208201905081810360008301526130ed81612a83565b9050919050565b6000602082019050818103600083015261310d81612ac3565b9050919050565b6000602082019050818103600083015261312d81612b29565b9050919050565b6000602082019050818103600083015261314d81612b69565b9050919050565b6000602082019050818103600083015261316d81612bcf565b9050919050565b6000602082019050818103600083015261318d81612c0f565b9050919050565b600060208201905081810360008301526131ad81612c75565b9050919050565b600060208201905081810360008301526131cd81612cb5565b9050919050565b600060208201905081810360008301526131ed81612d1b565b9050919050565b6000602082019050818103600083015261320d81612d81565b9050919050565b6000602082019050818103600083015261322d81612dc1565b9050919050565b6000602082019050818103600083015261324d81612e27565b9050919050565b6000602082019050818103600083015261326d81612e8d565b9050919050565b6000602082019050818103600083015261328d81612ecd565b9050919050565b600060208201905081810360008301526132ad81612f0d565b9050919050565b60006020820190506132c96000830184612f4d565b92915050565b60006020820190506132e46000830184612f5c565b92915050565b60006040820190506132ff6000830185612f5c565b61330c60208301846129ff565b9392505050565b60006060820190506133286000830186612f5c565b6133356020830185612f5c565b6133426040830184612f5c565b949350505050565b6000604051905081810181811067ffffffffffffffff8211171561336d57600080fd5b8060405250919050565b600081519050919050565b600082825260208201905092915050565b600061339e826133d1565b9050919050565b60008115159050919050565b60006133bc82613393565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061340682613479565b9050919050565b60006134188261341f565b9050919050565b600061342a826133d1565b9050919050565b600061343c82613443565b9050919050565b600061344e826133d1565b9050919050565b600061346082613467565b9050919050565b6000613472826133d1565b9050919050565b60006134848261348b565b9050919050565b6000613496826133d1565b9050919050565b60005b838110156134bb5780820151818401526020810190506134a0565b838111156134ca576000848401525b50505050565b6000601f19601f8301169050919050565b6134ea81613393565b81146134f557600080fd5b50565b613501816133a5565b811461350c57600080fd5b50565b613518816133b1565b811461352357600080fd5b50565b61352f816133c3565b811461353a57600080fd5b50565b613546816133f1565b811461355157600080fd5b5056fea26469706673582212203ee2ceeb879217ac9fa0b6e3497b40437f296e938721735635d19ed38a2cb3f264736f6c634300060c00330000000000000000000000009d47894f8becb68b9cf3428d256311affe8b068b0000000000000000000000001eadc903341cfdb3406a04506239f52d076b170b00000000000000000000000088faac1678c864d080d592bc15d1cdadf01d71290000000000000000000000007fcb8aaea5f30620aa69d1978f1dc814cf0502ad
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063a652db4911610130578063d1e0c30e116100b8578063ed3b506a1161007c578063ed3b506a146105d2578063f2fde38b146105ee578063fb6a1bee1461060a578063fc8acba21461063a578063fce589d81461065657610227565b8063d1e0c30e14610554578063d49acec814610572578063db2e21bc14610590578063dcebfc981461059a578063ed03b336146105b657610227565b8063b0408a6e116100ff578063b0408a6e146104ae578063b5e37041146104cc578063bbfb5dd6146104ea578063c50030cd1461051a578063cc32d1761461053657610227565b8063a652db4914610426578063a913870b14610442578063ad54857614610460578063adf8252d1461047e57610227565b80634914dd0b116101b357806366ffd6091161018257806366ffd609146103a6578063715018a6146103b05780638da5cb5b146103ba5780638f32d59b146103d857806396087777146103f657610227565b80634914dd0b1461033457806349de5f87146103525780634e7744011461036e578063516799901461038a57610227565b80632f70d1ba116101fa5780632f70d1ba146102b657806330d9a62a146102e65780633ccfd60b146103045780633edd11281461030e5780634641257d1461032a57610227565b8063192e5ee11461022c5780631959a0021461024a5780631ee702b31461027c5780632d809cb61461029a575b600080fd5b610234610674565b60405161024191906132cf565b60405180910390f35b610264600480360381019061025f9190612882565b61067a565b60405161027393929190613313565b60405180910390f35b6102846106a4565b60405161029191906132cf565b60405180910390f35b6102b460048036038101906102af9190612882565b6106aa565b005b6102d060048036038101906102cb9190612882565b61077e565b6040516102dd9190613046565b60405180910390f35b6102ee61079b565b6040516102fb9190612f6b565b60405180910390f35b61030c6107c1565b005b610328600480360381019061032391906128ab565b610a7b565b005b610332610ef5565b005b61033c61109d565b6040516103499190613097565b60405180910390f35b61036c60048036038101906103679190612975565b6110c3565b005b6103886004803603810190610383919061299e565b6111cc565b005b6103a4600480360381019061039f919061299e565b611261565b005b6103ae6112f6565b005b6103b8611308565b005b6103c261140d565b6040516103cf9190612f6b565b60405180910390f35b6103e0611436565b6040516103ed9190613046565b60405180910390f35b610410600480360381019061040b9190612882565b611494565b60405161041d91906132cf565b60405180910390f35b610440600480360381019061043b9190612975565b61156b565b005b61044a611674565b60405161045791906132cf565b60405180910390f35b61046861167a565b60405161047591906132cf565b60405180910390f35b6104986004803603810190610493919061299e565b611680565b6040516104a591906132cf565b60405180910390f35b6104b661176e565b6040516104c391906132b4565b60405180910390f35b6104d4611782565b6040516104e1919061307c565b60405180910390f35b61050460048036038101906104ff9190612882565b6117a8565b60405161051191906132cf565b60405180910390f35b610534600480360381019061052f919061299e565b611801565b005b61053e611896565b60405161054b91906132b4565b60405180910390f35b61055c6118aa565b60405161056991906132cf565b60405180910390f35b61057a6118b4565b6040516105879190613061565b60405180910390f35b6105986118da565b005b6105b460048036038101906105af919061299e565b611a83565b005b6105d060048036038101906105cb9190612882565b611b18565b005b6105ec60048036038101906105e7919061299e565b611d35565b005b61060860048036038101906106039190612882565b611dca565b005b610624600480360381019061061f9190612882565b611e1d565b60405161063191906132cf565b60405180910390f35b610654600480360381019061064f9190612882565b612079565b005b61065e6120d4565b60405161066b91906132b4565b60405180910390f35b60065481565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b60045481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190613234565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061079482600161219090919063ffffffff16565b9050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541161084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084290613254565b60405180910390fd5b61085433611b18565b6000816000015490506000826001015490506000836000018190555060008360010181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016108d7929190612ff4565b602060405180830381600087803b1580156108f157600080fd5b505af1158015610905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092991906128fa565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610987929190612ff4565b602060405180830381600087803b1580156109a157600080fd5b505af11580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906128fa565b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a2091906132cf565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba82604051610a6e91906132cf565b60405180910390a2505050565b610a8b610a86612258565b61077e565b610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190613174565b60405180910390fd5b60008211610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b04906130d4565b60405180910390fd5b610b1683611b18565b60008082610bbd57610b6b600360049054906101000a900461ffff1661ffff16610b5d600360009054906101000a900461ffff1661ffff168761226090919063ffffffff16565b6122d090919063ffffffff16565b9150610bba600360049054906101000a900461ffff1661ffff16610bac600360029054906101000a900461ffff1661ffff168761226090919063ffffffff16565b6122d090919063ffffffff16565b90505b6000610be482610bd6858861231a90919063ffffffff16565b61231a90919063ffffffff16565b90506000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610c4082826000015461236490919063ffffffff16565b8160000181905550610c51826123b9565b6000841115610d0e57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd336000876040518463ffffffff1660e01b8152600401610cba93929190612f86565b602060405180830381600087803b158015610cd457600080fd5b505af1158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c91906128fa565b505b6000831115610dec57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401610d9893929190612fbd565b602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dea91906128fa565b505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610e4b93929190612fbd565b602060405180830381600087803b158015610e6557600080fd5b505af1158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d91906128fa565b508673ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c83604051610ee491906132cf565b60405180910390a250505050505050565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816001015411610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690613254565b60405180910390fd5b610f8833611b18565b60008160010154905060008260010181905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ff8929190612ff4565b602060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104a91906128fa565b503373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba8260405161109191906132cf565b60405180910390a25050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110cb611436565b61110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906131f4565b60405180910390fd5b60008161ffff16101580156111375750600360069054906101000a900461ffff1661ffff168161ffff1611155b801561116d5750600360069054906101000a900461ffff1661ffff1681600360029054906101000a900461ffff160161ffff1611155b6111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906130f4565b60405180910390fd5b80600360006101000a81548161ffff021916908361ffff16021790555050565b6111d4611436565b611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906131f4565b60405180910390fd5b6000811015611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90613274565b60405180910390fd5b80600c8190555050565b611269611436565b6112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f906131f4565b60405180910390fd5b60008110156112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613194565b60405180910390fd5b8060058190555050565b611306611301612258565b6123d7565b565b611310611436565b61134f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611346906131f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611478612258565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006114e384611e1d565b905060006114f48360000154611680565b90506000429050611560620186a06115528461154461151f62015180896122d090919063ffffffff16565b6115368a600201548861231a90919063ffffffff16565b61226090919063ffffffff16565b61226090919063ffffffff16565b6122d090919063ffffffff16565b945050505050919050565b611573611436565b6115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a9906131f4565b60405180910390fd5b60008161ffff16101580156115df5750600360069054906101000a900461ffff1661ffff168161ffff1611155b80156116155750600360069054906101000a900461ffff1661ffff1681600360009054906101000a900461ffff160161ffff1611155b611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b906130f4565b60405180910390fd5b80600360026101000a81548161ffff021916908361ffff16021790555050565b60075481565b60055481565b6000808214156116935760009050611769565b6005548211156116a7576007549050611769565b60045482111561173d5760006116ca60045460055461231a90919063ffffffff16565b905060006116e36004548561231a90919063ffffffff16565b90506117346117238361171561170660065460075461231a90919063ffffffff16565b8561226090919063ffffffff16565b6122d090919063ffffffff16565b60065461236490919063ffffffff16565b92505050611769565b6117666004546117586006548561226090919063ffffffff16565b6122d090919063ffffffff16565b90505b919050565b600360049054906101000a900461ffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506117f98160000154611680565b915050919050565b611809611436565b611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906131f4565b60405180910390fd5b600081101561188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613194565b60405180910390fd5b8060048190555050565b600360029054906101000a900461ffff1681565b6000600c54905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613294565b60405180910390fd5b6000816000015490506000826000018190555060008260010181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016119de929190612ff4565b602060405180830381600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3091906128fa565b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051611a7791906132cf565b60405180910390a25050565b611a8b611436565b611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac1906131f4565b60405180910390fd5b6000811015611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0590613194565b60405180910390fd5b8060078190555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060004290506000611b6b84611e1d565b9050600083600001541480611b805750600081145b80611b8f575082600201548211155b15611ba557818360020181905550505050611d32565b6000611bb085611494565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c276028856122d090919063ffffffff16565b6040518363ffffffff1660e01b8152600401611c4492919061301d565b600060405180830381600087803b158015611c5e57600080fd5b505af1158015611c72573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401611cd392919061301d565b600060405180830381600087803b158015611ced57600080fd5b505af1158015611d01573d6000803e3d6000fd5b50505050611d1c81856001015461236490919063ffffffff16565b8460010181905550828460020181905550505050505b50565b611d3d611436565b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d73906131f4565b60405180910390fd5b6000811015611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db790613194565b60405180910390fd5b8060068190555050565b611dd2611436565b611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e08906131f4565b60405180910390fd5b611e1a81612431565b50565b600080600090506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8e57600080fd5b505afa158015611ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec691906129c7565b905060005b8181101561206e576000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631526fe27836040518263ffffffff1660e01b8152600401611f3091906132cf565b60a06040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f809190612923565b6020015190506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b84896040518363ffffffff1660e01b8152600401611fe59291906132ea565b604080518083038186803b158015611ffc57600080fd5b505afa158015612010573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612034919061294c565b60000151905061205f612050838361226090919063ffffffff16565b8661236490919063ffffffff16565b94505050806001019050611ecb565b508192505050919050565b612089612084612258565b61077e565b6120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613174565b60405180910390fd5b6120d18161255e565b50565b600360009054906101000a900461ffff1681565b6120f28282612190565b15612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613114565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f890613214565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b60008083141561227357600090506122ca565b600082840290508284828161228457fe5b04146122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc906131d4565b60405180910390fd5b809150505b92915050565b600061231283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125b8565b905092915050565b600061235c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612619565b905092915050565b6000808284019050838110156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690613154565b60405180910390fd5b8091505092915050565b6123ce81600c5461236490919063ffffffff16565b600c8190555050565b6123eb81600161267490919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc12c224e0d437ba41f0b1d746dea5cb82c6d3808b990d3780eacbd3adcad0eb60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890613134565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125728160016120e890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f5eea62661ac9a33be3f9320ecd60878cd5e92025ffec0f2e9969d2448b497eda60405160405180910390a250565b600080831182906125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f691906130b2565b60405180910390fd5b50600083858161260b57fe5b049050809150509392505050565b6000838311158290612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265891906130b2565b60405180910390fd5b5060008385039050809150509392505050565b61267e8282612190565b6126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b4906131b4565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008135905061272a816134e1565b92915050565b60008135905061273f816134f8565b92915050565b600081519050612754816134f8565b92915050565b6000815190506127698161350f565b92915050565b600060a0828403121561278157600080fd5b61278b60a061334a565b9050600061279b8482850161275a565b60008301525060206127af8482850161286d565b60208301525060406127c38482850161286d565b60408301525060606127d78482850161286d565b60608301525060806127eb8482850161286d565b60808301525092915050565b60006040828403121561280957600080fd5b612813604061334a565b905060006128238482850161286d565b60008301525060206128378482850161286d565b60208301525092915050565b60008135905061285281613526565b92915050565b6000813590506128678161353d565b92915050565b60008151905061287c8161353d565b92915050565b60006020828403121561289457600080fd5b60006128a28482850161271b565b91505092915050565b6000806000606084860312156128c057600080fd5b60006128ce8682870161271b565b93505060206128df86828701612858565b92505060406128f086828701612730565b9150509250925092565b60006020828403121561290c57600080fd5b600061291a84828501612745565b91505092915050565b600060a0828403121561293557600080fd5b60006129438482850161276f565b91505092915050565b60006040828403121561295e57600080fd5b600061296c848285016127f7565b91505092915050565b60006020828403121561298757600080fd5b600061299584828501612843565b91505092915050565b6000602082840312156129b057600080fd5b60006129be84828501612858565b91505092915050565b6000602082840312156129d957600080fd5b60006129e78482850161286d565b91505092915050565b6129f9816133fb565b82525050565b612a0881613393565b82525050565b612a17816133a5565b82525050565b612a268161340d565b82525050565b612a3581613431565b82525050565b612a4481613455565b82525050565b6000612a5582613377565b612a5f8185613382565b9350612a6f81856020860161349d565b612a78816134d0565b840191505092915050565b6000612a90601c83613382565b91507f416d6f756e74206465706f7369746564206d757374206265203e2030000000006000830152602082019050919050565b6000612ad0602483613382565b91507f6275726e466565202b207472656173757279466565203e20726174696f4d617860008301527f48616c66000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b36601f83613382565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000612b76602683613382565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bdc601b83613382565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612c1c603683613382565b91507f4465706f7369746f72526f6c653a2063616c6c657220646f6573206e6f74206860008301527f61766520746865204465706f7369746f7220726f6c65000000000000000000006020830152604082019050919050565b6000612c82601683613382565b91507f56616c7565206d75737420626520706f736974697665000000000000000000006000830152602082019050919050565b6000612cc2602183613382565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d28602183613382565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8e602083613382565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612dce602283613382565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e34602c83613382565b91507f4d7573742062652063616c6c65642066726f6d2063757272656e74207472656160008301527f73757279206164647265737300000000000000000000000000000000000000006020830152604082019050919050565b6000612e9a601883613382565b91507f416464726573732062616c616e636520697320656d70747900000000000000006000830152602082019050919050565b6000612eda601083613382565b91507f43616e74206265206e65676174697665000000000000000000000000000000006000830152602082019050919050565b6000612f1a601083613382565b91507f42616c616e636520697320656d707479000000000000000000000000000000006000830152602082019050919050565b612f56816133c3565b82525050565b612f65816133f1565b82525050565b6000602082019050612f8060008301846129ff565b92915050565b6000606082019050612f9b60008301866129f0565b612fa860208301856129f0565b612fb56040830184612f5c565b949350505050565b6000606082019050612fd260008301866129f0565b612fdf60208301856129ff565b612fec6040830184612f5c565b949350505050565b600060408201905061300960008301856129f0565b6130166020830184612f5c565b9392505050565b600060408201905061303260008301856129ff565b61303f6020830184612f5c565b9392505050565b600060208201905061305b6000830184612a0e565b92915050565b60006020820190506130766000830184612a1d565b92915050565b60006020820190506130916000830184612a2c565b92915050565b60006020820190506130ac6000830184612a3b565b92915050565b600060208201905081810360008301526130cc8184612a4a565b905092915050565b600060208201905081810360008301526130ed81612a83565b9050919050565b6000602082019050818103600083015261310d81612ac3565b9050919050565b6000602082019050818103600083015261312d81612b29565b9050919050565b6000602082019050818103600083015261314d81612b69565b9050919050565b6000602082019050818103600083015261316d81612bcf565b9050919050565b6000602082019050818103600083015261318d81612c0f565b9050919050565b600060208201905081810360008301526131ad81612c75565b9050919050565b600060208201905081810360008301526131cd81612cb5565b9050919050565b600060208201905081810360008301526131ed81612d1b565b9050919050565b6000602082019050818103600083015261320d81612d81565b9050919050565b6000602082019050818103600083015261322d81612dc1565b9050919050565b6000602082019050818103600083015261324d81612e27565b9050919050565b6000602082019050818103600083015261326d81612e8d565b9050919050565b6000602082019050818103600083015261328d81612ecd565b9050919050565b600060208201905081810360008301526132ad81612f0d565b9050919050565b60006020820190506132c96000830184612f4d565b92915050565b60006020820190506132e46000830184612f5c565b92915050565b60006040820190506132ff6000830185612f5c565b61330c60208301846129ff565b9392505050565b60006060820190506133286000830186612f5c565b6133356020830185612f5c565b6133426040830184612f5c565b949350505050565b6000604051905081810181811067ffffffffffffffff8211171561336d57600080fd5b8060405250919050565b600081519050919050565b600082825260208201905092915050565b600061339e826133d1565b9050919050565b60008115159050919050565b60006133bc82613393565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061340682613479565b9050919050565b60006134188261341f565b9050919050565b600061342a826133d1565b9050919050565b600061343c82613443565b9050919050565b600061344e826133d1565b9050919050565b600061346082613467565b9050919050565b6000613472826133d1565b9050919050565b60006134848261348b565b9050919050565b6000613496826133d1565b9050919050565b60005b838110156134bb5780820151818401526020810190506134a0565b838111156134ca576000848401525b50505050565b6000601f19601f8301169050919050565b6134ea81613393565b81146134f557600080fd5b50565b613501816133a5565b811461350c57600080fd5b50565b613518816133b1565b811461352357600080fd5b50565b61352f816133c3565b811461353a57600080fd5b50565b613546816133f1565b811461355157600080fd5b5056fea26469706673582212203ee2ceeb879217ac9fa0b6e3497b40437f296e938721735635d19ed38a2cb3f264736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009d47894f8becb68b9cf3428d256311affe8b068b0000000000000000000000001eadc903341cfdb3406a04506239f52d076b170b00000000000000000000000088faac1678c864d080d592bc15d1cdadf01d71290000000000000000000000007fcb8aaea5f30620aa69d1978f1dc814cf0502ad
-----Decoded View---------------
Arg [0] : _ropeAddress (address): 0x9D47894f8BECB68B9cF3428d256311Affe8B068B
Arg [1] : _hopeAddress (address): 0x1EadC903341CFdB3406a04506239f52D076b170B
Arg [2] : _giverOfHopeAddress (address): 0x88faAC1678c864d080d592BC15d1CdAdf01d7129
Arg [3] : _treasuryAddr (address): 0x7fCb8aAeA5f30620Aa69d1978F1dC814Cf0502ad
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000009d47894f8becb68b9cf3428d256311affe8b068b
Arg [1] : 0000000000000000000000001eadc903341cfdb3406a04506239f52d076b170b
Arg [2] : 00000000000000000000000088faac1678c864d080d592bc15d1cdadf01d7129
Arg [3] : 0000000000000000000000007fcb8aaea5f30620aa69d1978f1dc814cf0502ad
Deployed Bytecode Sourcemap
25027:9575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26197:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25444:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25860:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28710:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22973:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26404:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33254:551;;;:::i;:::-;;32257:989;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33813:360;;;:::i;:::-;;26342:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28106:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29463:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27358:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23205:85;;;:::i;:::-;;2861:140;;;:::i;:::-;;2050:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2416:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30661:392;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28414:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26256:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26047;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29638:768;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25664:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26308:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30414:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27088:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25626:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29100:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26367:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34244:355;;;:::i;:::-;;27851:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31061:681;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27597:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3156:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31750:497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23096:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25537:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26197:52;;;;:::o;25444:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25860:51::-;;;;:::o;28710:189::-;28791:12;;;;;;;;;;;28777:26;;:10;:26;;;28769:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28878:13;28863:12;;:28;;;;;;;;;;;;;;;;;;28710:189;:::o;22973:115::-;23032:4;23056:24;23072:7;23056:11;:15;;:24;;;;:::i;:::-;23049:31;;22973:115;;;:::o;26404:27::-;;;;;;;;;;;;;:::o;33254:551::-;33294:21;33318:8;:20;33327:10;33318:20;;;;;;;;;;;;;;;33294:44;;33375:1;33357:4;:15;;;:19;33349:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33418:22;33429:10;33418;:22::i;:::-;33453:19;33475:4;:15;;;33453:37;;33501:19;33523:4;:15;;;33501:37;;33567:1;33549:4;:15;;:19;;;;33597:1;33579:4;:15;;:19;;;;33611:4;;;;;;;;;;;:13;;;33625:10;33637:11;33611:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33660:4;;;;;;;;;;;:13;;;33674:10;33686:11;33660:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33725:10;33716:33;;;33737:11;33716:33;;;;;;:::i;:::-;;;;;;;;33773:10;33765:32;;;33785:11;33765:32;;;;;;:::i;:::-;;;;;;;;33254:551;;;:::o;32257:989::-;22861:25;22873:12;:10;:12::i;:::-;22861:11;:25::i;:::-;22853:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;32374:1:::1;32364:7;:11;32356:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32421:17;32432:5;32421:10;:17::i;:::-;32451:16;32482:20:::0;32524:9:::1;32519:156;;32561:34;32586:8;;;;;;;;;;;32561:34;;:20;32573:7;;;;;;;;;;;32561:20;;:7;:11;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;32550:45;;32625:38;32654:8;;;;;;;;;;;32625:38;;:24;32637:11;;;;;;;;;;;32625:24;;:7;:11;;:24;;;;:::i;:::-;:28;;:38;;;;:::i;:::-;32610:53;;32519:156;32687:18;32708:39;32734:12;32708:21;32720:8;32708:7;:11;;:21;;;;:::i;:::-;:25;;:39;;;;:::i;:::-;32687:60;;32760:21;32784:8;:15;32793:5;32784:15;;;;;;;;;;;;;;;32760:39;;32828:31;32848:10;32828:4;:15;;;:19;;:31;;;;:::i;:::-;32810:4;:15;;:49;;;;32870:27;32886:10;32870:15;:27::i;:::-;32925:1;32914:8;:12;32910:98;;;32943:4;;;;;;;;;;;:17;;;32961:10;32981:3;32987:8;32943:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32910:98;33039:1;33024:12;:16;33020:106;;;33057:4;;;;;;;;;;;:17;;;33075:10;33087:12;;;;;;;;;;;33101;33057:57;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33020:106;33138:4;;;;;;;;;;;:17;;;33156:10;33176:4;33183:10;33138:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33220:5;33212:26;;;33227:10;33212:26;;;;;;:::i;:::-;;;;;;;;22956:1;;;;32257:989:::0;;;:::o;33813:360::-;33852:21;33876:8;:20;33885:10;33876:20;;;;;;;;;;;;;;;33852:44;;33933:1;33915:4;:15;;;:19;33907:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33976:22;33987:10;33976;:22::i;:::-;34011:15;34029:4;:15;;;34011:33;;34073:1;34055:4;:15;;:19;;;;34085:4;;;;;;;;;;;:13;;;34099:10;34111:7;34085:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34145:10;34137:28;;;34157:7;34137:28;;;;;;:::i;:::-;;;;;;;;33813:360;;:::o;26342:18::-;;;;;;;;;;;;;:::o;28106:226::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28189:1:::1;28179:6;:11;;;;:37;;;;;28204:12;;;;;;;;;;;28194:22;;:6;:22;;;;28179:37;:77;;;;;28244:12;;;;;;;;;;;28220:36;;28234:6;28220:11;;;;;;;;;;;:20;:36;;;;28179:77;28171:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;28318:6;28308:7;;:16;;;;;;;;;;;;;;;;;;28106:226:::0;:::o;29463:156::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29551:1:::1;29540:7;:12;;29532:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;29604:7;29584:17;:27;;;;29463:156:::0;:::o;27358:171::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27454:1:::1;27444:6;:11;;27436:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;27515:6;27493:19;:28;;;;27358:171:::0;:::o;23205:85::-;23252:30;23269:12;:10;:12::i;:::-;23252:16;:30::i;:::-;23205:85::o;2861:140::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2960:1:::1;2923:40;;2944:6;::::0;::::1;;;;;;;;2923:40;;;;;;;;;;;;2991:1;2974:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2861:140::o:0;2050:79::-;2088:7;2115:6;;;;;;;;;;;2108:13;;2050:79;:::o;2416:94::-;2456:4;2496:6;;;;;;;;;;;2480:22;;:12;:10;:12::i;:::-;:22;;;2473:29;;2416:94;:::o;30661:392::-;30718:7;30738:21;30762:8;:15;30771:5;30762:15;;;;;;;;;;;;;;;30738:39;;30788:18;30809:26;30829:5;30809:19;:26::i;:::-;30788:47;;30846:18;30867:30;30881:4;:15;;;30867:13;:30::i;:::-;30846:51;;30908:17;30928:15;30908:35;;30963:82;31041:3;30963:73;31025:10;30963:57;30998:21;31013:5;30998:10;:14;;:21;;;;:::i;:::-;30963:30;30977:4;:15;;;30963:9;:13;;:30;;;;:::i;:::-;:34;;:57;;;;:::i;:::-;:61;;:73;;;;:::i;:::-;:77;;:82;;;;:::i;:::-;30956:89;;;;;;30661:392;;;:::o;28414:230::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28501:1:::1;28491:6;:11;;;;:37;;;;;28516:12;;;;;;;;;;;28506:22;;:6;:22;;;;28491:37;:73;;;;;28552:12;;;;;;;;;;;28532:32;;28542:6;28532:7;;;;;;;;;;;:16;:32;;;;28491:73;28483:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;28630:6;28616:11;;:20;;;;;;;;;;;;;;;;;;28414:230:::0;:::o;26256:43::-;;;;:::o;26047:::-;;;;:::o;29638:768::-;29702:7;29740:1;29726:10;:15;29722:56;;;29765:1;29758:8;;;;29722:56;29807:19;;29794:10;:32;29790:609;;;29850:22;;29843:29;;;;29790:609;29907:28;;29894:10;:41;29890:509;;;29952:19;29974:53;29998:28;;29974:19;;:23;;:53;;;;:::i;:::-;29952:75;;30042:22;30067:44;30082:28;;30067:10;:14;;:44;;;;:::i;:::-;30042:69;;30133:133;30169:96;30253:11;30169:79;30188:59;30215:31;;30188:22;;:26;;:59;;;;:::i;:::-;30169:14;:18;;:79;;;;:::i;:::-;:83;;:96;;;;:::i;:::-;30133:31;;:35;;:133;;;;:::i;:::-;30126:140;;;;;;29890:509;30306:81;30358:28;;30306:47;30321:31;;30306:10;:14;;:47;;;;:::i;:::-;:51;;:81;;;;:::i;:::-;30299:88;;29638:768;;;;:::o;25664:29::-;;;;;;;;;;;;;:::o;26308:27::-;;;;;;;;;;;;;:::o;30414:183::-;30482:7;30502:21;30526:8;:15;30535:5;30526:15;;;;;;;;;;;;;;;30502:39;;30559:30;30573:4;:15;;;30559:13;:30::i;:::-;30552:37;;;30414:183;;;:::o;27088:189::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27193:1:::1;27183:6;:11;;27175:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;27263:6;27232:28;:37;;;;27088:189:::0;:::o;25626:31::-;;;;;;;;;;;;;:::o;29100:101::-;29149:7;29176:17;;29169:24;;29100:101;:::o;26367:30::-;;;;;;;;;;;;;:::o;34244:355::-;34291:21;34315:8;:20;34324:10;34315:20;;;;;;;;;;;;;;;34291:44;;34374:1;34356:4;:15;;;:19;34348:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;34409:14;34426:4;:15;;;34409:32;;34470:1;34452:4;:15;;:19;;;;34500:1;34482:4;:15;;:19;;;;34512:4;;;;;;;;;;;:13;;;34526:10;34538:6;34512:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34572:10;34563:28;;;34584:6;34563:28;;;;;;:::i;:::-;;;;;;;;34244:355;;:::o;27851:177::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27950:1:::1;27940:6;:11;;27932:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;28014:6;27989:22;:31;;;;27851:177:::0;:::o;31061:681::-;31114:21;31138:8;:15;31147:5;31138:15;;;;;;;;;;;;;;;31114:39;;31166:17;31186:15;31166:35;;31212:18;31233:26;31253:5;31233:19;:26::i;:::-;31212:47;;31295:1;31276:4;:15;;;:20;:39;;;;31314:1;31300:10;:15;31276:39;:71;;;;31332:4;:15;;;31319:9;:28;;31276:71;31272:152;;;31382:9;31364:4;:15;;:27;;;;31406:7;;;;;31272:152;31436:18;31457;31469:5;31457:11;:18::i;:::-;31436:39;;31488:4;;;;;;;;;;;:9;;;31498:12;;;;;;;;;;;31512:18;31527:2;31512:10;:14;;:18;;;;:::i;:::-;31488:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31598:4;;;;;;;;;;;:9;;;31616:4;31623:10;31598:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31665:31;31685:10;31665:4;:15;;;:19;;:31;;;;:::i;:::-;31647:4;:15;;:49;;;;31725:9;31707:4;:15;;:27;;;;31061:681;;;;;;:::o;27597:195::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27705:1:::1;27695:6;:11;;27687:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;27778:6;27744:31;:40;;;;27597:195:::0;:::o;3156:109::-;2262:9;:7;:9::i;:::-;2254:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;3229:28:::1;3248:8;3229:18;:28::i;:::-;3156:109:::0;:::o;31750:497::-;31815:7;31835:24;31862:1;31835:28;;31874:14;31891:11;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31874:41;;31931:11;31926:279;31954:6;31948:3;:12;31926:279;;;31984:19;32006:11;;;;;;;;;;;:20;;;32027:3;32006:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;;31984:59;;32058:14;32075:11;;;;;;;;;;;:20;;;32096:3;32101:5;32075:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;32058:56;;32149:44;32169:23;32180:11;32169:6;:10;;:23;;;;:::i;:::-;32149:15;:19;;:44;;;;:::i;:::-;32131:62;;31926:279;;31962:5;;;;;31926:279;;;;32224:15;32217:22;;;;31750:497;;;:::o;23096:101::-;22861:25;22873:12;:10;:12::i;:::-;22861:11;:25::i;:::-;22853:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;23167:22:::1;23181:7;23167:13;:22::i;:::-;23096:101:::0;:::o;25537:25::-;;;;;;;;;;;;;:::o;21770:178::-;21848:18;21852:4;21858:7;21848:3;:18::i;:::-;21847:19;21839:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21936:4;21913;:11;;:20;21925:7;21913:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21770:178;;:::o;22306:203::-;22378:4;22422:1;22403:21;;:7;:21;;;;22395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22481:4;:11;;:20;22493:7;22481:20;;;;;;;;;;;;;;;;;;;;;;;;;22474:27;;22306:203;;;;:::o;841:98::-;886:15;921:10;914:17;;841:98;:::o;18415:471::-;18473:7;18723:1;18718;:6;18714:47;;;18748:1;18741:8;;;;18714:47;18773:9;18789:1;18785;:5;18773:17;;18818:1;18813;18809;:5;;;;;;:10;18801:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18877:1;18870:8;;;18415:471;;;;;:::o;19362:132::-;19420:7;19447:39;19451:1;19454;19447:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19440:46;;19362:132;;;;:::o;17525:136::-;17583:7;17610:43;17614:1;17617;17610:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17603:50;;17525:136;;;;:::o;17061:181::-;17119:7;17139:9;17155:1;17151;:5;17139:17;;17180:1;17175;:6;;17167:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17233:1;17226:8;;;17061:181;;;;:::o;29234:120::-;29316:30;29338:7;29316:17;;:21;;:30;;;;:::i;:::-;29296:17;:50;;;;29234:120;:::o;23437:139::-;23500:27;23519:7;23500:11;:18;;:27;;;;:::i;:::-;23560:7;23543:25;;;;;;;;;;;;23437:139;:::o;3371:229::-;3465:1;3445:22;;:8;:22;;;;3437:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3555:8;3526:38;;3547:6;;;;;;;;;;3526:38;;;;;;;;;;;;3584:8;3575:6;;:17;;;;;;;;;;;;;;;;;;3371:229;:::o;23298:131::-;23358:24;23374:7;23358:11;:15;;:24;;;;:::i;:::-;23413:7;23398:23;;;;;;;;;;;;23298:131;:::o;19990:278::-;20076:7;20108:1;20104;:5;20111:12;20096:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20135:9;20151:1;20147;:5;;;;;;20135:17;;20259:1;20252:8;;;19990:278;;;;;:::o;17964:192::-;18050:7;18083:1;18078;:6;;18086:12;18070:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18110:9;18126:1;18122;:5;18110:17;;18147:1;18140:8;;;17964:192;;;;;:::o;22028:183::-;22108:18;22112:4;22118:7;22108:3;:18::i;:::-;22100:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22198:5;22175:4;:11;;:20;22187:7;22175:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22028:183;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:124::-;;219:6;206:20;197:29;;231:30;255:5;231:30;:::i;:::-;191:75;;;;:::o;273:128::-;;354:6;348:13;339:22;;366:30;390:5;366:30;:::i;:::-;333:68;;;;:::o;408:162::-;;506:6;500:13;491:22;;518:47;559:5;518:47;:::i;:::-;485:85;;;;:::o;611:1014::-;;737:4;725:9;720:3;716:19;712:30;709:2;;;755:1;752;745:12;709:2;773:20;788:4;773:20;:::i;:::-;764:29;;844:1;876:74;946:3;937:6;926:9;922:22;876:74;:::i;:::-;869:4;862:5;858:16;851:100;803:159;1019:2;1052:60;1108:3;1099:6;1088:9;1084:22;1052:60;:::i;:::-;1045:4;1038:5;1034:16;1027:86;972:152;1178:2;1211:60;1267:3;1258:6;1247:9;1243:22;1211:60;:::i;:::-;1204:4;1197:5;1193:16;1186:86;1134:149;1343:2;1376:60;1432:3;1423:6;1412:9;1408:22;1376:60;:::i;:::-;1369:4;1362:5;1358:16;1351:86;1293:155;1509:3;1543:60;1599:3;1590:6;1579:9;1575:22;1543:60;:::i;:::-;1536:4;1529:5;1525:16;1518:86;1458:157;703:922;;;;:::o;1666:509::-;;1792:4;1780:9;1775:3;1771:19;1767:30;1764:2;;;1810:1;1807;1800:12;1764:2;1828:20;1843:4;1828:20;:::i;:::-;1819:29;;1900:1;1932:60;1988:3;1979:6;1968:9;1964:22;1932:60;:::i;:::-;1925:4;1918:5;1914:16;1907:86;1858:146;2060:2;2093:60;2149:3;2140:6;2129:9;2125:22;2093:60;:::i;:::-;2086:4;2079:5;2075:16;2068:86;2014:151;1758:417;;;;:::o;2182:128::-;;2261:6;2248:20;2239:29;;2273:32;2299:5;2273:32;:::i;:::-;2233:77;;;;:::o;2317:130::-;;2397:6;2384:20;2375:29;;2409:33;2436:5;2409:33;:::i;:::-;2369:78;;;;:::o;2454:134::-;;2538:6;2532:13;2523:22;;2550:33;2577:5;2550:33;:::i;:::-;2517:71;;;;:::o;2595:241::-;;2699:2;2687:9;2678:7;2674:23;2670:32;2667:2;;;2715:1;2712;2705:12;2667:2;2750:1;2767:53;2812:7;2803:6;2792:9;2788:22;2767:53;:::i;:::-;2757:63;;2729:97;2661:175;;;;:::o;2843:485::-;;;;2978:2;2966:9;2957:7;2953:23;2949:32;2946:2;;;2994:1;2991;2984:12;2946:2;3029:1;3046:53;3091:7;3082:6;3071:9;3067:22;3046:53;:::i;:::-;3036:63;;3008:97;3136:2;3154:53;3199:7;3190:6;3179:9;3175:22;3154:53;:::i;:::-;3144:63;;3115:98;3244:2;3262:50;3304:7;3295:6;3284:9;3280:22;3262:50;:::i;:::-;3252:60;;3223:95;2940:388;;;;;:::o;3335:257::-;;3447:2;3435:9;3426:7;3422:23;3418:32;3415:2;;;3463:1;3460;3453:12;3415:2;3498:1;3515:61;3568:7;3559:6;3548:9;3544:22;3515:61;:::i;:::-;3505:71;;3477:105;3409:183;;;;:::o;3599:316::-;;3740:3;3728:9;3719:7;3715:23;3711:33;3708:2;;;3757:1;3754;3747:12;3708:2;3792:1;3809:90;3891:7;3882:6;3871:9;3867:22;3809:90;:::i;:::-;3799:100;;3771:134;3702:213;;;;:::o;3922:315::-;;4063:2;4051:9;4042:7;4038:23;4034:32;4031:2;;;4079:1;4076;4069:12;4031:2;4114:1;4131:90;4213:7;4204:6;4193:9;4189:22;4131:90;:::i;:::-;4121:100;;4093:134;4025:212;;;;:::o;4244:239::-;;4347:2;4335:9;4326:7;4322:23;4318:32;4315:2;;;4363:1;4360;4353:12;4315:2;4398:1;4415:52;4459:7;4450:6;4439:9;4435:22;4415:52;:::i;:::-;4405:62;;4377:96;4309:174;;;;:::o;4490:241::-;;4594:2;4582:9;4573:7;4569:23;4565:32;4562:2;;;4610:1;4607;4600:12;4562:2;4645:1;4662:53;4707:7;4698:6;4687:9;4683:22;4662:53;:::i;:::-;4652:63;;4624:97;4556:175;;;;:::o;4738:263::-;;4853:2;4841:9;4832:7;4828:23;4824:32;4821:2;;;4869:1;4866;4859:12;4821:2;4904:1;4921:64;4977:7;4968:6;4957:9;4953:22;4921:64;:::i;:::-;4911:74;;4883:108;4815:186;;;;:::o;5008:142::-;5099:45;5138:5;5099:45;:::i;:::-;5094:3;5087:58;5081:69;;:::o;5157:113::-;5240:24;5258:5;5240:24;:::i;:::-;5235:3;5228:37;5222:48;;:::o;5277:104::-;5354:21;5369:5;5354:21;:::i;:::-;5349:3;5342:34;5336:45;;:::o;5388:166::-;5491:57;5542:5;5491:57;:::i;:::-;5486:3;5479:70;5473:81;;:::o;5561:174::-;5668:61;5723:5;5668:61;:::i;:::-;5663:3;5656:74;5650:85;;:::o;5742:154::-;5839:51;5884:5;5839:51;:::i;:::-;5834:3;5827:64;5821:75;;:::o;5903:347::-;;6015:39;6048:5;6015:39;:::i;:::-;6066:71;6130:6;6125:3;6066:71;:::i;:::-;6059:78;;6142:52;6187:6;6182:3;6175:4;6168:5;6164:16;6142:52;:::i;:::-;6215:29;6237:6;6215:29;:::i;:::-;6210:3;6206:39;6199:46;;5995:255;;;;;:::o;6258:328::-;;6418:67;6482:2;6477:3;6418:67;:::i;:::-;6411:74;;6518:30;6514:1;6509:3;6505:11;6498:51;6577:2;6572:3;6568:12;6561:19;;6404:182;;;:::o;6595:373::-;;6755:67;6819:2;6814:3;6755:67;:::i;:::-;6748:74;;6855:34;6851:1;6846:3;6842:11;6835:55;6924:6;6919:2;6914:3;6910:12;6903:28;6959:2;6954:3;6950:12;6943:19;;6741:227;;;:::o;6977:331::-;;7137:67;7201:2;7196:3;7137:67;:::i;:::-;7130:74;;7237:33;7233:1;7228:3;7224:11;7217:54;7299:2;7294:3;7290:12;7283:19;;7123:185;;;:::o;7317:375::-;;7477:67;7541:2;7536:3;7477:67;:::i;:::-;7470:74;;7577:34;7573:1;7568:3;7564:11;7557:55;7646:8;7641:2;7636:3;7632:12;7625:30;7683:2;7678:3;7674:12;7667:19;;7463:229;;;:::o;7701:327::-;;7861:67;7925:2;7920:3;7861:67;:::i;:::-;7854:74;;7961:29;7957:1;7952:3;7948:11;7941:50;8019:2;8014:3;8010:12;8003:19;;7847:181;;;:::o;8037:391::-;;8197:67;8261:2;8256:3;8197:67;:::i;:::-;8190:74;;8297:34;8293:1;8288:3;8284:11;8277:55;8366:24;8361:2;8356:3;8352:12;8345:46;8419:2;8414:3;8410:12;8403:19;;8183:245;;;:::o;8437:322::-;;8597:67;8661:2;8656:3;8597:67;:::i;:::-;8590:74;;8697:24;8693:1;8688:3;8684:11;8677:45;8750:2;8745:3;8741:12;8734:19;;8583:176;;;:::o;8768:370::-;;8928:67;8992:2;8987:3;8928:67;:::i;:::-;8921:74;;9028:34;9024:1;9019:3;9015:11;9008:55;9097:3;9092:2;9087:3;9083:12;9076:25;9129:2;9124:3;9120:12;9113:19;;8914:224;;;:::o;9147:370::-;;9307:67;9371:2;9366:3;9307:67;:::i;:::-;9300:74;;9407:34;9403:1;9398:3;9394:11;9387:55;9476:3;9471:2;9466:3;9462:12;9455:25;9508:2;9503:3;9499:12;9492:19;;9293:224;;;:::o;9526:332::-;;9686:67;9750:2;9745:3;9686:67;:::i;:::-;9679:74;;9786:34;9782:1;9777:3;9773:11;9766:55;9849:2;9844:3;9840:12;9833:19;;9672:186;;;:::o;9867:371::-;;10027:67;10091:2;10086:3;10027:67;:::i;:::-;10020:74;;10127:34;10123:1;10118:3;10114:11;10107:55;10196:4;10191:2;10186:3;10182:12;10175:26;10229:2;10224:3;10220:12;10213:19;;10013:225;;;:::o;10247:381::-;;10407:67;10471:2;10466:3;10407:67;:::i;:::-;10400:74;;10507:34;10503:1;10498:3;10494:11;10487:55;10576:14;10571:2;10566:3;10562:12;10555:36;10619:2;10614:3;10610:12;10603:19;;10393:235;;;:::o;10637:324::-;;10797:67;10861:2;10856:3;10797:67;:::i;:::-;10790:74;;10897:26;10893:1;10888:3;10884:11;10877:47;10952:2;10947:3;10943:12;10936:19;;10783:178;;;:::o;10970:316::-;;11130:67;11194:2;11189:3;11130:67;:::i;:::-;11123:74;;11230:18;11226:1;11221:3;11217:11;11210:39;11277:2;11272:3;11268:12;11261:19;;11116:170;;;:::o;11295:316::-;;11455:67;11519:2;11514:3;11455:67;:::i;:::-;11448:74;;11555:18;11551:1;11546:3;11542:11;11535:39;11602:2;11597:3;11593:12;11586:19;;11441:170;;;:::o;11619:110::-;11700:23;11717:5;11700:23;:::i;:::-;11695:3;11688:36;11682:47;;:::o;11736:113::-;11819:24;11837:5;11819:24;:::i;:::-;11814:3;11807:37;11801:48;;:::o;11856:222::-;;11983:2;11972:9;11968:18;11960:26;;11997:71;12065:1;12054:9;12050:17;12041:6;11997:71;:::i;:::-;11954:124;;;;:::o;12085:476::-;;12284:2;12273:9;12269:18;12261:26;;12298:79;12374:1;12363:9;12359:17;12350:6;12298:79;:::i;:::-;12388:80;12464:2;12453:9;12449:18;12440:6;12388:80;:::i;:::-;12479:72;12547:2;12536:9;12532:18;12523:6;12479:72;:::i;:::-;12255:306;;;;;;:::o;12568:460::-;;12759:2;12748:9;12744:18;12736:26;;12773:79;12849:1;12838:9;12834:17;12825:6;12773:79;:::i;:::-;12863:72;12931:2;12920:9;12916:18;12907:6;12863:72;:::i;:::-;12946;13014:2;13003:9;12999:18;12990:6;12946:72;:::i;:::-;12730:298;;;;;;:::o;13035:349::-;;13198:2;13187:9;13183:18;13175:26;;13212:79;13288:1;13277:9;13273:17;13264:6;13212:79;:::i;:::-;13302:72;13370:2;13359:9;13355:18;13346:6;13302:72;:::i;:::-;13169:215;;;;;:::o;13391:333::-;;13546:2;13535:9;13531:18;13523:26;;13560:71;13628:1;13617:9;13613:17;13604:6;13560:71;:::i;:::-;13642:72;13710:2;13699:9;13695:18;13686:6;13642:72;:::i;:::-;13517:207;;;;;:::o;13731:210::-;;13852:2;13841:9;13837:18;13829:26;;13866:65;13928:1;13917:9;13913:17;13904:6;13866:65;:::i;:::-;13823:118;;;;:::o;13948:262::-;;14095:2;14084:9;14080:18;14072:26;;14109:91;14197:1;14186:9;14182:17;14173:6;14109:91;:::i;:::-;14066:144;;;;:::o;14217:270::-;;14368:2;14357:9;14353:18;14345:26;;14382:95;14474:1;14463:9;14459:17;14450:6;14382:95;:::i;:::-;14339:148;;;;:::o;14494:250::-;;14635:2;14624:9;14620:18;14612:26;;14649:85;14731:1;14720:9;14716:17;14707:6;14649:85;:::i;:::-;14606:138;;;;:::o;14751:310::-;;14898:2;14887:9;14883:18;14875:26;;14948:9;14942:4;14938:20;14934:1;14923:9;14919:17;14912:47;14973:78;15046:4;15037:6;14973:78;:::i;:::-;14965:86;;14869:192;;;;:::o;15068:416::-;;15268:2;15257:9;15253:18;15245:26;;15318:9;15312:4;15308:20;15304:1;15293:9;15289:17;15282:47;15343:131;15469:4;15343:131;:::i;:::-;15335:139;;15239:245;;;:::o;15491:416::-;;15691:2;15680:9;15676:18;15668:26;;15741:9;15735:4;15731:20;15727:1;15716:9;15712:17;15705:47;15766:131;15892:4;15766:131;:::i;:::-;15758:139;;15662:245;;;:::o;15914:416::-;;16114:2;16103:9;16099:18;16091:26;;16164:9;16158:4;16154:20;16150:1;16139:9;16135:17;16128:47;16189:131;16315:4;16189:131;:::i;:::-;16181:139;;16085:245;;;:::o;16337:416::-;;16537:2;16526:9;16522:18;16514:26;;16587:9;16581:4;16577:20;16573:1;16562:9;16558:17;16551:47;16612:131;16738:4;16612:131;:::i;:::-;16604:139;;16508:245;;;:::o;16760:416::-;;16960:2;16949:9;16945:18;16937:26;;17010:9;17004:4;17000:20;16996:1;16985:9;16981:17;16974:47;17035:131;17161:4;17035:131;:::i;:::-;17027:139;;16931:245;;;:::o;17183:416::-;;17383:2;17372:9;17368:18;17360:26;;17433:9;17427:4;17423:20;17419:1;17408:9;17404:17;17397:47;17458:131;17584:4;17458:131;:::i;:::-;17450:139;;17354:245;;;:::o;17606:416::-;;17806:2;17795:9;17791:18;17783:26;;17856:9;17850:4;17846:20;17842:1;17831:9;17827:17;17820:47;17881:131;18007:4;17881:131;:::i;:::-;17873:139;;17777:245;;;:::o;18029:416::-;;18229:2;18218:9;18214:18;18206:26;;18279:9;18273:4;18269:20;18265:1;18254:9;18250:17;18243:47;18304:131;18430:4;18304:131;:::i;:::-;18296:139;;18200:245;;;:::o;18452:416::-;;18652:2;18641:9;18637:18;18629:26;;18702:9;18696:4;18692:20;18688:1;18677:9;18673:17;18666:47;18727:131;18853:4;18727:131;:::i;:::-;18719:139;;18623:245;;;:::o;18875:416::-;;19075:2;19064:9;19060:18;19052:26;;19125:9;19119:4;19115:20;19111:1;19100:9;19096:17;19089:47;19150:131;19276:4;19150:131;:::i;:::-;19142:139;;19046:245;;;:::o;19298:416::-;;19498:2;19487:9;19483:18;19475:26;;19548:9;19542:4;19538:20;19534:1;19523:9;19519:17;19512:47;19573:131;19699:4;19573:131;:::i;:::-;19565:139;;19469:245;;;:::o;19721:416::-;;19921:2;19910:9;19906:18;19898:26;;19971:9;19965:4;19961:20;19957:1;19946:9;19942:17;19935:47;19996:131;20122:4;19996:131;:::i;:::-;19988:139;;19892:245;;;:::o;20144:416::-;;20344:2;20333:9;20329:18;20321:26;;20394:9;20388:4;20384:20;20380:1;20369:9;20365:17;20358:47;20419:131;20545:4;20419:131;:::i;:::-;20411:139;;20315:245;;;:::o;20567:416::-;;20767:2;20756:9;20752:18;20744:26;;20817:9;20811:4;20807:20;20803:1;20792:9;20788:17;20781:47;20842:131;20968:4;20842:131;:::i;:::-;20834:139;;20738:245;;;:::o;20990:416::-;;21190:2;21179:9;21175:18;21167:26;;21240:9;21234:4;21230:20;21226:1;21215:9;21211:17;21204:47;21265:131;21391:4;21265:131;:::i;:::-;21257:139;;21161:245;;;:::o;21413:218::-;;21538:2;21527:9;21523:18;21515:26;;21552:69;21618:1;21607:9;21603:17;21594:6;21552:69;:::i;:::-;21509:122;;;;:::o;21638:222::-;;21765:2;21754:9;21750:18;21742:26;;21779:71;21847:1;21836:9;21832:17;21823:6;21779:71;:::i;:::-;21736:124;;;;:::o;21867:333::-;;22022:2;22011:9;22007:18;21999:26;;22036:71;22104:1;22093:9;22089:17;22080:6;22036:71;:::i;:::-;22118:72;22186:2;22175:9;22171:18;22162:6;22118:72;:::i;:::-;21993:207;;;;;:::o;22207:444::-;;22390:2;22379:9;22375:18;22367:26;;22404:71;22472:1;22461:9;22457:17;22448:6;22404:71;:::i;:::-;22486:72;22554:2;22543:9;22539:18;22530:6;22486:72;:::i;:::-;22569;22637:2;22626:9;22622:18;22613:6;22569:72;:::i;:::-;22361:290;;;;;;:::o;22658:256::-;;22720:2;22714:9;22704:19;;22758:4;22750:6;22746:17;22857:6;22845:10;22842:22;22821:18;22809:10;22806:34;22803:62;22800:2;;;22878:1;22875;22868:12;22800:2;22898:10;22894:2;22887:22;22698:216;;;;:::o;22921:122::-;;23015:5;23009:12;22999:22;;22980:63;;;:::o;23051:163::-;;23166:6;23161:3;23154:19;23203:4;23198:3;23194:14;23179:29;;23147:67;;;;:::o;23222:91::-;;23284:24;23302:5;23284:24;:::i;:::-;23273:35;;23267:46;;;:::o;23320:85::-;;23393:5;23386:13;23379:21;23368:32;;23362:43;;;:::o;23412:105::-;;23488:24;23506:5;23488:24;:::i;:::-;23477:35;;23471:46;;;:::o;23524:84::-;;23596:6;23589:5;23585:18;23574:29;;23568:40;;;:::o;23615:121::-;;23688:42;23681:5;23677:54;23666:65;;23660:76;;;:::o;23743:72::-;;23805:5;23794:16;;23788:27;;;:::o;23822:129::-;;23909:37;23940:5;23909:37;:::i;:::-;23896:50;;23890:61;;;:::o;23958:161::-;;24057:57;24108:5;24057:57;:::i;:::-;24044:70;;24038:81;;;:::o;24126:128::-;;24225:24;24243:5;24225:24;:::i;:::-;24212:37;;24206:48;;;:::o;24261:169::-;;24364:61;24419:5;24364:61;:::i;:::-;24351:74;;24345:85;;;:::o;24437:132::-;;24540:24;24558:5;24540:24;:::i;:::-;24527:37;;24521:48;;;:::o;24576:149::-;;24669:51;24714:5;24669:51;:::i;:::-;24656:64;;24650:75;;;:::o;24732:122::-;;24825:24;24843:5;24825:24;:::i;:::-;24812:37;;24806:48;;;:::o;24861:121::-;;24940:37;24971:5;24940:37;:::i;:::-;24927:50;;24921:61;;;:::o;24989:108::-;;25068:24;25086:5;25068:24;:::i;:::-;25055:37;;25049:48;;;:::o;25105:268::-;25170:1;25177:101;25191:6;25188:1;25185:13;25177:101;;;25267:1;25262:3;25258:11;25252:18;25248:1;25243:3;25239:11;25232:39;25213:2;25210:1;25206:10;25201:15;;25177:101;;;25293:6;25290:1;25287:13;25284:2;;;25358:1;25349:6;25344:3;25340:16;25333:27;25284:2;25154:219;;;;:::o;25381:97::-;;25469:2;25465:7;25460:2;25453:5;25449:14;25445:28;25435:38;;25429:49;;;:::o;25486:117::-;25555:24;25573:5;25555:24;:::i;:::-;25548:5;25545:35;25535:2;;25594:1;25591;25584:12;25535:2;25529:74;:::o;25610:111::-;25676:21;25691:5;25676:21;:::i;:::-;25669:5;25666:32;25656:2;;25712:1;25709;25702:12;25656:2;25650:71;:::o;25728:145::-;25811:38;25843:5;25811:38;:::i;:::-;25804:5;25801:49;25791:2;;25864:1;25861;25854:12;25791:2;25785:88;:::o;25880:115::-;25948:23;25965:5;25948:23;:::i;:::-;25941:5;25938:34;25928:2;;25986:1;25983;25976:12;25928:2;25922:73;:::o;26002:117::-;26071:24;26089:5;26071:24;:::i;:::-;26064:5;26061:35;26051:2;;26110:1;26107;26100:12;26051:2;26045:74;:::o
Swarm Source
ipfs://3ee2ceeb879217ac9fa0b6e3497b40437f296e938721735635d19ed38a2cb3f2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.